2021-02-13 分类: 网站建设
笔者按,数据科学家需要算力。无论您是用 pandas 处理一个大数据集,还是用 Numpy 在一个大矩阵上运行一些计算,您都需要一台强大的机器,以便在合理的时间内完成这项工作。
在过去的几年中,数据科学家常用的 Python 库已经非常擅长利用 CPU 能力。
Pandas 的基础代码是用 C 语言编写的,它可以很好地处理大小超过 100GB 的数据集。如果您没有足够的 RAM 来容纳这样的数据集,那么您可以使用分块功能,它很方便,可以一次处理一个数据块。
GPUs vs CPUs:并行处理
有了大量的数据,CPU 就不会切断它了。
一个超过 100GB 的数据集将有许多数据点,数据点的数值在数百万甚至数十亿的范围内。有了这么多的数据点要处理,不管你的 CPU 有多快,它都没有足够的内核来进行有效的并行处理。如果你的 CPU 有 20 个内核(这将是相当昂贵的 CPU),你一次只能处理 20 个数据点!
CPU 在时钟频率更重要的任务中会更好——或者根本没有 GPU 实现。如果你尝试执行的流程有一个 GPU 实现,且该任务可以从并行处理中受益,那么 GPU 将更加有效。
使用 Scikit-Learn 在 CPU 上运行 DBSCAN 的结果GPU 上带 Rapids 的 DBSCAN
现在,让我们用 Rapids 进行加速!
首先,我们将把数据转换为 pandas.DataFrame 并使用它创建一个 cudf.DataFrame。pandas.DataFrame 无缝转换成 cudf.DataFrame,数据格式无任何更改。
- import pandas as pd
- import cudf
- X_df = pd.DataFrame({'fea%d'%i: X[:, i] for i in range(X.shape[1])})
- X_gpu = cudf.DataFrame.from_pandas(X_df)
然后我们将从 cuML 导入并初始化一个特殊版本的 DBSCAN,它是 GPU 加速的版本。DBSCAN 的 cuML 版本的函数格式与 Scikit-Learn 的函数格式完全相同:相同的参数、相同的样式、相同的函数。
- from cuml import DBSCAN as cumlDBSCAN
- db_gpu = cumlDBSCAN(eps=0.6, min_samples=2)
最后,我们可以在测量运行时间的同时运行 GPU DBSCAN 的预测函数。
- %%time
- y_db_gpu = db_gpu.fit_predict(X_gpu)
GPU 版本的运行时间为 4.22 秒,几乎加速了 2 倍。由于我们使用的是相同的算法,因此结果图也与 CPU 版本完全相同。
使用 cuML 在 GPU 上运行 DBSCAN 的结果使用 Rapids GPU 获得超高速
我们从 Rapids 获得的加速量取决于我们正在处理的数据量。一个好的经验法则是,较大的数据集将更加受益于 GPU 加速。在 CPU 和 GPU 之间传输数据有一些开销时间——对于较大的数据集,开销时间变得更「值得」。
我们可以用一个简单的例子来说明这一点。
我们将创建一个随机数的 Numpy 数组并对其应用 DBSCAN。我们将比较常规 CPU DBSCAN 和 cuML 的 GPU 版本的速度,同时增加和减少数据点的数量,以了解它如何影响我们的运行时间。
下面的代码说明如何进行测试:
- import numpy as np
- n_rows, n_cols = 10000, 100
- X = np.random.rand(n_rows, n_cols)
- print(X.shape)
- X_df = pd.DataFrame({'fea%d'%i: X[:, i] for i in range(X.shape[1])})
- X_gpu = cudf.DataFrame.from_pandas(X_df)
- db = DBSCAN(eps=3, min_samples=2)
- db_gpu = cumlDBSCAN(eps=3, min_samples=2)
- %%time
- y_db = db.fit_predict(X)
- %%time
- y_db_gpu = db_gpu.fit_predict(X_gpu)
检查下面的 Matplotlib 结果图:
当使用 GPU 而不是 CPU 时,数量会急剧增加。即使在 10000 点(最左边),我们的速度仍然是 4.54x。在更高的一端,1 千万点,我们切换到 GPU 时的速度是 88.04x!
本文名称:如何在GPU上加速数据科学
URL标题:/news46/100796.html
成都网站建设公司_创新互联,为您提供网站策划、软件开发、标签优化、网站改版、网站设计、服务器托管
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联
猜你还喜欢下面的内容