精通GPU编程,高效处理Pandas

news2024/12/26 0:09:07

大家好,当正在使用python处理大型数据集,那么很可能会感受到,当基于CPU的pandas DataFrame难以执行操作时,等待数小时才能完成查询的挫败感。正是在这种情况下,pandas用户应该考虑使用RAPIDS cuDF利用GPU的强大功能进行数据处理。

RAPIDS cuDF具有类似于pandas的API,使数据科学家和工程师只需修改几行代码,就能迅速挖掘GPU上并行计算的巨大潜力。很多用户不熟悉GPU加速,本文将简单介绍RAPIDS生态系统,并展示cuDF(基于GPU加速的pandas DataFrame对应程序)的最常用功能。

cuDF如何让数据科学工作变得更快

cuDF是RAPIDS GPU加速库套件的数据科学构建模块,它是一种EDA工具,可以用它来搭建允许的数据管道,以处理数据并获得新的特征。作为RAPIDS套件中的基本组件,cuDF是其他库的基础,巩固了其作为通用构建模块的作用。与RAPIDS套件中的所有组件一样,cuDF采用CUDA后端来支持GPU计算。不过,cuDF采用简单而熟悉的Python界面,用户无需直接与该层交互。

无论是处理字符串数据还是处理时间序列数据,都可以通过多种方式使用cuDF 来推动数据工作向前发展。

  • 时间序列分析:无论是重新采样数据、提取特征还是进行复杂计算,cuDF都能大幅提高速度,在时间序列分析方面可能比pandas快880倍。

  • 实时探索性数据分析(EDA):使用传统工具浏览大型数据集可能会很繁琐,但cuDF的GPU加速处理能力使实时探索最大的数据集成为可能。

  • 机器学习(ML)数据准备:利用cuDF的加速功能,加快数据转换任务,并为常用的ML算法(如回归、分类和聚类)准备数据。高效的处理意味着更快的模型开发,使开发者能够更快地实现部署。

  • 大规模数据可视化:无论是为地理数据创建热图,还是可视化复杂的金融趋势,开发人员都可以通过使用cuDF和cuxfilter,部署具有高性能和高FPS数据可视化功能的数据可视化库。这种集成使实时交互性成为分析周期的重要组成部分。

  • 大规模数据过滤和转换:对于超过几千兆字节的大型数据集,使用cuDF执行过滤和转换任务所需的时间仅为使用pandas时间的一小部分。

  • 字符串数据处理:传统上,由于文本数据的复杂性,字符串数据处理一直是一项具有挑战性的缓慢任务。使用GPU加速后,这些操作变得轻松自如

  • GroupBy操作:GroupBy操作是数据分析中的常见操作,但可能会消耗大量资源。cuDF可显著加快这些任务的速度,使得在大型数据集上执行GroupBy操作变得更加高效。

熟悉的GPU处理界面

RAPIDS的核心前提是为流行的数据科学工具提供熟悉的用户体验,以便所有从业人员都能轻松使用NVIDIA GPU的强大功能。无论你是在执行ETL、构建ML模型,还是在处理图形,只要了解Pandas、NumPy、scikit-learn或NetworkX,在使用RAPIDS时就会感到非常熟悉。

从CPU到GPU数据科学堆栈的转换从未如此简单:只需导入cuDF而不是pandas,就可以利用NVIDIA GPU的巨大威力,将工作负载速度提高10-100倍(低端),并享受更高的生产率,同时使用最喜爱的工具。请查看下面的示例代码,了解使用pandas的用户对cuDF API的熟悉程度。

import pandas as pd
import cudf
df_cpu = pd.read_csv('/data/sample.csv')
df_gpu = cudf.read_csv('/data/sample.csv')

从喜爱的数据源加载数据

自2018年10月RAPIDS首次发布以来,cuDF的读写能力有了显著增长。数据可以存储在本地计算机上、存储在本地的集群中,或存储在云中。cuDF使用fsspec库抽象了大部分与文件系统相关的任务,因此你可以专注于最重要的事情:创建功能和搭建模型。

