如何在GPU上运行pandas和sklearn?

news2024/11/19 22:34:00

当涉及大量数据时,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://github.com/rapidsai/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++初阶7-string实现】xxx坐享其成,xxx苦不堪言

前言 本期分享Cstring类的模拟实现(参考SGI 30实现),不套类模版,降低学习成本, 进一步加深理解。 属性介绍 名称具体成员动态字符数组char* _s存储有效数据的容量size_t capacity有效数据的个数size_t sizenposstat…

【OpenCV 例程 300篇】251. 特征匹配之暴力匹配

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】251. 特征匹配之暴力匹配 特征匹配是特征检测和特征描述的基本应用,在在图像拼接、目标识别、三维重建等领域的应用非常广泛。 基于特征描述符的特征点匹配是通过对两幅图像的特征点集合…

基于统一空间方法的动态切换拥挤(DSC)DSC-MOAGDE算法附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

Python编程零基础如何逆袭成为爬虫实战高手之《WIFI破解》(甩万能钥匙十条街)爆赞爆赞~

导语 Hello,大家好呀!我是木木子吖~ 一个集美貌幽默风趣善良可爱并努力码代码的程序媛一枚。 听说关注我的人会一夜暴富发大财哦~ (哇哇哇 这真的爱😍😍) 所有文章完整的素材源码都在&#…

dreamweaver网页大作业 我的家乡——南京玄武湖旅游攻略(4页) 学生网页设计作业源码

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

Java项目写好了,如何部署上线?看这篇文章吧

嗨,各位小伙伴大家好,你有没有想壹哥呀?前几天有小伙伴给壹哥留言,说自己的项目写好了,想把项目部署到服务器上,这个该怎么实现呢?那么针对这个问题,今天壹哥就带大家走一遍完整的项…

【云计算与大数据计算】大数据物理、集成、安全架构及阿里云飞天系统架构讲解(超详细)

一、物理架构 物理架构 - 企业大数据系统的各层次系统最终要部署到主机节点中,这些节点通过网络连接成 为一个整体,为企业的大数据应用提供物理支撑 ,企业大数据系统由多个逻辑层组成,多个逻辑层可以映射到一个物理节点上,也可以映射到多个物…

nacos--基础--1.1--理论--介绍

nacos–基础–1.1–理论–介绍 1、介绍 是阿里的一个开源产品致力于帮助您发现、配置和管理微服务 1.1、参考资料 https://nacos.io/zh-cn/docs/what-is-nacos.html1.2、功能 服务发现中心:动态服务发现服务注册中心:管理注册服务服务配置中心&#…

行为管理(锐捷智慧教室)

大家好,我是小杜,被师傅“强制”休息两天,感觉整个人都升华了,精神满满的,看来还是需要劳逸结合,一味的高强度精神亢奋的情况下其实是事倍功半......。随着学习的深入,师傅也带着我对公司的业务…

PCIe Dma coherent

目录 1.PCIe Dma coherent前言 2.DMA与Cache 的一致性 2.1一致性问题 2.2Coherent DMA buffers 一致性 2.3DMA Streaming Mapping 流式DMA映射 2.4dma_alloc_coherent的例外 2.5SMMU | IOMMU 3.Linux 内核中 DMA 及 Cache 分析 3.1arm 3.2DMA ZONE 3.3DMA ZONE 的内…

南昌市-中安协-安防工程企业设计施工维护能力评价

安防工程企业设计、施工、维护能力评价是指中国安全防范产品行业协会从本行业实际出发,制定评价标准和实施办法,确定其能力等级,并颁发证书的活动。安防工程企业(以下称企业)设计、施工、维护能力(以下称能…

以太网 传统STP生成树简介、STP工作方式简单介绍

2.10.0 以太网 传统STP生成树(简介、工作方式) 作用: STP(Spanning Tree Prortoco)生成树协议,它的出现解决了交换机网络环路的问题。 交换机网络中收到BUM帧的时候,将会进行泛洪的操作&…

CSS 父选择器,:has()

在CSS Selectors 4规范中,CSS 引入了一个名为 的新选择器:has(),它最终让我们可以选择父级。这意味着我们可以选择具有特定元素的父元素。目前Safari和Chrome105已经支持。 父选择器如何在 CSS 中工作 在 CSS 中,如果我们想要选择某些东西&a…

【Pygame小游戏】史上最全:《唐诗三百首》合集,每一首都是精华,果断收藏~(学诗+锻炼记忆+Python诗句填空小程序上线啦)

前言 岁岁年龄岁岁心,不负时光不负卿 哈喽!我是你们的栗子同学,今天给大家来点儿有趣的—— 有句话说:“读史使人明智,读诗使人灵秀。”唐诗本来就是中国文化的绚丽瑰宝,是每个人都 该学习的人生必修课。…

蚂蚁三面遭分布式血虐,意外收获史诗级分布式笔记手册,从基础到进阶收获满满

学习分布式系统设计的难题在于,这个过程存在一个环境障碍,工作中只有一些中大规模的互联网企业,才有开发大规模分布式系统的场景和需求。这就造成目前只有少数身在一线互联网公司的架构师和开发者,才有机会接触并掌握分布式系统设…

Spring Security入门学习

认识Spring Security Spring Security 是为基于 Spring 的应用程序提供声明式安全保护的安全性框架。Spring Security 提供了完整的安全性解决方案,它能够在 Web 请求级别和方法调用级别处理身份认证和授权。因为基于 Spring 框架,所以 Spring Security…

树莓派Pico开发板与大功率MOSFET/IGBT器件驱动控制24V直流电机技术实践

摘要:本文在介绍MOSFET器件和IGBT器件作为电子开关基本原理的基础上,讲述了Pico与MOSFET&IGBT器件驱动控制24V直流电机硬件接口技术,最后给出了Pico开发板GP15端口控制24V直流电机启停的MicroPython测试程序。 一、实验设备和元器件清单 …

[附源码]Nodejs计算机毕业设计基于Java的智慧停车软件Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

React 入门:实战案例 TodoList 对组件的 props 进行限制

文章目录安装 prop-types 库给组件的 props 添加限制给 Header 组件添加限制给 List 组件添加限制给 Item 组件添加限制验证 props 限制完整代码Header 组件完整代码List 组件完整代码Item 组件完整代码本文实现对组件的 props 进行属性的类型和必要性的限制。为什么要对 props…

双十二买什么数码产品比较值?入手超值的数码好物盘点

2022年双十二正式开启倒计时模式,最近看到很多人问什么数码产品值得入手。现如今,数码产品已经贯彻在我们生活的方方面面,在此,我来给大家盘点几款入手超值的数码好物,可以当个参考。 一、蓝牙耳机 推荐产品&#xf…