数据中心/云端

Databricks 上的 RAPIDS: GPU 加速数据处理指南

在当今数据驱动的环境中,最大限度地提高数据处理和分析的性能和效率至关重要。虽然许多 Databricks 用户熟悉使用 GPU 集群进行机器学习训练,但也有巨大的机会利用 GPU 加速进行数据处理和分析任务。

Databricks 作为一个基于云的统一平台,使用户能够高效地管理小型和大型数据需求。通过将 GPU 集群集成到现有工作流程中,用户可以获得显著的性能提升,从而增强其数据分析能力。

本指南探讨了 RAPIDS 如何帮助解锁 Databricks 上的 GPU 加速,以使用熟悉的 API 和插件转换数据处理和分析。RAPIDS 为 Databricks 用户提供了多种加速现有工作流的选项,包括单节点处理以及与 Spark 和 Dask 的集成。这篇文章重点介绍了以下针对单节点和多节点用户的安装选项和集成方法。

对于单节点用户,RAPIDS 可以在不更改代码的情况下加速现有 pandas 工作流。有了这一新功能,单节点用户现在可以在 RAPIDS cuDF(cuDF)和 pandas 之间轻松切换,以执行大型数据操作任务。

多节点用户可以使用 Apache Spark 的 RAPIDS 加速器以及现有 Spark 集群上的 Dask 来加速工作负载。

Apache Spark 的 RAPIDS 加速器作为 Apache Spark 3.0+的插件提供。该插件的工作原理是在 Databricks 中插入用于 SQL 和 DataFrame 操作的 RAPIDS 后端,而不需要用户更改代码。如果不支持某个操作,它将回退到使用 Spark CPU 版本。

您可以安装 Dask 并与 Spark 一起使用库,如 dask-cudf,以有效地扩展不同的工作负载。本文稍后将概述 Dask 和 Spark 之间的差异,以帮助您为数据处理工作流做出最佳的工具决策。

单节点用户:加速数据块上的 pandas

pandas 是一个流行的数据操作库,专门用于处理表格格式的结构化数据。Databricks Runtime 将 pandas 作为标准 Python 包之一,允许用户创建和 在单节点计算环境中使用 DataFrames

cuDF 是一个 GPU 加速的 DataFrame 库,其语法在许多场景中与 pandas 相似或相同。截至 RAPIDS v24.02 版本:cuDF 现在可以零代码更改直接加速 pandas 工作流

利用 cuDF 加速 pandas

当 cuDF 加速 pandas 时,写在 pandas 代码上的单个旗帜将拉动 cuDF.pandans。该库将尽可能自动优化 pandas,使其在 GPU 上运行,必要时与传统 pandas 无缝切换到 CPU,并在后台进行同步。

这种创新方法提供了连贯的 CPU 和 GPU 体验,确保 pandas 工作流的最佳性能(图 1)。

The diagram demonstrates the CPU fallback mechanism. First, cuDF is flagged over the code. Then, cuDF assesses the code to cuDF equivalents - where there aren’t equivalents, cuDF falls back to pandas, ensuring no code failures.
图 1.描述 pandas 和 cuDF 之间的 RAPIDS CPU 和 GPU 回退机制的工作流程图

使用 CuDF 加速 pandas 在处理大型数据集时,单个 GPU 节点上的 Databricks 可以显著提高传统 pandas 的性能。以下概述解释了当 pandas 减速时,cudf.pandas 如何帮助加速。

1.运算速度最高

  • pandas 操作通常是单线程的,缺乏并行性,没有充分利用现代硬件的计算能力,尤其是在大规模数据处理中。
  • 基于 CUDA 框架,cudf.pandas 利用 GPU 的并行处理能力,实现过滤、聚合和连接等操作的更快计算。这在处理可以分布在 GPU 核心上的大型数据集时尤其有益。

2.零代码更改加速

  • 用户可以在现有代码中使用 cudf.pandans 加速 panda,无需任何修改。使用 magic 命令或使用命令行上的 Python 模块标志加载 cudf.pandans Jupyter Notebook 扩展。
#IPython 或 Jupyter 笔记本 #Python 脚本
%load_ext cudf.pandasimport pandas as pd python -m cudf.pandas script.py

