Вы наверняка сталкивались с этим. Вы написали идеальный скрипт на 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
Испытать:
№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://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 пока не полностью поддерживаются. См. документацию.
№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
Испытать:
Ускорьте визуализацию и кластеризацию
Перед обучением модели часто нужно изучить данные или найти кластеры. 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
Испытать:
№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
Испытать:
Масштабирование анализа графов с 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
Испытать:
Вывод: Тот же код. Больше скорости.
Не нужно быть экспертом по CUDA, чтобы использовать мощность GPU. Благодаря таким библиотекам, как cuDF, cuML и cuGraph, вы можете ускорить свой привычный код и быстрее получать результаты.
Готовы начать? Все примеры и ноутбуки доступны на [GitHub (ссылка в оригинале)].