当前位置: 首页 > 后端技术 > Python

在GPU上运行Pandas和sklearn

时间:2023-03-25 21:04:18 Python

当涉及到大量数据时,Pandas可以高效地处理数据。但它使用CPU进行计算操作。该过程可以通过并行处理来加速,但对于大量数据来说仍然效率不高。过去,GPU主要用于渲染视频和玩游戏。但现在随着技术的进步,大多数大型项目都依赖GPU支持,因为它有可能提升深度学习算法。Nvidia的开源库Rapids允许我们完全在GPU上执行数据科学计算。在本文中,我们将Rapids优化的DF在GPU上的性能与普通Pandas进行了比较。我们将在GoogleColab中对其进行测试。因为我们需要的磁盘空间非常小,但需要一个大内存GPU(15GB),而Colab可以提供我们所需要的。我们将从安装开始,请按照步骤完成整个过程。开启GPU,在菜单栏Colab的“Runtime”选项中选择“Changeruntimetype”。然后选择GPU作为硬件加速器。NV的显卡是唯一支持CUDA的显卡。Rapids在GoogleColab中仅支持基于P4、P100、T4或V100的GPU。分配好GPU后,我们执行如下命令确认:!nvidia-smi可以看到分配了一块T4,内存15G。如果分配给其他GPU(如p4),可以在“Runtime”菜单中重新申请,选择“FactoryResetRuntimes”。安装急流!gitclonehttps://github.com/rapidsai/rapidsai-csp-utils.git!pythonrapidsai-csp-utils/colab/env-check.py运行以下命令,现有的colab文件将被更新并重新启动启动核心。运行该命令后,当前会话将自动重启。!bashrapidsai-csp-utils/colab/update_gcc.shimportosos._exit(00)InstallCondaColabimportcondacolabcondacolab.install()这个命令会再次重启内核。重启后运行如下命令判断是否安装成功:importcondacolabcondacolab.check()下面是在colab实例上安装Rapids!pythonrapidsai-csp-utils/colab/install_rapids.pystable完成后就可以测试GPU性能了!简单对比测试创建一个大DF来测试gpu的全部潜力。我们将创建大小为10000000行x2列(10Mx2)的cuDF(cuda数据帧),首先导入所需的库:.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上的数据帧。Pandas的几乎所有功能都可以在其上运行,因为它是作为Pandas的镜像构建的。与Pandas函数操作相同,但所有操作都在GPU内存中执行。让我们看看创建时间对比:现在让我们看看GPU是否通过对这些数据帧执行一些操作来提高性能!对数运算为了获得最佳平均值,我们将np应用于df.log函数中的其中一列,然后运行??10个循环:GPU结果为32.8毫秒,而CPU(常规熊猫)为2.55秒!基于GPU的处理要快得多。通过将“col_1”(包含从0到10M的整数值)转换为字符串值(对象)来进一步测试从“Int”到“String”的数据类型转换。如您所见,速度差距更大。线性回归模型测试模型的训练可能需要很长时间。模型在GPU内存中的训练可能会因类型而异。我们将使用基于GPU的cuML测试简单建模,并将其性能与Sklearn进行比较。从cuml导入cudf导入make_regression,从cuml.linear_model导入LinearRegression作为cuLinearRegression从cuml.metrics.regression导入r2_score从sklearn.linear_model导入LinearRegression作为skLinearRegression创建虚拟数据并拆分它(训练和测试=)n_samples**20n_features=399random_state=23X,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()MLandCudf_test.to_pandas(train_test_split是同sklearn同名函数,使用.to_pandas()函数将gpu数据转为普通pandasdftrainingaskearn-basedmodel:trainingaGPU-basedmodel和trainingaGPU-basedmodel没有太大区别训练基于CPU的模型。这里训练sklearn模型需要16.2秒,但是训练基于gpu的cuML模型只需要342毫秒!综上所述,Pandas和sklearn是最常用的两个基础库。Rapids将Pandas和sklearn的功能完全翻译到GPU上。这对我们很有帮助。如果对这两个库感兴趣,可以参考他的官方文档试用一下:https://avoid.overfit.cn/post/7ee1826e416a40b7965bca9ab4ee28f1作者:Onepagecode