Вы наверняка сталкивались с этим. Вы написали идеальный скрипт на Python, протестировали его на небольшом CSV-файле — всё работало отлично. Но когда вы запустили его на полном наборе данных в 10 миллионов строк, вентилятор ноутбука начал гудеть, консоль зависла, и у вас было достаточно времени, чтобы сварить три кофейника, прежде чем вы увидели результат.

А что, если можно было бы ускорить те же самые рабочие процессы с помощью простого переключателя параметра?

Оказывается, это возможно. Многие популярные библиотеки для Data Science на Python — включая pandas, Polars, scikit-learn и XGBoost — теперь могут работать значительно быстрее на GPU практически без изменений в коде. Используя такие библиотеки, как NVIDIA cuDF, cuML и cuGraph, вы можете оставить свой код как есть и масштабировать его под гораздо более крупные задачи.

В этой статье показано, как ускорить 7 популярных библиотек Python с помощью готовых замен — с примерами кода, которые вы можете попробовать сами.


Ускорьте pandas и Polars на больших данных

№1: %load_ext cudf.pandas: Используйте pandas с ускорением на GPU

pandas — краеугольный камень Data Science на Python, но он быстро замедляется при работе с большими объёмами данных. С помощью cudf.pandas вы можете оставить ваш код без изменений и получить ускорение на GPU.

Как это работает: просто подключите расширение в начале скрипта или ноутбука. cuDF будет автоматически запускать команды pandas на GPU, когда это возможно.

# Просто добавьте это в начало вашего скрипта!

%load_ext cudf.pandas

import pandas as pd
df = pd.read_csv("your_large_dataset.csv")

# ...все ваши операции pandas теперь ускорены

Видео 1: Сравнение производительности pandas с включённым и выключенным cuDF на 18 млн строк данных о биржевых акциях.

https://www.youtube.com/watch?v=eThOYTJrbtA

Испытать:

https://colab.research.google.com/github/rapidsai-community/showcase/blob/main/getting_started_tutorials/cudf_pandas_colab_demo.ipynb

https://github.com/rapidsai-community/showcase/blob/main/getting_started_tutorials/cudf_pandas_demo.ipynb


№2: .collect(engine="gpu"): Ускорьте Polars ещё сильнее

Polars уже известен своей скоростью. Теперь вы можете объединить его оптимизацию запросов с мощностью GPU с помощью cuDF.

Как это работает: У Polars есть встроенный движок выполнения, который можно направить на GPU, просто указав engine="gpu".

pip install polars[gpu]
import polars as pl

(transactions
 .group_by("CUST_ID")
 .agg(pl.col("AMOUNT").sum())
 .sort(by="AMOUNT", descending=True)
 .head()
 .collect(engine="gpu"))

Видео 2: Демонстрация обработки 100 млн строк данных с использованием GPU-движка Polars.

https://www.youtube.com/watch?v=AoKeit2Fbmw

Испытать:

https://colab.research.google.com/github/rapidsai-community/showcase/blob/main/accelerated_data_processing_examples/polars_gpu_engine_demo.ipynb

https://github.com/rapidsai-community/showcase


Ускорьте обучение моделей в scikit-learn и XGBoost

Когда данные подготовлены, пора обучать модели — и здесь Python часто тормозит. К счастью, scikit-learn и XGBoost позволяют легко включить GPU и резко сократить время обучения.

№3: %load_ext cuml.accel: Ускорьте модели scikit-learn на GPU

scikit-learn популярен для задач классификации, регрессии и кластеризации. Но при росте данных и подборе гиперпараметров обучение становится долгим. С cuML вы можете ускорить модели, не меняя код.

%load_ext cuml.accel

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier

X, y = make_classification(n_samples=500000, n_features=100)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

rf = RandomForestClassifier(n_estimators=100, n_jobs=-1)
rf.fit(X_train, y_train)

Видео 3: Обучение RandomForestClassifier с использованием cuML занимает секунды вместо минут.

https://www.youtube.com/watch?v=cIJsVq8CPys

? Некоторые модели scikit-learn пока не полностью поддерживаются. См. документацию.

https://colab.research.google.com/github/rapidsai-community/showcase/blob/main/getting_started_tutorials/cuml_sklearn_colab_demo.ipynb

