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