vLLM/SGLang/TRT-LLM在verl中的抽象机制解析
rollout backend 抽象层
图中第一层是配置:在 `rollout.yaml` 中,`name` 可选 `hf/vllm/sglang/trtllm`,`mode` 默认采用异步模式(async),后面还包含各个后端专属的 `engine_kwargs.vllm/sglang/trtllm`(详见 `verl/trainer/config/rollout/rollout.yaml:1-8` 以及 `verl/trainer/config/rollout/rollout.yaml:130-140`)。配置并非细节——它决定了 trainer 随后会进入哪条 server 适配路径。
### 1. `BaseRollout` 定义的是最小契约
`BaseRollout` 的接口非常精简:`resume(tags)`、`update_weights(weights, **kwargs)`、`release()`,以及同步模式的 `generate_sequences(prompts)`(见 `verl/workers/rollout/base.py:29-80`)。异步模式的 backend registry 则将 `("vllm", "async")`、`("sglang", "async")`、`("trtllm", "async")` 分别映射到对应的 `ServerAdapter`(`verl/workers/rollout/base.py:83-104`)。
这说明 verl 的抽象目标并不是消除所有后端的行为差异,而是让 trainer 能够稳定地表达:“我需要一个 rollout 角色,它能够恢复状态、接收权重、释放资源并生成序列。”至于该角色背后是 vLLM、SGLang 还是 TRT-LLM,则由 server manager 和 replica 负责处理。
`LLMServerManager` 会根据 `rollout_config.name` 和分离部署(disaggregation)配置解析 replica class,计算每个 replica 的 world size 和 replica 数量,随后在混合部署(hybrid)、TRT-LLM 共置(colocated)或独立部署(standalone)三种路径下初始化 server,并创建全局负载均衡器(见 `verl/workers/rollout/llm_server.py:222-340`)。`RolloutReplicaRegistry` 则将 `vllm`、`sglang`、`trtllm` 注册到具体的 replica loader;如果 SGLang 启用了 PD 分离,则会进入 `SGLangPDReplica` 分支(`verl/workers/rollout/replica.py:302-402`)。
### 2. 共同的 generate 契约长什么样
下面这张图将 backend adapter 的共同输入输出压缩在一起。看图时请注意:共同点并非“调用同一个库”,而是都必须从 prompt ids、sampling params、多模态输入和 request id 出发,最终返回 token ids、logprobs、stop reason 等 RL 可消费的字段。
共同的 generate 契约
三条后端路径都呈现出类似的形态。vLLM server 的 `generate()` 接收 `prompt_ids`、`sampling_params`、`request_id`、image/video/audio 以及 processor kwargs,计算 `max_tokens`,构造 vLLM 的 `SamplingParams` 和 `TokensPrompt`,再调用推理引擎生成(`verl/workers/rollout/vllm_rollout/vllm_async_server.py:447-535`)。SGLang server 的 `generate()` 接收相似输入,将 `max_tokens/max_new_tokens` 转换为 SGLang 请求,构造 `GenerateReqInput`,通过 tokenizer manager 发起生成(`verl/workers/rollout/sglang_rollout/async_sglang_server.py:496-606`)。TRT-LLM server 也接收同样类别的输入,构造 TensorRT-LLM 的 `SamplingParams`,然后调用 `llm.generate_async()`(`verl/workers/rollout/trtllm_rollout/trtllm_async_server.py:313-382`)。
由此可见,抽象的核心收益是让上层的 RL 流水线获得稳定的 token output,而无需在 trainer 中到处编写 vLLM/SGLang/TRT-LLM 的分支逻辑。
### 3. 这层抽象在哪里会变薄
下面这张图列出了后端差异会泄漏的地方,与上一张图互为补充:上一张图展示了共同契约,而本图则说明为何不能将共同契约误读为“所有 backend 完全等价”。
后端差异泄漏地图
vLLM 路径使用 `max_tokens`,但也兼容 SGLang 风格的 `max_new_tokens`;它会将 `logprobs` 映射到 vLLM 的 `SamplingParams`,并通过 `TokensPrompt` 组织多模态输入和可选的 LoRA request(`verl/workers/rollout/vllm_rollout/vllm_async_server.py:461-526`)。
SGLang 路径默认采用 `max_new_tokens`,同时兼容 vLLM 风格的 `max_tokens`;它包含 PD 分离分支,prefill 侧会创建 bootstrap room,并同时执行本地 prefill 和远端 decode;此外还会处理 prompt logprobs 和 routing replay(`verl/workers/rollout/sglang_rollout/async_sglang_server.py:507-606`)。
TRT-LLM 路径将 `top_k == -1` 转换为 0,logprobs 在 torch sampler 和 TRTLLM sampler 下的映射方式不同;在 VLM 场景中,会构造包含 `multi_modal_data` 的 input dict,但目前对于 audio 直接抛出 `NotImplementedError`(`verl/workers/rollout/trtllm_rollout/trtllm_async_server.py:325-382`)。
这些差异并非抽象的失败,而是抽象边界真实含义的体现:trainer 不需要了解每个后端的 API 细节,但系统工程师在进行性能调优、错误排查、logprobs 处理或涉及多模态/PD 分离时,必须清楚差异发生在哪一层。
### 4. backend 抽象还包括生命周期
rollout backend 不仅要负责生成,还需要处理训练与推理之间的状态切换。下面这张图将部署模式(placement mode)、生命周期 API 以及权重路径综合在一起。
rollout 生命周期与权重同步契约
`RolloutMode` 将部署模式分为 hybrid、colocated 和 standalone:hybrid 表示 rollout 引擎与训练引擎共享 GPU,并通过权重同步切换上下文;colocated 表示在同一 placement group 中的独立进程;standalone 表示使用单独的 GPU 资源,常用于解耦或 off-policy 场景(`verl/workers/rollout/replica.py:54-68`)。
replica 层提供了 `wake_up()`、`sleep()`、`clear_kv_cache()`、`release_kv_cache()`、`resume_kv_cache()` 等控制方法(`verl/workers/rollout/replica.py:245-299`)。worker 层的 `update_weights()` 进一步决定同步方式:naive 路径从 actor engine 获取 per tensor params 并调用 rollout 的 `update_weights()`;非 naive 路径则交由 checkpoint engine 的 `send_weights()` 处理(`verl/workers/engine_workers.py:663-740`)。
这表明 backend abstraction 的最后一层并非 generate API,而是训练推理状态机。只有权重、KV cache 和 server 生命周期全部衔接起来,rollout 才能成为训练系统的有效组成部分。
### 小结:backend 抽象是稳定契约,而非消除差异
本文从配置、接口、server manager、replica、adapter 和生命周期这五个层次剖析了 rollout backend。可以将其压缩为一句话:
rollout.name 选择后端 -> registry 找到 adapter / replica -> manager 启动 server 并分发请求 -> backend generate 返回 TokenOutput -> lifecycle / weight sync 保证下一轮 rollout 使用正确状态
读完本篇后,读者应该能理解:verl 的 trainer 不直接编写 vLLM/SGLang/TRT-LLM 分支,目的是保持 RL 流水线的稳定性;但具体后端差异仍然会影响 token budget、多模态能力、logprobs、PD 分离、显存状态以及权重同步。下一篇将继续推进到 KV cache、sleep/resume 以及显存复用。
### 本文源码索引
- `verl/trainer/config/rollout/rollout.yaml:1-8`:rollout backend 名称和异步模式配置。
- `verl/trainer/config/rollout/rollout.yaml:130-140`:vLLM、SGLang、TRT-LLM 的 backend kwargs。
- `verl/workers/rollout/base.py:29-104`:`BaseRollout` 接口和异步 backend registry。
- `verl/workers/rollout/llm_server.py:222-340`:`LLMServerManager` 的 replica 创建与负载均衡器初始化。
- `verl/workers/rollout/replica.py:54-68`:hybrid、colocated、standalone 三种 rollout mode。
- `verl/workers/rollout/replica.py:245-299`:replica 生命周期控制方法。
- `verl/workers/rollout/replica.py:302-402`:rollout replica registry 与 SGLang PD 分支。
- `verl/workers/rollout/vllm_rollout/vllm_async_server.py:447-535`:vLLM async server 的 generate 适配。
- `verl/workers/rollout/sglang_rollout/async_sglang_server.py:496-606`:SGLang async server 的 generate 适配与 PD 分支。
- `verl/workers/rollout/trtllm_rollout/trtllm_async_server.py:313-382`:TRT-LLM async server 的 generate 适配。
- `verl/workers/engine_workers.py:663-740`:训练权重同步到 rollout 的路径。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
大模型API连续对话交互:上下文持久化与Token节流实践
一、引言 现在的大模型应用落地上,光靠单次独立问答已经远远不够用了。无论是办公协同的智能体、行业咨询机器人、专属业务问答系统,还是私有化部署的大模型,都得能支撑连续多轮对话、跨会话二次访问、长周期上下文关联问答这些核心能力。 在实际对话中,大家都会碰到一些共性问题:第一轮提问回复正常,第二轮就完全没
代驾系统搭建方案:订单调度与司机匹配机制
在城市夜生活日益丰富的当下,代驾早已超越“酒后找人代开”的单一场景,逐步演变为高频、即时、强时效的本地生活服务。无论是商务应酬后的返程,还是临时需要安全送车回家,用户最核心的诉求始终围绕三点:能否快速响应、司机是否靠谱、整个流程是否稳定。对于系统开发者而言,代驾平台搭建的难点恰恰也在于此——它并非简
独立开发者上云避坑:阿里云OPC节省两周配置时间
独立项目上云,说起来简单,做起来全是坑。一位拥有5年后端经验的开发者,三个月前启动了自己的“一人公司”——一个AI辅助写作SaaS,技术栈是Python Flask PostgreSQL React。本以为从本地迁移到云端就是几步操作的事,结果踩了一个又一个坑,硬生生折腾了好几周。以下是他踩坑后的复
阿里云DNS个人版19.9元/年 公网权威解析功能安全与续费说明
许多用户最近都在咨询阿里云云解析DNS个人版的价格与续费问题,这里统一整理关键信息。个人版当前新用户优惠价仅为19 9元 年,但该优惠仅限首次购买,原价实际为48元 年。因此续费时若无额外折扣,将按48元 年计费。简单来说,首年19 9元即可入手,第二年恢复原价。0 云解析DNS个人版费用阿里云云
阿里云Qwen3.7-Max深度测评:极致推理与企业级部署落地指南
Qwen3 7-Max是阿里云百炼平台最新推出的旗舰级大模型,也是Qwen3 7系列中规模最大、综合能力最强的“顶配选手”。目前开放的是纯文本模型能力,但别被这个限制误导——它面向智能体时代设计,在编程、办公生产力、长周期自主执行等场景下,表现相当能打。推理能力、多模态理解、复杂任务处理都有显著升级
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2026-07-07 15:44
2026-07-07 15:44
2026-07-07 15:44
2026-07-07 15:44
2026-07-07 15:44
2026-07-07 15:43
2026-07-07 15:43
2026-07-07 15:43
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

