当波及大量数据时,Pandas 能够无效地解决数据。然而它应用CPU 进行计算操作。该过程能够通过并行处理放慢,但解决大量数据依然效率不高。

在以前过来,GPU 次要用于渲染视频和玩游戏。然而当初随着技术的提高大多数大型项目都依赖 GPU 反对,因为它具备晋升深度学习算法的后劲。

Nvidia的开源库Rapids,能够让咱们齐全在 GPU 上执行数据科学计算。在本文中咱们将 Rapids优化的 GPU 之上的DF、与一般Pandas 的性能进行比拟。

咱们将在 Google Colab 中对其进行测试。因为咱们只须要很少的磁盘空间然而须要大内存 GPU (15GB),而Colab 正好能够提供咱们的需要。咱们将从在装置开始,请依据步骤实现整个过程。

开启GPU

在菜单栏Colab 的“Runtime”选项中抉择“Change runtime type”。而后抉择GPU作为硬件加速器。

NV的显卡是惟一反对CUDA的显卡,Rapids只反对谷歌Colab中基于P4、P100、T4或V100的gpu,在调配到GPU后咱们执行以下命令确认:

 !nvidia-smi

能够看到,调配到了一块T4,有15G的内存。如果调配到了其余GPU(如p4),能够在“Runtime”菜单并抉择“Factory Reset Runtimes”,来从新申请。

装置 Rapids

 !git clone https://github.com/rapidsai/rapidsai-csp-utils.git !python rapidsai-csp-utils/colab/env-check.py

运行以下命令,会更新现有的colab文件并重新启动内核。运行此命令后,以后会话将主动重新启动。

 ! bash rapidsai-csp-utils/colab/update_gcc.sh import os os._exit(00)

装置CondaColab

 import condacolab condacolab.install()

这条命令会让内核再次重启。重新启动后运行上面命令,确定装置是否胜利:

 import condacolab condacolab.check()

上面就是在colab实例上装置Rapids了

 !python rapidsai-csp-utils/colab/install_rapids.py stable

实现后,就能够测试GPU的性能了!

简略比照测试

创立一个大的DF能够让测试gpu的全副后劲。咱们将创立cuDF(cuda dataframe),其大小为10000000行x 2列(10M x 2),首先导入须要的库:

 import cudf  import pandas as pd import numpy as np

创立DF

 gpuDF = cudf.DataFrame({'col_1': np.random.randint(0, 10000000, size=10000000),                           'col_2': np.random.randint(0, 10000000, size=10000000)}) pandasDF = pd.DataFrame({'col_1': np.random.randint(0, 10000000, size=10000000),                           'col_2': np.random.randint(0, 10000000, size=10000000)})

cuDF是在GPU之上的DataFrame。Pandas的简直所有函数都能够在其上运行,因为它是作为Pandas的镜像进行构建的。与Pandas的函数操作一样,然而所有的操作都在GPU内存中执行。

咱们看看创立时的工夫比照:

当初让咱们看看GPU是否通过对这些数据帧执行一些操作来进步性能!

对数运算

为了失去最好的平均值,咱们将对两个df中的一列利用np.log函数,而后运行10个循环:

GPU的后果是32.8毫秒,而CPU(惯例的pandas)则是2.55秒!基于gpu的解决快的多的多。

从" Int "到" String "的数据类型转换

通过将的“col_1”(蕴含从0到10M的整数值)转换为字符串值(对象)来进一步测试。

能够看到,速度差距更大了

线性回归模型测试

一个模特的训练可能要花很长时间。模型在GPU内存中的训练可能因其类型而异。咱们将应用基于gpu的cuML来测试简略的建模,并将其性能与Sklearn进行比拟。

 import cudf from cuml import make_regression, train_test_split from cuml.linear_model import LinearRegression as cuLinearRegression from cuml.metrics.regression import r2_score from sklearn.linear_model import LinearRegression as skLinearRegression

创立虚构数据并将其拆分(训练和测试)

 n_samples = 2**20  n_features = 399 random_state = 23 X, y = make_regression(n_samples=n_samples, n_features=n_features, random_state=random_state) X = cudf.DataFrame(X) y = cudf.DataFrame(y)[0] X_cudf, X_cudf_test, y_cudf, y_cudf_test = train_test_split(X, y, test_size = 0.2, random_state=random_state) X_train = X_cudf.to_pandas() X_test = X_cudf_test.to_pandas() y_train = y_cudf.to_pandas() y_test = y_cudf_test.to_pandas()

CuML库的make_regression函数和train_test_split都与与sklearn的同名函数函数雷同应用.to_pandas()函数能够将gpu的数据转换为一般的pandas df。

训练一个基于skearn的模型:

训练一个基于gpu的模型和训练一个基于cpu的模型没有太大的区别。

这里训练sklearn模型须要16.2秒,然而训练基于gpu的cuML模型只须要342毫秒!

总结

Pandas和sklearn这两个是咱们最罕用的根本库,Rapids将Pandas和sklearn的性能残缺的平移到了GPU之上,这对咱们来说是十分有帮忙的,如果你对这两个库感兴趣能够参考他官网的文档试一试吧:

https://avoid.overfit.cn/post/7ee1826e416a40b7965bca9ab4ee28f1

作者:Onepagecode