
Привет, Хабр!
RAPIDS — это open source библиотека экосистема, состоящая из нескольких библиотек, разработанная NVIDIA, которая предоставляет набор инструментов для выполнения всего цикла обработки данных и аналитики на GPU. RAPIDS была создана с целью того, чтобы ускорить анализ данных и работу в ML, используя всю мощь GPU, и делает это, предоставляя в целом привычный интерфейс, похожий на тот, к которому привыкли в Pandas, Scikit-learn и т.д.
RAPIDS основан на CUDA, архитектуре параллельных вычислений от NVIDIA. Операции, которые когда-то занимали минуты или часы на CPU, теперь могут быть выполнены за секунды на GPU, благодаря параллелизму и высокой пропускной способности памяти GPU.
Основные компоненты RAPIDS
cuDF — это библиотека, часть экосистемы RAPIDS, предоставляющая интерфейс DataFrame, подобный Pandas, но для выполнения операций на GPU. Она позволяет выполнять множество операций предварительной обработки данных, включая фильтрацию, сортировку, группировку и агрегацию, ускоряя все эти процессы благодаря параллелизму
Основные возможности:
-
Чтение и запись данных в различных форматах (CSV, JSON, Parquet и другие).
-
Выполнение операций преобразования данных, таких как сортировка, группировка, агрегация.
-
Объединение и соединение различных наборов данных.
-
Поддержка пользовательских функций для выполнения произвольных операций на GPU.
cuML — это уже библиотека ML, предназначенная для выполнения классических алгоритмов и моделей машинного обучения на GPU с API, аналогичным Scikit-learn.
Основные возможности:
-
Поддержка большого числа алгоритмов машинного обучения, включая классификацию, регрессию, кластеризацию и уменьшение размерности.
-
Ускорение тренировки моделей и предсказаний.
-
Простая интеграция с другими компонентами RAPIDS.
Существует также cuGraph для анализа графов. С ней можно проводить поиск кратчайшего пути, вычисление центральности вершин и выявление сообществ, на GPU.
cuSpatial для геопространственной и темпоральной аналитики.
cuSignal для обработки сигналов на GPU.
Установим:
Но для начала — системные требования:
-
GPU NVIDIA: RAPIDS разработан для работы с GPU NVIDIA, поэтому наличие совместимой видеокарты обязательно. Поддерживаемые модели включают серии NVIDIA Pascal™, Volta™, Turing™ и Ampere™.
-
Операционная система: RAPIDS поддерживает Ubuntu 16.04/18.04/20.04, CentOS 7/8 и RHEL 7/8. Для пользователей Windows и MacOS есть возможность использовать Docker или WSL 2 для запуска RAPIDS.
-
CUDA Toolkit: для работы RAPIDS необходим CUDA Toolkit версии 10.1 или выше. Версия CUDA должна соответствовать возможностям видеокарты.
Наиболее простой и рекомендуемый нами способ установки RAPIDS — использование менеджера пакетов Conda:
# для создания нового conda-окружения с именем rapids и установки RAPIDS conda create -n rapids-0.19 -c rapidsai -c nvidia -c conda-forge \ rapids=0.19 python=3.7 cudatoolkit=11.0
rapids-0.19 — это имя окружения, rapids=0.19 указывает на версию RAPIDS, а cudatoolkit=11.0 — на версию CUDA Toolkit.
Для юзеров Docker, NVIDIA и RAPIDS имеет образы Docker, предварительно настроенные для работы с RAPIDS:
# загрузка и запуск контейнера RAPIDS docker pull rapidsai/rapidsai:0.19-cuda11.0-runtime-ubuntu18.04-py3.7 docker run --gpus all -it -p 8888:8888 rapidsai/rapidsai:0.19-cuda11.0-runtime-ubuntu18.04-py3.7
Команды загружают образ Docker с установленным RAPIDS и запускают его, предоставляя доступ к Jupyter Notebook на порту 8888.
На Windows можно использовать WSL 2, установив подсистему Linux и следуя инструкциям установки для Ubuntu.
Для MacOS, к сожалению, прямая установка RAPIDS невозможна из-за отсутствия поддержки GPU NVIDIA, но можно использовать облачные решения или Docker для работы с RAPIDS в вирт. среде.
Библиотека cuDF
Так же, как и в Pandas, в cuDF можно создавать DataFrame из различных источников данных, включая словари, массивы и файлы разных форматов:
import cudf import numpy as np # DataFrame из словаря data = {'a': range(10), 'b': np.random.rand(10)} df = cudf.DataFrame(data) # DataFrame из массива arr = np.random.rand(10, 2) df_from_array = cudf.DataFrame(arr, columns=['x', 'y'])
cuDF поддерживает чтение и запись файлов в различных форматах, таких как CSV, Parquet, JSON:
# чтение из CSV df = cudf.read_csv('data.csv') # запись в Parquet df.to_parquet('data.parquet')
Существуют реализации предварительной обработки и анализа данных, включая фильтрацию, сортировку, группировку и агрегацию:
# фильтрация filtered_df = df[df['a'] > 5] # сортировка sorted_df = df.sort_values(by='b') # группировка и агрегация grouped_df = df.groupby('a').agg({'b': 'mean'})
Можно объединять и соединять различные наборы данных:
# слияние двух DataFrame merged_df = cudf.merge(df1, df2, on='key') # соединение (join) joined_df = df1.join(df2, lsuffix='_left', rsuffix='_right')
В сравнении с Pandas большинство операций в зависимости от GPU выполняется в 4-10 раз быстрей.
Библиотека cuML
Пример линейной регрессии в cuML аналогичен тому, как это делается в Scikit-learn:
from cuml.linear_model import LinearRegression import cudf import numpy as np X = np.random.rand(10000, 10) y = np.dot(X, np.random.rand(10)) # преобразование данных в формат, поддерживаемый cuML X_gpu = cudf.DataFrame(X) y_gpu = cudf.Series(y) model = LinearRegression(fit_intercept=True, normalize=True, algorithm='eig') model.fit(X_gpu, y_gpu) predictions = model.predict(X_gpu)
Алгоритм KMeans для кластеризации данных:
from cuml.cluster import KMeans import cudf import numpy as np X = np.random.rand(10000, 2) X_gpu = cudf.DataFrame(X) # создание и тренировка модели KMeans kmeans = KMeans(n_clusters=5) kmeans.fit(X_gpu) # получение меток кластеров labels = kmeans.predict(X_gpu)
PCA для снижения размерности данных:
from cuml.decomposition import PCA import cudf import numpy as np X = np.random.rand(10000, 20) X_gpu = cudf.DataFrame(X) pca = PCA(n_components=3) X_transformed = pca.fit_transform(X_gpu)
Случайный лес:
from cuml.ensemble import RandomForestClassifier import cudf import numpy as np X = np.random.rand(10000, 10) y = np.random.randint(0, 2, 10000) X_gpu = cudf.DataFrame(X) y_gpu = cudf.Series(y) rf = RandomForestClassifier(n_estimators=50, max_depth=16) rf.fit(X_gpu, y_gpu) predictions = rf.predict(X_gpu)
Как вы заметили, для работы с cuML необходимо преобразовать данные в форматы, поддерживаемые RAPIDS, такие как cuDF DataFrame или Series.
Параметры моделей в cuML могут отличаться от их аналогов в Scikit-learn.
Библиотека cuGraph
cuGraph позволяет создавать как направленные, так и ненаправленные графы из различных источников данных, включая edge lists и adjacency matrices.
В либе существуют реализации многих стандартных алгоритмов для анализа графов, включая поиск кратчайших путей, вычисление центральности вершин, определение сообществ и многое другое.
Создание графа из списка ребер:
import cudf import cugraph # создание DataFrame в cuDF для списка ребер df = cudf.DataFrame() df['src'] = [0, 1, 2, 0] df['dst'] = [1, 2, 3, 3] # создание объекта графа в cuGraph G = cugraph.Graph() G.from_cudf_edgelist(df, source='src', destination='dst')
Вычисление PageRank:
# вычисление PageRank pagerank_values = cugraph.pagerank(G)
Поиск кратчайших путей:
# вычисление кратчайших путей от вершины 0 shortest_paths = cugraph.sssp(G, source=0)
Обнаружение сообществ с использованием алгоритма Louvain:
# обнаружение сообществ partitions, modularity_score = cugraph.louvain(G)
Про другие практические инструменты из области ML, Data Science, аналитики и не только эксперты OTUS рассказывают в рамках практических онлайн-курсов. По ссылке вы можете ознакомиться с полным каталогом курсов.
ссылка на оригинал статьи https://habr.com/ru/articles/802721/
Добавить комментарий