借助fsspec,从本地或云文件系统读取数据只需向后者提供凭据。下面的示例从两个不同位置读取同一个文件:

import cudf
df_local = cudf.read_csv('/data/sample.csv')
df_remote = cudf.read_csv(
    's3://<bucket>/sample.csv'
    , storage_options = {'anon': True})

cuDF支持多种文件格式:基于文本的格式(如CSV/TSV或JSON)、面向列的格式(如Parquet或ORC)或面向行的格式(如Avro)。在文件系统支持方面,cuDF可以从本地文件系统、AWS S3、Google GS或Azure Blob/Data Lake 等云提供商、内部或外部Hadoop文件系统读取文件,也可以直接从HTTP或(S)FTP网络服务器、Dropbox或Google Drive或Jupyter文件系统读取文件。

轻松创建和保存DataFrame

读取文件并不是创建cuDF DataFrame的唯一方式,至少有4种方法可以做到这一点。

通过值列表,可以创建只有一列的DataFrame:

cudf.DataFrame([1,2,3,4], columns=['foo'])

如果要创建包含多列的DataFrame,可传递一个字典:

cudf.DataFrame({
      'foo': [1,2,3,4]
    , 'bar': ['a','b','c',None]
})

创建空DataFrame并为列赋值:

df_sample = cudf.DataFrame()
df_sample['foo'] = [1,2,3,4]
df_sample['bar'] = ['a','b','c',None]

通过传递元组列表:

cudf.DataFrame([
      (1, 'a')
    , (2, 'b')
    , (3, 'c')
    , (4, None)
], columns=['ints', 'strings'])

还可以将其转换为其他内存表示形式:

  • 从内部GPU矩阵(表示为DeviceNDArray)。

  • 通过用于在深度学习框架和Apache Arrow格式之间共享张量的DLPack内存对象,这种格式可以更方便地操作各种编程语言的内存对象。

  • 与pandas DataFrames和Series之间的转换。

此外,cuDF还支持将存储在DataFrame中的数据保存为多种格式和文件系统。事实上,cuDF可以将数据存储在它可以读取的所有格式中。

所有这些功能都使得无论任务是什么或数据位于何处,都可以轻松创建和保存DataFrame,并将它们加载到GPU中以快速进行数据处理和分析。

提取、转换和汇总数据

数据科学的基本任务就是清理、特征化和熟悉数据集,几乎所有数据科学家花了80%的时间来做这项工作。花费这么多时间的原因之一是向数据集提出的问题需要很长时间才能回答,任何尝试过在CPU上读取和处理2GB数据集的人都知道这一点。

此外,由于我们是人而不是机器,也会犯错,因此重新运行流程可能很快就会变成一整天的工作,这导致生产率下降,如下图所示。

图片

使用GPU与CPU工作流程的开发人员的典型工作日对比

RAPIDS采用GPU驱动的工作流程,可减轻所有这些障碍。ETL阶段的速度通常要快8-20倍,因此加载2GB数据集的时间只需几秒钟,而在CPU上需要几分钟,数据清理和转换的速度也快了很多,所有这一切只需一个熟悉的界面和最少的代码改动。

在GPU上处理字符串和日期

不到5年前,在GPU上处理字符串和日期还被认为是几乎不可能的,也是CUDA等低级编程语言所无法实现的。毕竟,GPU 是为处理图形而设计的,也就是说,是为了处理intsfloats的大型数组和矩阵,而不是字符串或日期。

RAPIDS不仅可以将字符串读入GPU内存,还可以提取字符串的特征,并对其进行处理和操作。如果熟悉Regex,那么借助cuDF,在GPU上从文档中提取有用信息就变得易如反掌了。例如,如果想找到并提取文档中所有符合[a-z]*flow 模式(如ataflow、workflow或flow)的单词,只需要执行以下操作:

df['string'].str.findall('([a-z]*flow)')

从日期中提取有用的特征或查询特定时间段的数据也变得更加容易和快速,这要归功于RAPIDS。

dt_to = dt.datetime.strptime("2020-10-03", "%Y-%m-%d")
df.query('dttm <= @dt_to')

