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 编译图的更多详细信息。