news 2025/12/24 19:24:45

如何通过 GPU 增强 Pandas

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何通过 GPU 增强 Pandas

原文:towardsdatascience.com/how-to-empower-pandas-with-gpus-43909ad59e75

数据科学

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/61ebdda55c9753eb268037fcc87960f7.png

图片由 BoliviaInteligente 在 Unsplash 上提供

Pandas 在数据分析和机器学习项目中仍然是一个关键工具,提供了广泛的能力,用于数据读取、转换、清理和写入等任务。然而,它在处理大型数据集方面的效率有限,这阻碍了其在生产环境中的应用或构建弹性数据管道,尽管它在数据科学项目中得到了广泛使用。

与 Apache Spark 类似,Pandas 将数据加载到内存中进行计算和转换。但与 Spark 不同,Pandas 不是一个分布式计算平台,因此所有操作都必须在单个系统 CPU 和内存(单节点处理)上完成。这一特性以两种方式限制了 Pandas 的使用:

  1. 单个系统上的 Pandas 无法处理大量数据。

  2. 即使数据可以适应单个系统内存,处理相对较小的数据集也可能需要相当长的时间。

Pandas 强化版

第一个问题通过 Dask 等框架得到解决。Dask DataFrame 通过在分布式计算机集群上并行化 Pandas 来帮助您处理大量表格数据。在许多方面,由 Dask 增强的 Pandas 类似于 Apache Spark(然而,Spark 仍然可以更有效地处理大型数据集,这也是为什么它是数据工程师中首选的工具)。

尽管 Dask 能够在机器集群上并行处理大量数据集,但在现实中,大多数机器学习项目的数据可以容纳在单个系统的内存中。因此,为这类项目使用机器集群可能过于奢侈。因此,需要一个工具,能够在单机上高效地并行执行 Pandas 操作,解决前面提到的第二个问题。

当提到并行处理时,大多数工程师首先想到的词是 GPU。长期以来,人们一直希望能够在 GPU 上运行 Pandas 以实现高效的并行计算。随着 NVIDIA RAPIDS cuDF 的引入,这个愿望成真了。cuDF(发音为“KOO-dee-eff”)是一个用于并行处理数据的 GPU DataFrame 库。

在 2024 年 NVIDIA GTC 大会上,宣布 RAPIDS cuDF 现在可以为 9.5M 百万 Pandas 用户带来 GPU 加速,而无需他们更改代码。

安装

在进行安装之前,请确保你能够访问系统上的 NVIDIA GPU。如果你在当地拥有 NVIDIA 显卡,你可以在你的机器上执行 cuDF。或者,如果你没有这样的硬件,你仍然可以在像 Google Colab 这样的云平台上运行你的 cuDF 代码,该平台为你提供了足够的 GPU 资源。我个人在我的系统上安装了 GeForce RTX 3090,因此我选择在本地进行这项测试。然而,初学者可能会发现在这个教程的 Google Colab 实例上运行 cuDF 代码更方便。

此外,截至 2024 年 4 月,cuDF 只能在 Linux 操作系统和 Python 3.9 或更高版本上运行。在开始安装之前,请访问 此页面 了解系统要求。

为了便于读者理解,我已经将安装部分分为两个部分。第一部分帮助想要在本地系统上安装 cuDF 的用户,第二部分指导 Google Colab 用户完成安装。

在带有 GPU 的系统上安装

如 cuDF 的名称所暗示的,它运行在 CUDA 平台(由 NVIDIA 开发)上。因此,你首先需要在你的系统上安装 CUDA 工具包。如果你还没有安装,我建议安装 CUDA 12.0。否则,任何 CUDA 11 或更新的版本都应该可以正常工作。

如果你计划在你的本地系统上运行 cuDF,在安装 CUDA 工具包之后,你需要安装 RAPIDS 框架。使用 UI 命令构建器安装 RAPIDS 既简单又直接。你需要导航到docs.rapids.ai/install并选择你的系统 CUDA 和 Python 版本。你可以选择标准包(包括cuDFcuMLcuGraphcuSpatialcuProjcuxfiltercuCIMRAFT)或者只通过“选择特定包”选择 cuDF。以下截图是我为我的系统选择的。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/91d880ba11b0d241b43f3a9aebc39d93.png

Google Colab

如果你计划在 Google Colab 上运行 cuDF,你有一个更简单的路径。首先,Google Colab 和许多类似的服务已经在它们的 GPU 实例上安装了 CUDA 工具包。

对于安装 RAPIDS,正如 Google 的 此文档 详细解释的那样,你需要进行两个步骤。第一步是选择一个使用 GPU 加速器的 Colab 运行时。第二步是在你的笔记本中运行以下命令,通过 pip 在你的 Colab 实例上安装 RAPIDS。

!pip install cudf-cu11--extra-index-url=https://pypi.ngc.nvidia.com !rm-rf/usr/local/lib/python3.8/dist-packages/cupy*!pip install cupy-cuda11x