利用用GPU加速赋能Pandas用户

使用RAPIDS可以直接从CPU过渡到GPU数据科学堆栈,导入cuDF而不是pandas只是一个小小的改变,却能带来巨大的好处。无论是在本地GPU盒子上工作,还是扩展到成熟的数据中心,RAPIDS的GPU加速能力都能将速度提高10-100倍(低端)。这不仅能提高工作效率,还能有效利用最喜爱的工具,即使在要求最苛刻的大规模场景中也是如此。

RAPIDS真正彻底改变了数据处理的格局,使数据科学家能够在几分钟内完成以往需要数小时甚至数天才能完成的任务,从而提高了生产率,降低了总体成本。

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

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

相关文章

opencv37-形态学操作-开运算(先腐蚀后膨胀)cv2.morphologyEx()-参数 op 设置为“cv2.MORPH_OPEN”

腐蚀操作和膨胀操作是形态学运算的基础&#xff0c;将腐蚀和膨胀操作进行组合&#xff0c;就可以实现开运算、闭运算&#xff08;关运算&#xff09;、形态学梯度&#xff08;MorphologicalGradient&#xff09;运算、礼帽运算&#xff08;顶帽运算&#xff09;、黑帽运算、击中…

Dockerfile构建LNMP镜像(yum方式)

目录 Dockerfile构建LNMP镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 5、浏览器访问测试&#xff1a; Dockerfile构建LNMP镜像 1、建立工作目录 [roothuyang1 ~]# mkdir lnmp/ [roothuyang1 ~]# cd lnmp/ 2、编写Dockerfile文件 [roothuyang1 …

安达发专注于APS高级计划管理系统解决方案

随着全球制造业竞争日益激烈&#xff0c;企业对于提高生产效率、降低成本的需求越来越迫切。为此&#xff0c;安达发近日发布了全新的APS高级计划管理系统解决方案&#xff0c;旨在帮助企业在有限产能条件下&#xff0c;实现交期产能精确预测、工序生产与物料供应最优详细计划&…

[代码案例] 快速入手matlab绘图基本指令

主要内容 Matlab绘图指令基本语法&#xff0c;涵盖画布位置大小&#xff0c;坐标调整&#xff0c;图例标签&#xff0c;子图绘制等 part 1 生成绘图数据据 part 2 绘图基本指令 part 3 多条曲线绘制 part 4 子图分块绘制方法 part 5 指定画布绘制 代码 % part 1 t0:0.01:30;…

C语言sprintf函数的简明介绍(头文件/自动添加杠0/与printf函数的区别)

介绍 一句话&#xff0c;与printf唯一的区别&#xff1a; printf函数打印输出到屏幕上&#xff0c;而sprintf函数打印到字符串中。 与printf同样支持&#xff1a;控制精度、将多个数值数据连接起来、打印某变量的地址、格式化数字字符串 自动在末尾添加\0&#xff0c;不用担…

Knife4j系列--解决不显示文件上传的问题

原文网址&#xff1a;Knife4j系列--解决不显示文件上传的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍使用Knife4j时无法上传文件的问题。 问题复现 依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-…

无头单向不循环链表和带头双向循环链表的创建

Lei宝啊&#xff1a;个人主页 愿所有美好不期而遇 前言&#xff1a; 接下来我们将会了解最基础的链表--->单链表 以及最方便也是最爽的链表--->带头双向循环链表。 若有看不懂之处&#xff0c;可画图或者借鉴这里&#xff1a;反转单链表&#xff0c;对于数据结构而言&am…

Python入门【​编辑、组合、设计模式_工厂模式实现 、设计模式_单例模式实现、工厂和单例模式结合、异常是什么?异常的解决思路 】(十七)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

解决Vue3 使用Element-Plus导航刷新active高亮消失

解决Vue3 使用Element-Plus导航刷新后active高亮消失的问题 启用路由模式会在激活导航时以 index 作为 path 进行路由跳转 使用 default-active 来设置加载时的激活项。 接下来打印一下选中项index和index路径&#xff0c; 刷新也是没有任何问题的&#xff0c;active不会消失…

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么?

