精通GPU编程,高效处理Pandas

大家好,当正在使用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.mfbz.cn/a/57785.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-Lua - Arrays(数组)

数组是对象的有序排列&#xff0c;可以是包含行集合的一维数组&#xff0c;也可以是包含多行和多列的多维数组。 在Lua中&#xff0c;数组是使用带有整数的索引表实现的。数组的大小不是固定的&#xff0c;并且可以根据无涯教程的要求(取决于内存限制)来增长。 一维数组 一维…

Linux系统安装部署MongoDB完整教程(图文详解)

前言&#xff1a;本期给大家分享一下目前最新Linux系统安装部署MongoDB完整教程&#xff0c;我的服务器采用的是Centos7&#xff0c;在部署之前我重装了我的服务器&#xff0c;目的是为了干净整洁的给大家演示我是如何一步步的操作的&#xff0c;整体部署还是挺简洁&#xff0c…

react ant icon的简单使用

refer: 快速上手 - Ant Design 1.引入ant npm install antd --save 2.在页面引用&#xff1a; import { StarOutlined } from ant-design/icons; 如果想要引入多个icon&#xff0c;可以这样书写&#xff1a; import { UserOutlined, MailOutlined, PieChartOutlined } fr…

C/C++开发,opencv与qt结合播放视频

目录 一、qt_ui创建 1.1 ui设置 1.2 ui及代码输出保存 二、创建工程 2.1 工程目录及编译设置 2.2 源码设计 三、编译及测试 3.1 程序编译 3.2 程序运行 首先声明&#xff0c;这是一个OpenCV 3学习文档的案例&#xff0c;但是说明有些过于省略&#xff0c;只有一些简短的代码…

golang执行异步任务的第三方库jobrunner库实践

简介 我们在 Web 开发中时常会遇到这样的需求&#xff0c;执行一个操作之后&#xff0c;需要给用户一定形式的通知。例如&#xff0c;用户下单之后通过邮件发送电子发票&#xff0c;网上购票支付后通过短信发送车次信息。但是这类需求并不需要非常及时&#xff0c;如果放在请求…

java+springboot+mysql校园宿舍报修管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的校园宿舍报修管理系统&#xff0c;系统包含管理员、维修员、学生角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;楼栋管理、宿舍管理、维修人员管理、学生管理&#xff1b;报修管理&#xff08;派单给维修员&am…

npm发布包

1.npm 登录 在控制台输入命令 npm login 按提示输入用户名&#xff0c;密码&#xff0c;邮箱后登录 如果出现如下提示 需要将淘宝镜像源切换为npm源&#xff0c;删除或注释以下内容就行 2.发布 进入准备发布的代码的根目录下&#xff0c;输入命令 npm publish 3.删除已发…

微信小程序原生写法传递参数

微信小程序原生写法传递参数 data-xxx 自定义参数名 &#xff0c;接收参数&#xff1a;方法&#xff08;变量名&#xff09; checkVip:function(event) {let that thisconsole.log(event,event)console.log(event.currentTarget.dataset.idx,index)let index Number(eve…

适应于Linux系统的三种安装包格式 .tar.gz、.deb、rpm

deb、rpm、tar.gz三种Linux软件包的区别 rpm包-在红帽LINUX、SUSE、Fedora可以直接进行安装&#xff0c;但在Ubuntu中却无法识别&#xff1b; deb包-是Ubuntu的专利&#xff0c;在Ubuntu中双击deb包就可以进入自动安装进程&#xff1b; tar.gz包-在所有的Linux版本中都能使用…

静态路由下一跳地址怎么确定(静态路由配置及讲解)

一、用到的所有命令及功能 ①ip route-static 到达网络地址 子网掩码 下一跳 // 配置静态路由下一跳指的是和当前网络直接连接的路由器的接口地址非直连网段必须全部做路由路径是手工指定的&#xff0c;在大规模网络上不能用&#xff0c;效率低&#xff0c;路径是固定的稳定的…

什么?你还没有用过JPA Buddy,那么你工作肯定没5年

1. 概述 JPA Buddy是一个广泛使用的IntelliJ IDEA插件&#xff0c;面向使用JPA数据模型和相关技术&#xff08;如Spring DataJPA&#xff0c;DB版本控制工具&#xff08;Flyway&#xff0c;Liquibase&#xff09;&#xff0c;MapStruct等&#xff09;的新手和有经验的开发人员…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿

1.简介 Fiddler本身的功能其实也已经很强大了&#xff0c;但是Fiddler官方还有很多其他扩展插件功能&#xff0c;可以更好地辅助Fiddler去帮助用户去开发、测试和管理项目上的任务。Fiddler已有的功能已经够我们日常工作中使用了&#xff0c;为了更好的扩展Fiddler&#xff0c…

C# 外观模式

概述 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性&#xff0c;使得客户端可以通过简单的接口与子系统进行交互。 外观模式定义了一个高层…

微信小程序 - 解析富文本插件版们

一、html2wxml 插件版 https://gitee.com/qwqoffice/html2wxml 申请使用注意事项 插件版本解析服务是由 QwqOffice 完成&#xff0c;存在不稳定因素&#xff0c;如对稳定性有很高的要求&#xff0c;请自行搭建解析服务&#xff0c;或在自家服务器上直接完成解析。对于有关插…

生成对抗网络DCGAN学习

在AI内容生成领域&#xff0c;有三种常见的AI模型技术&#xff1a;GAN、VAE、Diffusion。其中&#xff0c;Diffusion是较新的技术&#xff0c;相关资料较为稀缺。VAE通常更多用于压缩任务&#xff0c;而GAN由于其问世较早&#xff0c;相关的开源项目和科普文章也更加全面&#…

STM32入门——外部中断

中断系统概述 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行中断优先级&#xff…

vue 图片回显标签

第一种 <el-form-item label"打款银行回单"><image-preview :src"form.bankreceiptUrl" :width"120" :height"120"/></el-form-item>// 值为 https://t11.baidu.com/it/app106&fJPEG&fm30&fmtauto&…

Kafka-Broker工作流程

kafka集群在启动时&#xff0c;会将每个broker节点注册到zookeeper中&#xff0c;每个broker节点都有一个controller&#xff0c;哪个controller先在zookeeper中注册&#xff0c;哪个controller就负责监听brokers节点变化&#xff0c;当有分区的leader挂掉时&#xff0c;contro…

Python基本数据类型之散列类型详解

前言&#xff1a; python的基本数据类型可以分为三类&#xff1a;数值类型、序列类型、散列类型&#xff0c;本文主要介绍散列类型。 一、散列类型 散列类型&#xff1a;内部元素无序&#xff0c;不能通过下标取值 1&#xff09;字典&#xff08;dict&#xff09;&#xff…

20230803激活手机realme GT Neo3

20230803激活手机realme GT Neo3 缘起&#xff1a; 新买的手机&#xff1a;realme GT Neo3 需要确认&#xff1a; 1、4K录像&#xff0c;时间不限制。 【以前的很多手机都是限制8/10/12/16分钟】 2、通话自动录音 3、定时开关机。 4、GPS记录轨迹不要拉直线&#xff1a;户外助…
最新文章