新闻中心

利用 RAPIDS 与 Ray 构建可扩展的 GPU 数据分析流程 NEWS DETAIL

当前位置:首页 > 新闻中心
资讯分类 · 新闻中心 作者 · 中科新远内容团队 审核人 · 中科新远技术内容组 发布时间 · 2025-01-06 更新时间 · 2026-07-22 来源 · 原页面资料;原厂信息待核验
利用 RAPIDS 与 Ray 构建可扩展的 GPU 数据分析流程

对于需要把 Python 分析流程扩展到多 GPU 或多节点的团队,Ray 可作为任务与资源调度层,RAPIDS 则提供 GPU 加速的数据处理、机器学习和图分析能力。根据本文所述方案,Ray Actors 可为每个 GPU 保持独立状态并加载数据,复杂的多 GPU 算法则可通过 NCCL、RAFT 与 RAPIDS 库中的底层实现完成通信和计算。该路径适合评估高并发数据加载、ETL 处理及分布式图算法,但不能仅凭示例代码判断实际吞吐量、兼容性或部署规模。

适用场景与问题边界

当单机单 GPU 已难以容纳数据、处理时间难以满足任务窗口,或分析流程本身需要并行执行时,可以考虑将 Ray 与 RAPIDS 组合。RAPIDS 是开源的 GPU 加速数据科学与 AI 库,可通过 Spark、Dask 等分布式引擎进行横向扩展;Ray 是开源分布式 Python 框架,常用于扩展 AI 和机器学习训练、推理及相关工作流。

本文聚焦的集成方式并非把所有计算都交由 Ray 实现。Ray 更适合作为 Python 层的执行与资源编排接口,RAPIDS 库及其 CUDA C++ 实现承担特定 GPU 数据处理或算法计算。对于需要跨 GPU 协同的图算法或聚类等任务,还要处理通信器、进程排名、显存分配和数据分片等问题。

推荐的架构路径

基础架构可由 Ray 集群、每 GPU 一个 Actor、RAPIDS 数据库与分布式通信组件构成。Actor 是有状态的 worker,可在其生命周期内存储、管理和修改数据。因此,一个绑定单个 GPU 的 Actor 可以使用 cuDF 读取 Parquet 数据,并在 GPU 显存中保留后续计算所需的数据对象。

  • Ray Actors 创建与 GPU 数量对应的工作池,并为 Actor 声明 GPU 资源需求。
  • 在 Actor 内使用 cuDF 读取数据,按列或按数据分片执行过滤、自定义函数或 ETL 逻辑。
  • 需要分布式算法时,为各 Actor 建立 NCCL 通信,并使用 RAFT 的相关接口配置通信与算法运行环境。
  • 将本地数据分片及通信句柄交给多 GPU 图对象或其他 RAPIDS 算法实现,再由 Ray 协调任务启动与结果回收。

这种分层有助于区分职责:Ray 负责 Actor 生命周期、资源分配和跨节点扩展;RAPIDS 负责数据帧、机器学习或图计算;NCCL 与 RAFT 则服务于需要 GPU 间协作的底层通信和原语。

以弱连接组件为例的实施要点

cuGraph 的弱连接组件(WCC)可用于说明这一模式。其执行前提包括:将边数据载入 GPU 显存、建立 NCCL 通信和 cuGraph 子通信器、配置内部多 GPU cuGraph 实现,最后执行 WCC。边列表中的源节点、目标节点和权重等数组需要以算法所需方式传入多 GPU 图对象。

  1. 确定数据如何切分,使每个 Actor 负责一个可独立加载的数据块。
  2. 为每个 Actor 分配唯一索引,并指定根 Actor 或 rank 0,用于分发通信初始化所需的唯一标识。
  3. 在各 Actor 内完成 NCCL 初始化,并将通信信息配置至 RAFT 句柄。
  4. 基于本地边数组和通信句柄实例化多 GPU 图对象,执行弱连接组件计算。
  5. 检查分片、结果聚合和失败重试逻辑,确认它们与业务数据一致性要求相符。

文中指出,NCCL 与 RAFT 的配置占据了该类集成的大部分工作。Ray 提供 NCCL hook,但当 cuGraph 的通信管理较复杂时,仍可能需要依赖 RAFT NCCL 接口完成控制。相同思路也可用于其他依赖 RAFT 原语的 RAPIDS 库,例如文中提及的 cuML k-means 实现。

部署评估与风险控制

建议先从单节点、少量 Actor 的原型开始,确认数据读入、显存占用、Actor 状态管理和结果正确性,再增加 GPU 数量或扩展至多节点。Ray Actor 中长期保留数据可以减少重复加载,但也意味着需要明确显存生命周期、异常恢复后是否重新加载,以及多个任务是否会争用同一 GPU。

评估项应确认的内容
资源映射Actor 数量、num_gpus 设置与实际 GPU 资源是否一一对应。
数据分片各分片是否完整覆盖输入数据,边界数据和结果聚合是否正确。
通信初始化NCCL 根节点标识、rank 分配、RAFT 句柄及子通信器是否在所有参与者中一致。
内存管理是否需要结合 RMM 配置显存分配,以及峰值显存是否符合项目约束。
算法适配目标 RAPIDS 版本、cuGraph 或 cuML API、输入格式与集群环境是否匹配。

本文只展示了 Level 1 集成方向和经过省略的代码结构,未给出完整可运行工程、版本组合、硬件条件或性能测试结果。实际采用前,应查阅对应日期的 Ray、RAPIDS、cuGraph、RAFT 与 NCCL 官方文档,核对 API、依赖关系及支持矩阵,并以项目数据完成端到端验证。

常见问题

Ray Actors 在该方案中承担什么职责?

Actors 是有状态 worker,可绑定 GPU 并保存已加载的数据或通信状态。它们适合执行 cuDF 数据加载和分片处理,也可作为启动多 GPU RAPIDS 算法的控制单元;但分布式算法本身仍依赖 RAPIDS、NCCL 和 RAFT 的实现。

是否可以直接用 Ray 的 NCCL hook 运行 cuGraph WCC?

来源指出 Ray 具备 NCCL hook,但在 cuGraph 通信管理较复杂的情况下,示例依赖 RAFT NCCL 接口。是否可直接替换取决于所用版本、算法接口和部署环境,应通过官方文档与实际原型验证。

结论

Ray 与 RAPIDS 的组合可将 Python 层的分布式调度和 GPU 加速分析库连接起来:Ray Actors 管理 GPU 工作单元,cuDF 支持 GPU 数据加载与处理,NCCL、RAFT 和 cuGraph 支持需要跨 GPU 通信的算法。该方案的关键不只是增加 Actor 数量,而是验证数据分片、通信初始化、显存管理和目标算法接口在完整项目环境中的一致性。

围绕“利用 RAPIDS 与 Ray 构建可扩展的 GPU 数据分析流程”继续了解 NVIDIA 产品与网络方案