Python速度狂飙:GPU加速7大库,数据处理提速10倍!

2025-08-02AI工具

Image

你是否也曾遇到过这样的情况:精心编写的 Python 脚本,在小规模 CSV 数据集上运行流畅,但当数据量增至千万级别时,电脑风扇狂转,控制台卡顿,结果迟迟不出,让人只能无奈地煮上几壶咖啡来打发时间?

如果只需简单地调整一个标志或参数,就能让这些工作流程获得显著的加速,岂不是很棒? 实际上,这是完全可以实现的。包括 pandas、Polars、scikit-learn 和 XGBoost 在内的许多流行的 Python 数据科学库,现在都可以在 GPU 上更快地运行,而且几乎不需要修改代码。

通过使用诸如 NVIDIA 公司的 cuDF、cuML 和 cuGraph 等库,用户可以保留现有的代码,并轻松地扩展它以处理更大的工作负载。本文将介绍如何加速七个常用 Python 库的替代方案,并提供入门代码供大家亲自尝试。

加速 pandas 和 Polars 处理大型数据集

数据准备是任何数据科学或机器学习项目的基础。它通常是工作流程中最耗时的部分,但情况并非必须如此。

1: 使用 %%load_ext cudf.pandas:利用 GPU 加速,像往常一样使用 pandas

pandas 是 Python 数据科学的基石,但在处理大型数据集时速度会明显下降。借助 cudf.pandas,用户可以保持代码完全不变,同时获得 GPU 加速。

工作原理:只需在脚本或 Notebook 的顶部加载 cudf.pandas 扩展。cuDF 将尽可能在 GPU 上智能地运行 pandas 命令,从而显著加速工作流程。

# 只需将其添加到脚本的顶部!
%load_ext cudf.pandas

# 你现有的 pandas 代码现在在 GPU 上运行
import pandas as pd
df = pd.read_csv("your_large_dataset.csv")
# ... 你所有的其他 pandas 操作现在都得到了加速

以下展示了启用 cudf.pandas 后,股票分析工作流程的运行速度有多快:

2: 使用 .collect(engine="gpu"):让 Polars 更快

Polars 以其速度而闻名。现在,用户可以将其强大的查询优化与 cuDF 的原始处理能力相结合,以获得更高的性能。

工作原理:Polars 有一个内置的执行引擎,可以指向 GPU。通过启用 cuDF 驱动的引擎,用户可以告诉 Polars 利用 GPU 进行操作。

# 使用 "GPU" 功能标志安装 polars
pip install polars[gpu]

import polars as pl

# 在集合时调用 GPU 引擎
(transactions
 .group_by("CUST_ID")
 .agg(pl.col("AMOUNT").sum())
 .sort(by="AMOUNT", descending=True)
 .head()
 .collect(engine="gpu"))

以下是在启用和未启用 GPU 加速的情况下运行相同 Polars 查询的结果对比。

更快地训练 scikit-learn 和 XGBoost

完成数据准备后,就该训练模型了,而这通常是 Python 工作流程遇到的另一个瓶颈。像 scikit-learn 和 XGBoost 这样的库功能强大,但在处理大型数据集时速度会变慢。幸运的是,两者都提供了简单的方法来解锁 GPU 加速并显著减少训练时间。

3: 使用 %%load_ext cuml.accel:通过 GPU 支持更快地训练 scikit-learn 模型

许多数据科学家依靠 scikit-learn 来完成日常的机器学习任务,如分类、回归和聚类。但随着数据量的增长,以及超参数调优和可视化周期的加入,训练时间会越来越长。

借助 cuML,用户可以在 GPU 上加速流行的 scikit-learn 模型,从而节省时间并在更大的数据集上进行训练,而无需更改代码。

工作原理:只需加载加速器,然后像往常一样编写 scikit-learn 代码。在底层,cuML 会处理 GPU 执行。无需语法更改,也无需新的 API。

%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, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

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

观察 RandomForestClassifier 训练时间如何从几分钟降至几秒钟:

注意:虽然 cuml.accel 可以开箱即用地用于许多常见的 scikit-learn 模型,但它仍在扩展覆盖范围。某些工作流程可能会部分回退到 CPU。有关详细信息,请参阅支持的估计器。

4: 使用 device = "cuda":通过一个参数在 XGBoost 中启用 CUDA 加速

XGBoost 是一个世界级的、屡获竞赛奖项的库,它内置了 GPU 加速功能。用户只需将其打开即可。

工作原理:无需使用不同的库。只需在模型初始化期间将设备参数设置为 "cuda",即可利用 GPU。

# 只需将设备设置为 "cuda"
xgb_model = xgb.XGBRegressor(device="cuda")
xgb_model.fit(X,y)

此演示展示了启用 GPU 加速如何加速模型训练,并在特征工程和超参数调优期间解锁更快的迭代,从而更容易在更短的时间内测试、改进和完善模型。

