Подача торта, пипса и окон на нашу четвертую вечеринку по случаю дня рождения!

Пришло время отпраздновать еще один год, когда RAPIDS ускоряет науку о данных и продвигает достижения повсюду. Когда-то небольшая команда, создававшая увлеченный проект, превратилась в сообщество, охватывающее весь земной шар. И в этом выпуске у нас есть несколько интересных объявлений, которые упрощают использование RAPIDS, где бы вы ни работали!

В пятый год мы расширяем наши усилия по ускорению обработки данных для всех, начиная с нескольких масштабных обновлений, которые делают RAPIDS доступным еще большему количеству разработчиков!

Делаем RAPIDS более доступным

Пакеты пунктов RAPIDS

Мы услышали запросы сообщества и рады сообщить, что теперь у RAPIDS есть экспериментальные пакеты, доступные через pip, самый популярный менеджер пакетов Python! Это упрощает установку RAPIDS в вашей среде. Для получения дополнительной информации о RAPIDS и пипсах посетите нашу специальную веб-страницу пипсов.

RAPIDS работает в Windows через WSL!

Поскольку 58% разработчиков Python используют Windows (Jetbrains), поддержка этого сообщества была нашей целью. И в этом выпуске мы рады сообщить, что RAPIDS поддерживается в Windows 11 через подсистему Windows для Linux 2! Подробнее о том, как начать работу, читайте в инструкции.

Мы не только делаем RAPIDS более доступным, но и продолжаем расширять функциональность и производительность библиотек RAPIDS! Ознакомьтесь с некоторыми ключевыми обновлениями из выпуска 22.10 ниже!

Улучшения ввода-вывода и сериализации по всем направлениям

Чтение и запись данных и моделей стали еще лучше!

Экспериментальная версия: новая вложенная программа чтения JSON.

Функция cuDF read_json теперь принимает на вход данные JSON с произвольной вложенностью. Эта новая экспериментальная функция позволяет считывать более сложные файлы JSON, сохраняя важную структурную информацию, при этом используя производительность графических процессоров. Вот пара примеров в действии:

json_str = '[{"list": [0,1,2], "struct": {"k":"v1"}},
              {"list": [3,4,5], "struct": {"k":"v2"}}]'
cudf.read_json(json_str, engine='cudf_experimental')
        list       struct
0  [0, 1, 2]  {'k': 'v1'}
1  [3, 4, 5]  {'k': 'v2'}
json_str = '{"a": [{"k1": "v1"}]}\n{"a": [{"k2":"v2"}]}'
cudf.read_json(json_str, engine='cudf_experimental', lines=True)
                            a
0  [{'k1': 'v1', 'k2': None}]
1  [{'k1': None, 'k2': 'v2'}]

Поддержка сжатия Zstandard

При работе с данными Parquet или ORC вы можете читать и записывать в файл с помощью cuDF, используя сжатие Zstandard, установив флаг compression='ZSTD'. (Вам нужно будет установить NVCOMP_POLICY на ALWAYS):

df.to_parquet(‘f.pq’, compression=’ZSTD’)

Чтение текста с помощью cuDF теперь в 40 раз быстрее!

За последние несколько выпусков cuDF работал над ускорением существующей функции read_text. Вы должны увидеть ускорение по всем направлениям с этой функцией, с самыми большими выигрышами на односимвольных разделителях.

Treelite обновлен до версии 3.0

Мы обновили поддержку Treelite в cuML до версии 3.0. Это означает, что вы можете сохранить любое дерево решений с градиентным усилением или модель случайного леса в Treelite и гарантировать, что они будут доступны для чтения в любой будущей версии Treelite 3.x.

Усовершенствования алгоритма ближайших соседей

Прогнозирование вне выборки и мягкая кластеризация в HDBSCAN

Реализация cuML HDBSCAN теперь содержит метод approximate_predict(), который позволяет прогнозировать кластеры для невидимых точек данных, и метод all_points_membership_vectors, выполняющий мягкую кластеризацию. Мягкая кластеризация обеспечивает вероятность того, что точки данных могут принадлежать одному, многим или вообще не принадлежать кластерам. Производительность этих новых функций продемонстрировала более чем 100-кратное ускорение на наборах данных среднего размера. Оставайтесь с нами для более подробной информации в следующих блогах!

Обновления библиотеки RAFT для вычислительных примитивов

Этот выпуск также включает новую современную реализацию алгоритма приближенных ближайших соседей IVF-PQ. Эта реализация выиграла недавний конкурс Big-ANN Benchmarks, и мы находимся в процессе ее интеграции в библиотеку FAISS, что также позволит интегрировать ее с популярными библиотеками, такими как Milvus.

С выпуском 22.10 команда RAFT начала развертывать более чистый, простой в использовании и более стабильный общедоступный API на основе C++ mdspan (многомерный диапазон), C++ аналог ndarray numpy в Python. Большинство плотных API-интерфейсов RAFT были преобразованы для приема mdspan.

Новые показатели расстояния для DBSCAN, UMAP и t-SNE

DBSCAN теперь поддерживает косинусное расстояние, а алгоритмы t-SNE и UMAP поддерживают значительно расширенный набор показателей расстояния, включая (но не ограничиваясь) косинус, корреляцию, Манхэттен и Хеллингера.

Привет строковым пользовательским функциям!

Строковые входные данные для пользовательских функций

Для тех случаев, когда вы не можете легко выразить желаемое преобразование DataFrame с точки зрения операций со столбцами, вам помогут пользовательские функции (UDF)! Вы уже можете использовать пользовательские функции для ряда числовых входных данных, но с cuDF 22.10 мы рады объявить об экспериментальной поддержке строковых входных данных для пользовательских функций. На данный момент вам нужно установить пакет strings_udf следующим образом:

conda install -c rapidsai strings_udf -y

Установив пакет, вы можете использовать строки во входных данных UDF. Взгляните на пример ниже в качестве отправной точки.

df = cudf.DataFrame({'word': ['apple', 'banana', 'carrot'],
                       'letter': ['a', 'n', 'e']})
df.apply(lambda x: x['word'].count(x['letter']))
0    1
1    2
2    0
dtype: int32

Таким образом, используете ли вы сложные конвейеры NLP или просто анализируете текстовые данные, вы сможете определить свои собственные пользовательские функции, которые сопоставляются со строками и возвращают числовые типы.

Обновления обработки данных с несколькими графическими процессорами

Dask-SQL теперь на графических процессорах

Dask-SQL на графических процессорах теперь общедоступен. Благодаря возможности работать как на графическом, так и на центральном процессоре без необходимости модификации, теперь вы можете разрабатывать рабочие процессы Dask-SQL локально, а затем беспрепятственно развертывать их на графических процессорах, когда вам нужно дополнительное ускорение.

На основе cuGraph теперь доступен DGL RGCN в 1,7 раза быстрее

Команда cuGraph работала над улучшенной версией модели сверточной сети реляционного графа (RGCN), выпущенной DGL. Эта версия обеспечивает ускорение сквозного обучения в 1,7 раза.

Новые алгоритмы для нескольких GPU в cuGraph

Команда cuGraph продолжает расширять набор алгоритмов, поддерживаемых архитектурами с несколькими графическими процессорами. Версия 22.10 включает реализации Jaccard, Overlap, Sorensen и Random блуждания, все для невзвешенных графов.

Общие обновления обработки данных!

Новые методы предварительной обработки для разработки признаков в cuML

Этот выпуск cuML включает три новых метода предварительной обработки — теперь вы можете использовать PowerTransformer, QuantileTransformer и KernelCenterer как часть ваших конвейеров машинного обучения с ускорением на GPU. Кроме того, препроцессор TargetEncoder() был обновлен, так что теперь вы можете выбирать между кодированием с медианой или средним значением.

Новые функции, улучшенная совместимость и документация в cuSpatial

Команда cuSpatial была очень занята — следите за новостями, чтобы не пропустить полную запись в блоге, в которой будут подробно описаны обширные обновления тайского релиза. Вот некоторые основные моменты:

Новые функции расстояния:

В этом выпуске представлен pairwis_point_linestring_distance, который принимает в качестве входных данных пару GeoSeries, любой из которых может быть мультигеометрическим рядом:

from shapely.geometry import LineString, Point, MultiPoint
points = cuspatial.GeoSeries([Point(0.0, 0.5)])
bounds = cuspatial.GeoSeries(
                    [LineString([(-1, 0), (1, 0), (0, 1)])])
cuspatial.pairwise_point_linestring_distance(points, bounds)
0 0.353553
dtype: float64

В этом выпуске также добавлена ​​функция для ускорения вычисления ближайших точек между парами точек и цепочками линий (аналог shapely.ops.nearest_points) и возвращается индексная информация о том, где находится ближайшая точка на цепочке линий.

from shapely.geometry import LineString, Point, MultiPoint, MultiLineString
points = cuspatial.GeoSeries([Point(5.0, 4.0)])
lines = cuspatial.GeoSeries([MultiLineString([
                             (1.0, 0.5), (2.0, 2.4), (3.8, 3.6)],
                                       [(6.0, 4.8), (3.7, 3.8)]])])
cuspatial.pairwise_point_linestring_nearest_points(points, lines)
  point_geometry_id linestring_geometry_id segment_id     geometry
0           0                1             0 POINT (4.86645 4.30715)

Улучшенная совместимость:

Команда cuSpatial продолжает улучшать совместимость библиотеки с другими инструментами и платформами: новая функция cuspatial.read_polygon_shapefile позволяет считывать шейп-файлы непосредственно в GPU; Пользователи могут вызывать cuspatial.from_geopandas для преобразования данных из GeoPandas и использовать GeoSeries.to_geopandas для обратного преобразования данных; и теперь вы можете инициализировать GeoDataFrame, используя нотацию словаря GeoDataFrame({'name':Series}), улучшая совместимость с GeoPandas и cuDF.

Обновления документации:

Наконец, использование и понимание cuSpatial никогда не было проще. Документация Python была существенно переработана и теперь включает Руководство пользователя Python, в котором приведены примеры использования всех функций cuSpatial. В новом Руководстве разработчика Python подробно рассказывается о дизайне библиотек, о том, как настроить среду разработки и как внести свой вклад в cuSpatial. Существует также новое Руководство разработчика C++, в котором представлены рекомендации по проектированию и разработчикам для уровня cuSpatial C++ и CUDA.

Подведение итогов

Команда RAPIDS стремится использовать мощь графического процессора для обработки данных в разных средах, сценариях использования и новых потребностях по мере их появления. В этом выпуске приоритет отдается расширению сообщества и улучшению наших существующих библиотек. Спасибо, что присоединились к нам в нашем путешествии.

Мы говорили об этом выпуске и многом другом во время наших переговоров о RAPIDS на конференции GTC в сентябре 2022 года. Если вы только начинаете работать с RAPIDS или являетесь опытным участником сообщества, вы не захотите пропустить Глубокое погружение Джона Зедлевски. в RAPIDS» для ускоренной обработки данных и инженерии данных.

Как всегда, мы с нетерпением ждем ваших отзывов о том, как вы используете новые возможности RAPIDS. Вы можете связаться с нами на GitHub, подписаться на нас в Twitter и ознакомиться с нашей документацией и ресурсами для начала работы.