3.统一的 CPU 和 GPU 工作流程

  • 绝大多数 Python 软件包都没有启用 GPU。这意味着,对于任何使用其他包(PyData 库或组织特定工具)的分析,用户都会将计算从 GPU(cuDF)移到 CPU(panda),然后再移回来。
  • 使用 cuDF pandas 加速器模式,您现在可以使用单个代码路径在生产中进行开发、测试和运行,而无需考虑硬件。
  • 第三方库兼容性:cudf.pandas 提供了灵活性,并与大多数操作 pandas 对象的第三方库可兼容,从而加快了 pandas 在这些库中的操作。

cuDF pandas 快速入门示例

要在笔记本电脑环境中使用 cuDF 加速 pandas,请按照说明进行操作,首先 启动启用 GPU 的单节点 Databricks 集群。然后,上传 10 分钟到达 RAPIDS cuDF 大 pandas 笔记本。

When cudf.pandas is enabled using the %load_ext cudf.pandas extension, pandas operations that previously took 5-20 seconds (left) can now potentially finish in milliseconds (right) without any code changes.
图 2.突出显示pandas使用 cuDF 加速器模式的性能加速的工作流程图

此外,任何在第三方库函数内运行的 pandas 代码也将尽可能受益于 GPU 加速。例如,您可以看到一张图片,说明 cudf.pandas 如何在中加速 pandas 后端 Ibis,一个为各种后端提供统一 DataFrame API 的库。此示例在具有 NVIDIA H100 GPU 和一个 Intel Xeon Platinum 8480CL CPU 的系统上运行。

通过加载 cudf.pandas 扩展,在 Ibis 中的 pandas 操作可以使用 GPU 而不更改代码这只是起作用。

 This image shows that when cudf.pandas is enabled, pandas operations running inside Ibis library's functions that previously took  seconds (left) can now potentially finish in milliseconds (right) without any code changes.
图 3。说明 cuDF pandas GPU 加速如何扩展到第三方库(如 Ibis)中的 pandas 代码的工作流程图

要了解更多信息,请参阅 GTC 2024 会议,查看使用 RAPIDS cuDF 加速 pandas 零代码更改 会议录像和cuDF 文件。此外,还可以查看相关帖子,包括RAPIDS cuDF 在零代码更改的情况下将 pandas 加速近 150 倍NVIDIA 宣布 cuDF pandas 加速器模式

Spark 和 Dask 的分布式数据处理

Spark 和 Dask 是分布式框架,可以帮助用户跨多个处理器处理更大数据集的工作负载。在多节点 Databricks 集群中利用 Spark 和 Dask 可确保 GPU 资源的有效利用,从而为 RAPIDS 工作流带来更好的结果和整体性能。

在 Databricks 中,Spark 集群擅长大规模数据处理,具有管理执行的驱动程序节点和用于计算并行任务的多个工作节点。Apache Spark 专注于传统的商业智能工作负载,如 ETL 和 SQL 查询,以及轻量级机器学习。

Dask 集群与 Spark 集群共享类似的体系结构,但提供了一个灵活的并行计算框架,适用于各种工作负载,尤其是那些不太以传统 SQL 风格计算为中心的工作负载。例如,Dask 擅长处理多维数组、GIS 和高级机器学习。

多节点 Databricks:使用 Spark 加速 Rapids

在 Databricks 中,Spark 集群使用 Apache Spark 处理大规模数据处理,将工作负载分布在多个节点上以实现并行。

在 Databricks 上启动多节点集群时,会提供一个 Spark 驱动程序节点和许多 Spark 工作节点。驱动程序节点负责管理整个 Spark 应用程序,而工作程序节点执行提交的任务。

Apache Spark 的 RAPIDS 加速器 为 Apache Spark 提供了一组插件,这些插件通过利用 GPU 和 RAPIDS 库 实现加速。

加速器建立在 RAPIDS cuDF 项目UCX 之上,并且要求群集中的每个工作节点都安装 CUDA。

要将 Spark RAPIDS 与 Databricks 集群一起使用,用户必须提供 init 脚本下载的rapids-4-spark-xxxx.jar插件,然后配置 Spark 来加载该插件。随后,Spark 查询将充分利用 libcudf,并从 GPU 加速中获得性能提升。

