Prhub

#6230 [rollout] fix: trtllm rollout docker image and a few scripts

原始 PR 作者 hchings 合并时间 2026-05-07 10:12 文件变更 5 提交数 5 评论 3 代码增减 +34 / -15

执行摘要

修复 TRTLLM rollout 的 Docker 镜像和 CI 脚本兼容性

根据PR描述,需要固定Ray版本以匹配TRTLLM 1.3.0rc13的兼容性要求;同时恢复在PR #6126重构示例时被丢掉的trtllm专用参数(batch_wait_timeout_iters、batch_wait_max_tokens_ratio),以确保GRPO脚本在TRTLLM后端下能正常工作。

该PR修复了紧急的兼容性问题,值得合并。但建议合并后:

  1. 验证Docker构建是否成功,确认cupy和ray版本可用;
  2. 检查batch_wait参数是否在TRTLLM服务端实现,若不生效则考虑移除或提交配套实现;
  3. 定期清理mbridge临时补丁。
讨论亮点

review中gemini-code-assist[bot]提出了三个问题:

  • cupy-cuda12x==14.0.1版本可能不存在(PyPI最新为13.3.0),可能导致Docker构建失败;
  • ray[default]==2.54.1不是有效发布版本,也会导致构建失败;
  • 新增的batch_wait_timeout_itersbatch_wait_max_tokens_ratio参数在TRTLLMHttpServer实现中未被传递到SchedulerConfig,因此实际上不会生效。

这些评论均未得到作者回复或解决,但PR最终被项目所有者wuxibin89批准合并。因此这些潜在问题可能已被线下处理或评估为可接受,存在一定风险。

实现拆解

  1. Docker构建调整:在docker/Dockerfile.stable.trtllm中新增cupy-cuda12x==14.0.1依赖,并在安装verl后强制重新安装ray[default]==2.54.1以与TRTLLM 1.3.0rc13兼容。

  2. CI镜像与工作流修复:更新e2e_ppo_grpo_trainer_trtllm.yml中的镜像标签为trtllm1.3.0rc13-20250504,并在两个核心测试步骤中添加mbridge临时补丁安装(pip install --force-reinstall --no-deps --no-build-isolation git+https://github.com/ISEEKYAN/mbridge.git)以规避CI镜像中Python 3.12移出imp模块的问题。

  3. 恢复VLM E2E测试:将原先被注释的GEO3K VLM测试重新启用,并添加了train_batch_size=8max_response_length=64等若干参数调优,使测试能在TRTLLM后端下运行。

  4. 补充TRTLLM专用脚本参数:在examples/grpo_trainer/run_qwen3_30b_a3b_megatron.shEXTRA数组中为TRTLLM模式新增batch_wait_timeout_iters=32batch_wait_max_tokens_ratio=0.5配置。

  5. 文档更新:在examples/grpo_trainer/README.md中将Qwen3-235B-A22B模型在TRTLLM支持列从空白标记为✓。

文件 模块 状态 重要度
.github/workflows/e2e_ppo_grpo_trainer_trtllm.yml 持续集成 modified 4.66
verl/workers/rollout/trtllm_rollout/trtllm_worker_extension.py 工作节点 modified 4.18
docker/Dockerfile.stable.trtllm 部署镜像 modified 3.76
examples/grpo_trainer/run_qwen3_30b_a3b_megatron.sh 训练示例 modified 2.94
examples/grpo_trainer/README.md 文档 modified 1.72

关键源码片段

verl/workers/rollout/trtllm_rollout/trtllm_worker_extension.py core-logic

修复 serialization approved_imports 遗漏 bfloat16,导致权重传输失败

# 在 update_weights 方法中使用的 approved_imports 字典
# 控制反序列化权重句柄时允许导入的类型,防止恶意 pickle
approved_imports = {
    "builtins": [
        "list", "tuple", "str", "int", "float", "bool", "bytes", "dict",
        "NoneType", "type",
    ],
    "torch": [
        "Tensor", "FloatTensor", "DoubleTensor", "HalfTensor", "BFloat16Tensor",
        "IntTensor", "LongTensor", "ShortTensor", "CharTensor", "ByteTensor",
        "BoolTensor", "Size", "dtype", "device",
        "float32", "float16",
        "bfloat16", # 新增:缺少此条目会导致反序列化 bf16 张量时抛出异常
        "int32", "int64", "int16", "int8", "uint8", "bool",
    ],
    "torch.multiprocessing.reductions": [
        "rebuild_cuda_tensor",
        "rebuild_tensor",
    ],
    "torch._utils": [
        "_rebuild_tensor_v2",
    ],
    "torch.storage": [
        "_load_from_bytes",
        "_TypedStorage",
        "UntypedStorage",
        "TypedStorage",
    ],
}
all_handles = serialization.loads(decoded_data, approved_imports=approved_imports)
docker/Dockerfile.stable.trtllm infrastructure

固定 Ray 版本并添加 cupy 依赖,确保与 TRTLLM 1.3.0rc13 兼容

# 安装 cupy-cuda12x ( 用于特定 GPU 加速内核 ) —— 注意:版本 14.0.1 需确保在私有源上存在
RUN pip3 install --no-cache-dir cupy-cuda12x==14.0.1 && \
    pip3 install --no-cache-dir nvtx matplotlib liger_kernel cachetools && \
    ...
​
# 在安装 verl 之后固定 Ray 版本以保持与 TRTLLM 1.3.0rc13 的兼容性
RUN pip install --no-cache-dir "ray[default]==2.54.1"

评论区精华

cupy/ray 版本可能无效 正确性

gemini-code-assist 指出 cupy-cuda12x==14.0.1 和 ray[default]==2.54.1 可能不是有效 PyPI 版本,会导致 Docker 构建失败。

结论:PR 作者未回复,但 PR 被批准合并,可能版本已验证为内部源或已解决。 · resolved (implicitly)

新增参数在服务端未实现 设计

gemini-code-assist 指出 batch_wait_timeout_iters 和 batch_wait_max_tokens_ratio 在 TRTLLMHttpServer 实现中未传递到 SchedulerConfig,因此参数不会生效。

结论:未解决参数生效问题,但合并后可能需后续实现。 · unresolved

风险与影响

主要风险:

  • Docker构建可能因cupy/ray版本无效而失败;
  • 新增的batch_wait参数在服务端未实现,实际运行时不会生效,可能导致用户错误地认为参数已生效;
  • CI工作流中增加了大量参数,可能与其他配置冲突;
  • mbridge补丁是临时方案,后续CI镜像更新后需移除。

影响范围:

  • 用户:使用TRTLLM rollout的用户将获得更新的Docker镜像和CI测试,但需验证参数是否生效。
  • 系统:Docker镜像版本固定,避免意外的版本冲突;CI测试覆盖恢复。
  • 团队:维护者需关注gemini提出的问题是否被实际解决,否则需后续修复。
潜在 Docker 构建失败 新增参数可能不生效 临时补丁后续需移除

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论