Ray 编译图 (beta)#

警告

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

随着大型语言模型 (LLM) 的普及,使用多 GPU 编程分布式系统变得至关重要。Ray Core API 促进了多 GPU 的使用,但存在一些局限性,例如:

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

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

Ray 编译图提供了类似 Ray Core 的 API,但具有以下优势:

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

  • **原生支持 GPU-GPU 通信**(使用 NCCL)。

例如,考虑以下 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 编译图可以执行各种优化,例如:

  • 预分配资源,从而减少系统开销。

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

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

  • 提高多节点性能。

用例#

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

  • 亚毫秒级的任务编排。

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

  • 异构或 MPMD(多程序多数据)执行。

更多资源#

目录#

请通过以下链接了解有关 Ray 编译图的更多详细信息。