要在 Databricks 上为 Apache Spark 3.x 设置 RAPIDS 加速器,请按照 Databricks 用户指南 进行操作。本指南的结尾还提供了一个机会,让您 运行示例 Apache Spark 应用程序,它可以在 Databricks 上的 NVIDIA GPU 上运行。

多节点 Databricks:使用 Dask 加速 Rapids

Dask 广泛应用于整个 PyData 生态系统,并被集成到多个库中,包括 XarrayPrefect、RAPIDS 以及 XGBoost

由于数据集和计算的扩展速度快于 CPU 和 RAM,因此有必要找到跨多台机器扩展计算的方法。Dask 有助于对大型计算进行分区,并有效地分配到分布式硬件上。

为什么在 Databricks 上 Dask?

Dask 现在提供了一个 dask-databricks CLI 工具,通过 condapip,以简化 Databricks 中的 Dask 集群启动过程。

驱动程序和工作程序的 Spark 集群架构与 Dask 集群相同:它们在不同的节点上具有调度器和工作者。如 Spark RAPIDS 示例所示,Databricks 提供了一种机制,可以在启动时在每个节点上运行脚本来安装插件。

Databricks 上的 Dask 利用这种范式在后台引导 Dask 集群,作为初始化脚本过程的一部分。这个 init 脚本在启动时在每个节点上运行,从而实现必要的配置和安装。

Dask on Databricks 与 RAPIDS 快速启动示例

要开始,请首先配置init脚本,该脚本应包含以下内容,以安装 Dask、Databricks 上的 Dask、RAPIDS 库以及所有其他依赖项。

#!/bin/bash
set -e

# Install RAPIDS (cudf & dask-cudf) and dask-databricks
/databricks/python/bin/pip install       --extra-index-url=https://pypi.nvidia.com \
      cudf-cu11 \
      dask[complete] \
      dask-cudf-cu11  \
      dask-cuda==24.04 \
      Dask-databricks

# Start Dask cluster with CUDA workers
dask databricks run –-cuda

接下来,通过 Databricks 笔记本,您可以快速将 Dask 客户端连接到 Spark 驱动程序节点上运行的调度器。

import dask_databricks

client = dask_databricks.get_client()

现在将任务提交到集群:

def inc(x):
    return x + 1

x = client.submit(inc, 10)
x.result() 

您可以访问 Dask 仪表板,使用 Databricks 的 driver-node 代理该链接,该链接可以在客户端中找到,也可以使用 client.dashboard_link

>>> print(client.dashboard_link)
https://dbc-dp-xxxx.cloud.databricks.com/driver-proxy/o/xxxx/xx-xxx-xxxx/8087/status

欲了解更全面的示例,请参阅在 Databricks 中使用 Dask RAPIDS 训练 XGBoost 的示例

总结 

RAPIDS 是一套开源的 GPU 加速 Python 库,其 API 设计看起来和感觉都像是最流行的开源数据科学工具。本文将介绍一些方法,以帮助您在 Databricks 上使用 RAPIDS 统一且易于使用的分析平台来加速您的分析工作负载:

  • 我们很高兴地与您共享另一个多节点数据处理选项,即 Dask,以及擅长扩展非 SQL 工作负载的 Databricks 上的 RAPID。特别是,Dask 现在支持集成在 Databricks 中现有的 Spark 集群上。
  • 不同的安装选项(cudf.pandans、Spark 或 Dask)使 RAPIDS 能够很容易地适应您在 Databricks 平台上的特定需求。

随着数据科学家从使用传统分析转向利用人工智能应用程序,传统的基于 CPU 的处理无法在不影响速度或成本的情况下跟上。对大数据分析的需求不断增长,这就需要一种新的框架来使用 GPU 快速处理数据。

因此,Databricks 是一个有利的选择,可以轻松地将 GPU 加速无缝集成到您使用 pandas 和其他库的日常工作中。

无论您是否利用 cudf.pandas 进行高效的数据操作,或者使用 Apache Spark 或 Dask 实现并行计算,Databricks 都提供了一个用户友好的环境,使您能够充分利用 GPU 功能来增强现有的 RAPIDS 工作流,从而解锁新的性能和效率水平。

要开始在 Databricks 上使用 RAPIDS

 

Tags