news 2026/4/17 22:53:57

如何通过 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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:55:35

Artix7系列FPGA实现SDI视频解码转CameraLink,基于GTP高速收发器+OSERDES2原语架构,提供2套工程源码和技术支持

目录 1、前言创作背景工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目本博已有的 SDI 编解码方案FPGA实现CameraLink视频编解码方案 3、详细设计方案设计原理框图SDI 输入设备Gv8601a 均衡器GTP 高速收发器-->SDI视频物理层转…

作者头像 李华
网站建设 2026/4/18 8:38:05

如何开发一个有效的 AI 法律助理

原文:towardsdatascience.com/how-to-develop-an-effective-ai-powered-legal-assistant-096550746987 在这篇文章中,我描述了如何创建一个用于搜索挪威最高法院判决的应用程序。这个应用程序是一个有用的工具,可以快速了解不同主题的判决&am…

作者头像 李华
网站建设 2026/4/18 7:05:40

单元测试中的Mock技术:Mockito与PowerMock深度对比

在当今追求高质高效交付的软件开发领域,单元测试是保障代码质量的基石。而Mock技术,作为隔离被测对象、模拟复杂依赖的关键手段,已成为测试从业者工具箱中的必备品。在众多Mock框架中,Mockito与PowerMock因其强大的功能和广泛的社…

作者头像 李华
网站建设 2026/4/18 7:03:26

如何处理时间序列异常值

原文:towardsdatascience.com/how-to-deal-with-time-series-outliers-28b217c7f6c2 在本文中,我们将探讨: 不同类型的时间序列异常值 基于预测和估计的异常值检测方法 如何使用替换处理不想要的异常值 异常值的类型 异常值是显著偏离正常…

作者头像 李华
网站建设 2026/4/18 8:42:03

跨国项目中的测试挑战:时差、文化差异与质量标准的统一

跨国测试的新常态‌随着业务的国际化扩张和分布式团队模式的普及,软件项目的生命周期早已跨越国界。测试团队不再局限于同一办公室内协作,而是需要与分布在不同时区、拥有不同文化背景的成员共同工作。这种模式极大地扩展了人才库和工作效率,…

作者头像 李华