NVIDIA 已发布 RAPIDS cuDF 统一显存和文本数据处理功能,帮助数据科学家在严苛的工作负载中处理更大、文本密集型数据集时继续使用 pandas。现在,数据科学家可以将这些工作负载加速高达 30 倍。
RAPIDS 是开源 GPU 加速数据科学和 AI 库的集合。cuDF 是一个 Python GPU DataFrame 库,用于加载、连接、聚合和过滤数据。
作为面向数据科学家的顶级数据处理库,pandas 是一个灵活而强大的 Python 数据分析和操作库。上个月,它的下载量超过 2000 万次。然而,随着数据集规模的增长,pandas 在 CPU 系统中的处理速度和效率都很低。这迫使数据科学家不得不在缓慢的执行时间和使用其他工具相关的切换成本之间做出选择。
NVIDIA 在 GTC 2024 上宣布,RAPIDS cuDF 可将 pandas 的速度提升近 150 倍,无需更改代码。Google 随后宣布,默认情况下,RAPIDS cuDF 可在 Colab 的 Google I/O 上使用,使 pandas 代码加速比以往更容易实现。
虽然这一势头令人兴奋,但用户反馈强调了使用 RAPIDS cuDF pandas 加速的工作负载在大小和类型方面的限制。更具体地说:
- 为了最大限度地加速,数据集需要适合 GPU 显存,以提供充足的空间用于分组和连接操作,从而满足工作负载的内存需求。这一要求大大限制了用户可以应用加速的 pandas 代码的数据量和操作复杂性,尤其是在内存较低的 GPU 上。
- 在原始版本的 cuDF 中,用户很快就遇到了文本密集型数据集的处理限制,该版本每列最多支持 2.1 亿个字符。通过标准客户日志、产品评论和位置密集型数据集,可以轻松达到这一限制。这在为 LLM 和类似的生成式 AI 用例预处理大型字符串时造成了限制。
为应对这些反馈,最新版本的 RAPIDS cuDF pandas 加速器模式包括:
- 内置优化的 CUDA 统一显存功能,可以优化 CPU+GPU 系统的显存利用率,从而实现更大的数据集和更复杂的工作负载的速度提升高达 30 倍。
- 将字符串支持从一列中的 21 亿个字符扩展到 21 亿行表格文本数据,以支持数据预处理 LLM 和其他要求严苛的用例中使用的文本密集型数据。
借助此版本,您可以在 GPU 上高效加速更大的数据集和文本密集型用例,从而使 cuDF 更适合多样化和要求严苛的工作流程。
通过统一显存加速数据处理
为了实现零代码更改加速和无缝体验,cuDF 依赖于 CPU 回退。当工作流程的显存需求超过 GPU 显存时,cuDF 会将数据传输到 CPU 显存中,并使用 pandas 处理数据。
由于连接和逐组聚合等常见操作的显存峰值高于输入数据的大小,因此在处理大型数据集时避免 CPU 回退需要输入数据在 GPU 显存中留出大量空间,以免出现性能下降的情况。
为了解决此问题,cuDF 现在使用 CUDA 统一显存来支持将 pandas 工作负载扩展到 GPU 显存之外。统一显存提供了一个跨越系统中 CPU 和 GPU 的单一地址空间,支持分配大于可用 GPU 显存的虚拟内存(超额订阅),并根据需要将数据传入和传出 GPU 显存(分页)。
但是,在需要数据但不在 GPU 上时,使用统一显存可能会导致重复出现分页错误,从而降低性能。为了最大限度地提高性能,cuDF 包含优化,以帮助确保数据在 CUDA 内核需要之前驻留在 GPU 上。这使您能够充分利用系统显存来扩展 GPU 显存之外的内存,并继续利用加速计算的优势。为了实现峰值加速,数据集的大小仍应完全适合 GPU 显存。
如 GPU 显存以外的加速 pandas 基准测试 (图 1) 所示,与仅使用 CPU 的 pandas 相比,在 16 GB 显存 GPU 上使用 cuDF 运行具有 10 GB 数据集的数据处理工作负载,数据连接速度提升高达 30 倍。以前,由于 GPU 显存限制,处理大于 4 GB 的数据集会降低性能。注意:在执行期间,工作负载占用的最大 GPU 显存可能会超过输入数据集大小。
硬件:NVIDIA T4,CPU:英特尔至强金牌 6130 CPU;软件:pandas v2.2.2,RAPIDS cuDF 24.08
有关这些基准测试结果及其再现方式的更多信息,请参阅 cuDF 基准测试指南。请注意,我们之前的 DuckDB 基准测试分别在 0.5 GB 和 5 GB 上运行,因此需要更改数据生成脚本和数据处理脚本以便创建 10 GB 基准测试。
使用 RAPIDS cuDF 大规模处理表格文本数据
在原始版本中,cuDF 在文本数据列中支持多达 2.1 亿个总字符,这在常见的大型数据集中很容易被超越。处理产品审查数据、客户服务聊天记录或具有重要位置或用户 ID 数据的大型数据集是如何轻松满足这一限制的常见示例。
众所周知,使用仅 CPU 的 pandas 时,字符串执行速度缓慢,因此无法使用 pandas 代码大规模处理表格文本数据。用户反馈表明,文本密集型数据集中的大型字符串是可以从 cuDF 加速中受益的用例。这最初受到 cuDF 设计的限制。
通过大幅增加字符串中支持的字符数量,cuDF 现在可以使用 GPU 上的 pandas 代码处理多达 21 亿行的表格文本数据,从而使 pandas 成为生成式 AI 流程中可行的数据准备工具。
开始使用
所有这些功能均可在 RAPIDS 24.08 中使用,您可以从 RAPIDS 安装指南中下载该版本。请注意,统一内存功能仅适用于基于 Linux 的系统中。
- 要体验统一显存,请尝试Unified Memory演示notebook,其中详细解释了扩展显存功能的工作原理。
- 要测试大型字符串预处理工作流,请查看职位发布演示 notebook.