请阅读提到的 文档 中的“在 Colab 上开始使用 RAPIDS”部分以获取更多详细信息。

测试示例

为了比较 CuDF Pandas 和标准 Pandas 的功能,我使用包含 1000 万条记录的假数据集进行了一次测试。你可以在本存储库中找到所有必需的文件:github.com/tamiminaser/cudf-examples/raw/master/example1

首先,我们需要创建一个大型测试数据集。如果你可以访问一个可以加载到 Pandas 中的大型数据集,你可以直接使用你的数据集。我决定创建一个包含 1000 万行的假 CSV 数据集,并用于这次测试。我使用了以下 Python 代码(代码仓库链接)来创建我的假数据集,并将其命名为data_10000000.csv

importcsvfromfakerimportFakerimportdatetimefromtqdmimporttqdmdefdatagenerate(records,headers):fake=Faker('en_US')withopen("data_10000000.csv",'wt')ascsvFile:writer=csv.DictWriter(csvFile,fieldnames=headers)writer.writeheader()foriintqdm(range(records)):full_name=fake.name()FLname=full_name.split(" ")Fname=FLname[0]Lname=FLname[1]domain_name="@testDomain.com"userId=Fname+"."+Lname+domain_name writer.writerow({"user_id":fake.unique.random_int(min=1111111111111,max=9999999999999),"name":fake.name(),"date_of_birth":fake.date(pattern="%d-%m-%Y",end_datetime=datetime.date(2000,1,1)),"country_of_birth":fake.country(),"email":fake.email(),"record_year":fake.year(),"score":fake.random_int(min=1,max=999),})records=100000000headers=["user_id","name","date_of_birth","country_of_birth","email","record_year","score"]datagenerate(records,headers)print("CSV generation complete!")

创建这样一个包含 1000 万行的 CSV 文件将花费很长时间,输出文件大小约为 8 GB。你可以在代码中将records数量(例如,减少到 300 万条记录)降低,以生成更小的数据集。此外,我使用了我的 NVIDIA GeForce RTX 3090,它有 24 GB 的内存,我没有遇到加载如此大数据集的问题,但如果你使用内存较小的 GPU,你可能需要处理更小的数据集。

创建假 CSV 文件后,你可以对该文件进行以下测试。首先,让我们从标准的 Pandas 开始,观察该数据集的处理时间。下面是我们用于测试初始阶段的 Jupyter Notebook。(注意,我将我的代码限制在 300 万条记录,以便进行 10 次循环测试,以获得更准确的比较)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 19:21:37

python日常办公用品打印机耗材商城直售推荐购物系统的设计与实现_02i27_pycharm django vue flask

目录已开发项目效果实现截图开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 python日常办公用品打印机耗材商城直售推荐购物系统的设计与实…

作者头像 李华
网站建设 2025/12/24 19:20:53

Gin 框架 JSON 全链路:从响应返回到请求绑定

为什么 Gin 的 JSON 处理如此重要? 在现代 Web 开发中,JSON 是前后端通信的事实标准。作为 Go 领域最流行的 Web 框架,Gin 对 JSON 的支持极为完善——无论是返回结构化响应,还是解析并验证请求数据,都只需几行代码。 …

作者头像 李华
网站建设 2025/12/24 19:17:24

分压电路深度解析:从基本原理到高级应用的完全指南

分压电路深度解析:从基本原理到高级应用的完全指南 一、为什么分压电路无处不在? 打开任何一个电子设备,从智能手机到火星探测器,你几乎都会发现分压电路的身影。为什么这个由两个电阻组成的简单电路能成为电子设计的基石&#xf…

作者头像 李华
网站建设 2025/12/24 19:07:16

如何轻松使用 Pandera 验证数据

原文:towardsdatascience.com/how-to-easily-validate-your-data-with-pandera-a9cd22c515a5?sourcecollection_archive---------7-----------------------#2024-08-14 学习如何构建一个简单的数据模型,通过类型提示来验证数据 https://medium.com/con…

作者头像 李华
网站建设 2025/12/24 18:41:49

自考必备9个降AI率工具,高效避坑指南!

自考必备9个降AI率工具,高效避坑指南! AI降重工具:高效避坑,让论文更自然 在自考论文写作过程中,越来越多的学生开始关注“AI痕迹”与“查重率”的问题。随着人工智能技术的普及,许多学生在撰写论文时会借…

作者头像 李华
网站建设 2025/12/24 18:34:58

Agent基础:单代理 vs 多代理、Agent Loop、Memory 机制

以下是对单代理 vs 多代理、Agent Loop、Memory 机制的系统化讲解。这三者是构建智能体(Agent)系统的核心架构要素,直接影响 Agent 的能力边界、协作模式与长期行为一致性。一、定义解析概念全称/英文中文含义核心目标单代理(Sing…

作者头像 李华