Ray 编译图 (beta)#

警告

Ray 编译图目前处于 beta 阶段(自 Ray 2.44 版本起)。API 可能会发生变化,并预计会不断演进。该 API 从 Ray 2.32 版本开始可用,但建议使用 2.44 之后的版本。

随着大型语言模型 (LLMs) 的普及,使用多 GPU 编程分布式系统变得至关重要。Ray Core API 虽然可以方便地使用多 GPU,但也存在一些限制,例如

  • 每次任务启动约 1 毫秒的系统开销,这不适合像 LLM 推理这样的高性能任务。

  • 缺乏对直接 GPU 到 GPU 通信的支持,需要使用 NVIDIA Collective Communications Library (NCCL) 等外部库进行手动开发。

Ray 编译图提供了一个类似 Ray Core 的 API,但具有

  • 对于重复执行相同任务图的工作负载,系统开销小于 50 微秒

  • 原生支持 NCCL 进行 GPU-GPU 通信

例如,考虑以下 Ray Core 代码,它将数据发送到 actor 并获取结果

# Ray Core API for remote execution.
# ~1ms overhead to invoke `recv`.
ref = receiver.recv.remote(data)
ray.get(ref)

此代码展示了如何将同一示例编译并执行为编译图。

# Compiled Graph for remote execution.
# less than 50us overhead to invoke `recv` (during `graph.execute(data)`).
with InputNode() as inp:
    graph = receiver.recv.bind(inp)

graph = graph.experimental_compile()
ref = graph.execute(data)
ray.get(ref)

Ray 编译图具有静态执行模型。它与经典的 Ray API 不同,经典 Ray API 是即时执行的。由于这种静态特性,Ray 编译图可以执行各种优化,例如

  • 预分配资源以减少系统开销。

  • 准备 NCCL 通信器并应用无死锁调度。

  • (实验性) 自动重叠 GPU 计算和通信。

  • 提高多节点性能。

用例#

Ray 编译图 API 简化了高性能多 GPU 工作负载(例如 LLM 推理或分布式训练)的开发,这些工作负载需要

  • 亚毫秒级的任务编排。

  • 直接的 GPU-GPU 对等或集体通信。

  • 异构 或 MPMD (Multiple Program Multiple Data) 执行。

更多资源#

目录#

从以下链接了解 Ray 编译图的更多详情。