https://github.com/rapidsai-community/showcase/blob/main/getting_started_tutorials/cuml_sklearn_colab_demo.ipynb


№4: device = "cuda": Включите ускорение CUDA в XGBoost

XGBoost — одна из лучших библиотек для ML. Ускорение на GPU уже встроено — нужно просто его включить.

xgb_model = xgb.XGBRegressor(device="cuda") 

xgb_model.fit(X, y)

Видео 4: Демонстрация ускорения XGBoost на реальных данных о стоимости поездок на такси.

https://www.youtube.com/watch?v=lhraJRaDkOA&t=617s

Испытать:

https://colab.research.google.com/gist/will-hill/2edd85e351e62e52fccd43da9b027434/xgboost_rapids_taxi.ipynb


Ускорьте визуализацию и кластеризацию

Перед обучением модели часто нужно изучить данные или найти кластеры. UMAP и HDBSCAN хорошо подходят, но медленно работают на CPU. С cuML всё быстрее.


№5: %load_ext cuml.accel: Визуализация с UMAP за секунды

%%load_ext cuml.accel

import umap
umap_model = umap.UMAP(n_neighbors=15, n_components=2, min_dist=0.0)
X_train_umap = umap_model.fit_transform(X_train_scaled)

Видео 5: Сравнение скорости проекции UMAP на CPU и GPU. На GPU — менее 1 секунды.

https://www.youtube.com/watch?v=cIJsVq8CPys

Испытать:

https://colab.research.google.com/github/rapidsai-community/showcase/blob/main/getting_started_tutorials/cuml_sklearn_colab_demo.ipynb

https://github.com/rapidsai-community/showcase/blob/main/getting_started_tutorials/cuml_sklearn_colab_demo.ipynb


№6: %load_ext cuml.accel: Быстрая кластеризация с HDBSCAN

%%load_ext cuml.accel

import hdbscan
clusterer = hdbscan.HDBSCAN()
clusterer.fit(X)

 Видео 6: Снижение времени кластеризации с 45 до 2 секунд — без изменений в коде.

https://www.youtube.com/watch?v=cIJsVq8CPys&t=35s

Испытать:

https://colab.research.google.com/github/rapidsai-community/showcase/blob/main/getting_started_tutorials/cuml_sklearn_colab_demo.ipynb

https://github.com/rapidsai-community/showcase/blob/main/getting_started_tutorials/cuml_sklearn_colab_demo.ipynb


Масштабирование анализа графов с NetworkX

NetworkX отлично подходит для работы с графами, но его реализация на Python тормозит на больших графах.


№7: %env NX_CUGRAPH_AUTOCONFIG=True: Масштабируйте графы без изменений кода

Теперь есть nx-cugraph — GPU-бэкэнд для NetworkX.

Как это работает: Установите nx-cugraph, включите переменную окружения, и ваш обычный код NetworkX автоматически ускорится.

pip install nx-cugraph-cu11 --extra-index-url https://pypi.nvidia.com
%env NX_CUGRAPH_AUTOCONFIG=True

import pandas as pd
import networkx as nx

df = pd.read_csv("your_edgelist.csv", names=["src", "dst"])
G = nx.from_pandas_edgelist(df, source="src", target="dst")

centrality_scores = nx.betweenness_centrality(G, k=10)

Видео 7: Сравнение NetworkX на CPU и GPU. Те же функции, в разы быстрее.

https://www.youtube.com/watch?v=3EsbU1gcH5c

Испытать:

https://colab.research.google.com/github/rapidsai-community/showcase/blob/main/getting_started_tutorials/accelerated_networkx_demo.ipynb

https://github.com/rapidsai-community/showcase/blob/main/getting_started_tutorials/accelerated_networkx_demo.ipynb


Вывод: Тот же код. Больше скорости.

Не нужно быть экспертом по CUDA, чтобы использовать мощность GPU. Благодаря таким библиотекам, как cuDF, cuML и cuGraph, вы можете ускорить свой привычный код и быстрее получать результаты.


Готовы начать? Все примеры и ноутбуки доступны на [GitHub (ссылка в оригинале)].

https://github.com/rapidsai-community/showcase

Комментарии (0)