External Rollout Engines 配置路线图#
External rollout engine 指的是:SGLang engine 不由 slime 训练任务启动,而是由外部系统预先部署和管理;slime 只在训练时连接这些 engine,注册 router,并在需要时同步训练后的 actor 权重。
这篇文档是一个导航页。它帮助你判断什么时候该用 --rollout-external-engine-addrs,什么时候该继续使用 --sglang-config,以及 external 场景下该选择 full checkpoint update from disk 还是 delta update。
从哪里开始#
目标 |
推荐入口 |
|---|---|
engine 已经由外部系统启动,只想让 slime 连接并做 rollout |
|
engine 仍由 slime 启动,但需要 PD 分离、多模型、异构 server group 或 per-group overrides |
|
训练器和 external engine 可以建立 NCCL group |
默认的 |
训练器和 external engine 不能建立 NCCL group,但能共享同一路径的文件系统 |
|
大模型跨集群或跨数据中心同步,full checkpoint 太重 |
|
rollout serving 想使用独立 SGLang 环境,甚至不同型号或不同厂家的 GPU |
external engine + disk transport |
想验证 delta wire/apply 逻辑,但仍在同一数据中心内 |
|
需要 reference、reward、tool-side model 等冻结模型 |
优先用 SGLang Config 的 |
External Engine 做了什么#
使用 external engine 时,先独立启动 SGLang server:
python -m sglang.launch_server --model-path /path/to/model --port 10090 ...
python -m sglang.launch_server --model-path /path/to/model --port 10091 ...
训练任务里传入这些地址:
python train.py \
--rollout-external-engine-addrs host1:10090 host2:10091 \
...
slime 会请求每个 engine 的 /server_info 或 /get_server_info,推断 engine 的 GPU 数、TP/PP 信息和 worker 类型(regular、prefill、decode)。如果没有提供 --sglang-router-ip/--sglang-router-port,slime 会启动自己的 router,并把这些 external engine 注册进去。
这条路径适合 serving 生命周期由训练任务外部管理的部署:例如独立的推理集群、跨 Ray 集群部署、手工预热的 SGLang engine,或由其他编排系统管理的 rollout service。
与 --sglang-config 的关系#
--rollout-external-engine-addrs 和 --sglang-config 互斥,因为它们负责不同的边界:
--sglang-config:slime 负责 engine 生命周期。你用 YAML 描述 topology,slime 启动 server group、router,并管理多模型和选择性权重更新。--rollout-external-engine-addrs:外部系统负责 engine 生命周期。slime 只发现已启动的 engine,接入 router,并把它们当作默认 rollout model。
如果你的主要需求是多模型 serving、reference/reward 冻结模型、PD 分离或异构组配置,优先使用 --sglang-config。如果 engine 已经在训练任务外部部署好,再使用 external engine。
环境与硬件解耦#
External engine 的一个重要含义是:SGLang serving 侧不需要使用 slime 训练任务的 Python 环境、Megatron 环境或 Ray runtime。它可以运行在单独的 SGLang 容器、独立集群或其他编排系统里;slime 只依赖 HTTP endpoint、/server_info 信息,以及所选权重同步方式需要的通信路径。
当使用 disk transport 时,权重通过共享文件系统上的 HF checkpoint 或 safetensors delta 传递,再由 SGLang 通过 update_weights_from_disk 热加载。这条路径不要求训练 GPU 和 rollout GPU 是同一型号,甚至不要求是同一厂家;只要 SGLang 本身支持该硬件后端、模型格式和精度配置即可。例如训练可以在一组 GPU 上运行,rollout serving 可以放在另一组不同型号或不同厂家的 GPU 上。
如果使用 NCCL transport,则仍然需要满足 NCCL 通信和硬件兼容性要求。跨厂家、跨不兼容网络或跨数据中心部署通常应选择 --update-weight-transport disk。
Update From Disk#
full checkpoint update from disk 是 external 场景最简单的兜底路径:
--update-weight-mode full
--update-weight-transport disk
--update-weight-disk-dir /shared/fs/full-updates
每次权重同步时,训练端会在 --update-weight-disk-dir 下写一个完整 HF checkpoint 目录,例如 weight_v000123/,然后通过 HTTP 调用每个 SGLang engine 的 update_weights_from_disk,让 engine 在不重启进程的情况下重新加载 checkpoint。
这个模式的优点是控制面简单:不要求训练器和 engine 建 NCCL group,只要求二者能看到同一个共享文件系统路径。缺点也直接:每次同步都写完整 actor 权重,对大模型和高频同步来说非常重。
调试时可以加:
--update-weight-disk-keep-files
这样 slime 不会在 engine 确认加载后清理完整 checkpoint 目录,方便检查写出的 HF checkpoint。
Update With Delta#
delta update 面向大模型、跨集群或跨数据中心训推解耦。它不写完整 checkpoint,而是在训练端保留上一次同步后的 pinned CPU snapshot,逐字节检测变化,只发送变化位置和值。
跨集群 / 共享文件系统推荐:
--update-weight-mode delta
--update-weight-transport disk
--update-weight-encoding deltas_zstd
--update-weight-disk-dir /shared/fs/delta-updates
在 disk transport 下,每次同步会写一组稀疏 safetensors 到 weight_v{N:06d}/,然后调用 update_weights_from_disk(load_format="delta")。SGLang 侧只把变化位置覆写到当前权重上,不变位置保持原值。
在同一数据中心内做实现验证或带宽不紧张时,也可以用 NCCL transport:
--update-weight-mode delta
--update-weight-transport nccl
--update-weight-encoding indices
编码如何选择、delta wire layout、接收端 selective overwrite 以及调优参数见 Delta 权重同步。
部署检查清单#
external engine 的 HTTP 地址必须能从训练任务访问。
external engine 可以使用独立 SGLang 环境;不需要安装 slime 或 Megatron 训练环境。
disk transport 支持训练和 rollout 使用不同型号或不同厂家的 GPU,前提是 SGLang 支持对应硬件和模型格式。
disk transport 要求训练端和 SGLang engine 看到同一个
--update-weight-disk-dir路径;路径只在训练端可见是不够的。external engine 当前不支持 slime 的 fault tolerance 恢复流程;engine 生命周期由外部系统负责。
--sglang-config与--rollout-external-engine-addrs互斥。delta mode 不支持
--colocate,因为 colocated 权重同步通过 CUDA IPC 传句柄,delta 编码不会节省实际传输量。
参考工作#
Cursor Research Team 的 Composer 2 技术报告 公开描述了一个相近的生产形态:训练和 rollout generation 高度异步,Cursor 与 Fireworks AI 合作运行 RL inference;每个训练 step 都把更新后的权重写到共享 S3,并用 delta compression 降低传输量,不同区域的 inference 集群再从共享 delta chain 下载并重建权重。
slime 的 external engine、update from disk 和 delta disk transport 面向同一类基础设施问题:训练与推理解耦后,权重同步必须能跨进程、跨集群甚至跨数据中心工作,同时不能让训练主循环被完整模型传输拖住。