加速探索性 ML 和聚类工作流程

在训练模型之前,通常需要探索高维模式或识别数据中的聚类。UMAP 和 HDBSCAN 等工具非常适合这项工作,但在处理大型数据集时速度会非常慢。借助 cuML,用户可以更快地运行这些工作流程。

5: 使用 %%load_ext cuml.accel:让 UMAP 可视化在几秒钟内运行,而不是几分钟

UMAP 是一种强大的降维技术,但在处理大型数据集时速度会非常慢。cuML 的实现允许用户在很短的时间内创建令人惊叹的可视化效果。

工作原理:与 scikit-learn 一样,用户只需更改导入以使用 cuml.accel,然后让 GPU 完成繁重的工作。

%%load_ext cuml.accel
import umap
umap_model = umap.UMAP(n_neighbors=15, n_components=2, random_state=42, min_dist=0.0)

# 将 UMAP 模型拟合到数据
X_train_umap = umap_model.fit_transform(X_train_scaled)

这是一个并排演示,展示了 cuML 如何在真实世界的数据集上加速 UMAP。

6: 使用 %%load_ext cuml.accel:在数百万行上更快地进行 HDBSCAN 聚类

使用 HDBSCAN 进行基于密度的聚类在 CPU 上可能会非常慢,尤其是在处理高维数据时。借助 cuML 的加速器模式,用户可以在几秒钟内而不是几分钟内发现复杂的结构。

工作原理:加载 cuml.accel 扩展,用户现有的 HDBSCAN 代码会自动在 GPU 上运行,无需重构。

%%load_ext cuml.accel
import hdbscan
clusterer = hdbscan.HDBSCAN()
time clusterer.fit(X)

使用 HDBSCAN 聚类大型数据集可能非常耗时,即使在玩具示例上,CPU 运行也可能需要 30 到 60 秒。借助 cuML 的加速器模式,用户可以使用相同的 Python 代码在一秒钟内拟合像 HDBSCAN 这样的聚类模型。

使用 NetworkX 扩展图分析

图在分析数据关系方面非常强大,NetworkX 是最广泛使用的用于处理图的库之一。它提供了数百个函数来帮助用户轻松构建和分析各种图结构。但它的纯 Python 实现可能会成为大型数据集的瓶颈,从而难以在 CPU 上扩展到真实世界的图分析。

7: 使用 %env NX_CUGRAPH_AUTOCONFIG=True:立即扩展用户的 NetworkX 图

为了克服这些扩展限制,NetworkX 生态系统现在包括一个由 cuGraph 驱动的 GPU 加速后端,称为 nx-cugraph。借助 nx-cugraph,用户可以保留完全相同的 NetworkX 代码并解锁 GPU 加速,而无需更改代码。

工作原理:只需安装 nx-cugraph 并在运行通常的 NetworkX 代码之前设置环境变量 NX_CUGRAPH_AUTCONFIG=True。NetworkX 会自动检测 nx-cugraph 支持的算法,并将它们路由到 GPU 上的 cuGraph,无需重写或转换。

# 安装 GPU 加速的 NetworkX 后端
pip install nx-cugraph-cu11 --extra-index-url https://pypi.nvidia.com

# 启用 NetworkX 的 GPU 加速
%env NX_CUGRAPH_AUTOCONFIG=True

# 你现有的 NetworkX 代码保持不变
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)

这是一个 CPU 与 GPU 上 NetworkX 的并排比较:

总结:相同的代码,更快的速度

用户无需成为 CUDA 专家即可利用 GPU 的大规模并行处理能力。对于大量数据科学和机器学习工作流程,工具已经存在。通过使用像 cuDF、cuML 和 cuGraph 这样的库,用户可以加速他们喜欢的工具并更快地获得结果。新媒网跨境了解到,英伟达等科技公司正在努力降低数据科学的门槛,让更多开发者可以充分利用GPU加速的优势。

新媒网跨境认为,随着数据量的持续增长,利用GPU加速数据科学工作流程将成为一种趋势。

新媒网(公号: 新媒网跨境发布),是一个专业的跨境电商、游戏、支付、贸易和广告社区平台,为百万跨境人传递最新的海外淘金精准资讯情报。

本文来源:新媒网 https://nmedialink.com/posts/9351.html

评论(0)

暂无评论,快来抢沙发~
利用GPU加速Python数据科学工作流程,无需大量代码修改。通过cuDF、cuML等库,Pandas、Polars、scikit-learn和XGBoost等常用库可在GPU上更快运行,加速数据处理、模型训练和图分析。英伟达等公司致力于降低数据科学门槛,让更多开发者利用GPU优势。
发布于 2025-08-02
查看人数 682
关注我们
新媒网跨境发布
本站原创内容版权归作者及NMedia共同所有,未经许可,禁止以任何形式转载。