NB-IOT 和蜂窝通信(2/3/4/5G)的区别和特点是什么? 参考链接:https://www.sohu.com/a/221664826_472880 NB IOT是窄带物联网技术,主要解决的是低速率数据传输,可使用GSM900或DCS1800频段,在频段使用上比较灵活,可以和GSM,UMTS或LTE共存,具备优异的MCL(最小耦合损耗…

ZKML——EZKL团队分享

1. 引言 “ZKP之于数字签名” 类似于 “以太坊之于比特币”&#xff1a; 所谓数字签名&#xff0c;是指&#xff1a;“我知道某秘密secrets&#xff0c;使得 F(secrets, public inputs)pubic outputs”&#xff0c;其中F为fixed function&#xff08;固定函数&#xff09;。这…

【雕爷学编程】 MicroPython动手做(34)——通用传感器的综合运用

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

71. 简化路径

题目链接&#xff1a;力扣 解题思路&#xff1a; 以 "/" 对路径字符串进行分割&#xff0c;得到分割后的数组split&#xff0c;那么数组中每个元素就是一级路径的名称对split进行遍历&#xff1a;使用一个队列deque保存最终的每一个目录 如果当前字符串是 "..&…

发明专利申请:不能包含文本框或自选图形 || 不能包含域对象(校验错误)

提交出错 解决方案&#xff1a;如果xml文件传上去没有反应&#xff0c;一定要优先把word转成pdf&#xff0c;不要去文本框中输入&#xff1a;里面的公式编辑器很老旧&#xff08;很多公式编辑不了&#xff09; 上传以后&#xff0c;总体预览没有问题就ok&#xff0c;前序穿文件…

【GitOps系列】如何实施自动化渐进式交付?

文章目录 前言自动渐进式交付概述自动渐进式交付准备创建生产环境创建 AnalysisTemplate访问生产环境安装Prometheus配置 Ingress-Nginx 和 ServiceMonitor验证 Ingress-Nginx 指标 自动渐进式交付实战自动渐进式交付成功自动渐进式交付失败 结语 前言 在实施金丝雀发布的过程中…

Golang之路---03 面向对象——反射

反射 反射的存在意义 在开发中&#xff0c;你或许会碰到在有些情况下&#xff0c;你需要获取一个对象的类型&#xff0c;属性及方法&#xff0c;而这个过程其实就是反射。 golang中变量包括&#xff08;type, value&#xff09;两部分 静态类型 所谓的静态类型&#xff08;…

【智慧校园】智慧班牌云平台源码,使用springboot vue框架

【智慧校园】智慧班牌云平台源码&#xff0c;使用springboot vue框架 前后端分离架构 1、使用springboot vue框架 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班牌固件安卓7.1&#xff1b;使用Java Android原生 5、java&#xff0c;elmentui &…

四、Unity中颜色空间

Unity中的设置 通过点击菜单Edit->Project Settings->Player页签->Other Settings下的Rendering部分进行修改&#xff0c;参数Color Space可以选择Gamma或Linear。 当选择Gamma Space时&#xff0c;Unity不会做任何处理。当选择Linear Space时&#xff0c;引擎的渲染…

电测知识分享——三千字解读时钟电路最重要部件,建议收藏!

晶振作为时钟电路中最重要的部件&#xff0c;在电路中起着产生震荡频率的作用&#xff0c;可以产生高度稳定的信号&#xff0c;并稳定工作环境&#xff0c;为系统提供基本的时钟信号&#xff0c;在工业、科技、车载、数码、电子等多个领域几乎都有应用场景。 今天&#xff0c;…

MySQL binLog问题

看到数据库目录下有很多OFF.*文件的时候很诧异&#xff0c;这玩意是啥&#xff0c;binlog不应该都是*bin-log.*​的文件吗&#xff1f;* [roottest ~]# cd /data/mysql_data [roottest mysql_data]# ls ansible hap_attach_yl hap_func_yl hap_msg_yl h…