Prhub

#6730 [docker] feat: bump stable trtllm image to 1.3.0rc15

原始 PR 作者 Superjomn 合并时间 2026-06-16 09:28 文件变更 3 提交数 2 评论 2 代码增减 +57 / -7

执行摘要

升级 TRTLLM 基础镜像至 1.3.0rc15,迁移依赖至 PyPI 并固化加速器补丁

升级 TensorRT-LLM 基础镜像到较新版本(1.3.0rc15),以获得最新的 TRTLLM 功能和修复。将 Megatron-LM 从 git 安装迁移到 PyPI 固定版本,可以提高依赖管理的可靠性和构建可复现性。将 accelerate 补丁固化到镜像中,可以避免在 Ray 节点启动时重复打补丁,简化部署流程。

强烈建议修复 transformers==5.3.0 版本问题,将其改为有效的 4.x 版本(如 4.43.0 或当前最新稳定版),否则构建必然失败。路径硬编码问题也可一并优化,提升健壮性。除此之外,PR 的依赖迁移和补丁固化方向值得推荐,可减少运行时动态 patch 的开销和失败风险。

讨论亮点

Review 中存在两个关键评论,均来自 gemini-code-assist[bot]:

  • Critical: transformers==5.3.0 在 PyPI 上不存在(目前 transformers 仍处于 4.x 系列),会导致 Docker 构建失败。
  • High: 内联补丁脚本中 /usr/local/lib/python3.12/dist-packages/ 路径被硬编码,建议使用 import accelerate; Path(accelerate.__file__).parent 动态解析,以兼容未来 Python 版本变更。
    这两个问题在本 PR 中未被修复(未看到后续提交或评论回复),但 PR 最终被 wuxibin89 批准合并。

实现拆解

  1. 基础镜像版本升级:在 docker/Dockerfile.stable.trtllm 中将 ARG TRTLLM_BASE_IMAGE 从 release:1.3.0rc14 改为 release:1.3.0rc15。
  2. 依赖管理迁移:将原 pip install git+https://github.com/NVIDIA/Megatron-LM.git@core_v0.16.0 拆分为三个独立的 PyPI 包(megatron-core==0.17.0、megatron-bridge==0.4.1、nvidia-resiliency-ext==0.6.0),并固定 transformers==5.3.0,新增 annotated-doc 依赖。
  3. 固化 accelerate 补丁:在 Dockerfile 末尾新增一个 RUN python3 - <<'PY' 内联脚本,该脚本对 accelerate/utils/__init__.py 和 accelerate/utils/other.py 执行两个 idempotent 文本替换(懒加载 bnb、numpy multiarray 查找),并要求目标文本必须存在,否则构建失败。
  4. CI 镜像标签同步更新:修改 .github/workflows/e2e_fully_async_policy_trtllm.yml 和 .github/workflows/e2e_ppo_grpo_trainer_trtllm.yml 中的环境变量 IMAGE,将镜像标签从 trtllm1.3.0rc14 更新为 trtllm-1.3.0rc15。
文件 模块 状态 重要度
docker/Dockerfile.stable.trtllm Docker 构建 modified 6.11
.github/workflows/e2e_fully_async_policy_trtllm.yml CI 工作流 modified 2.55
.github/workflows/e2e_ppo_grpo_trainer_trtllm.yml CI 工作流 modified 2.55

关键源码片段

docker/Dockerfile.stable.trtllm infrastructure

核心变更文件,包含基础镜像升级、依赖迁移和内联补丁脚本,影响所有基于此镜像的构建和部署。

# 基础镜像版本升级:从 1.3.0rc14 升级到 1.3.0rc15
ARG TRTLLM_BASE_IMAGE=nvcr.io/nvidia/tensorrt-llm/release:1.3.0rc15
FROM ${TRTLLM_BASE_IMAGE}
​
# 安装 Python 依赖
RUN pip3 install --no-cache-dir --no-deps trl==0.27.0 && \
    # 固定 transformers 版本(注意:5.3.0 尚不存在,可能是笔误)
    pip3 install --no-cache-dir transformers==5.3.0 && \
    pip3 install --no-cache-dir nvtx matplotlib liger_kernel cachetools annotated-doc && \
    pip3 install --no-cache-dir cupy-cuda12x==14.0.1 && \
    pip install --no-cache-dir -U git+https://github.com/ISEEKYAN/mbridge.git@641a5a0 && \
    # 将 Megatron-LM git 安装替换为 PyPI 固定版本包
    pip install --no-deps --no-cache-dir megatron-core==0.17.0 && \
    pip install --no-deps --no-cache-dir megatron-bridge==0.4.1 && \
    pip install --no-deps --no-cache-dir nvidia-resiliency-ext==0.6.0
​
# 固化 accelerate 补丁(幂等,目标文本不存在则构建失败)
RUN python3 - <<'PY'
from pathlib import Path
​
# (a) 在 accelerate/utils/__init__.py 中实现 bnb 懒加载
path = Path("/usr/local/lib/python3.12/dist-packages/accelerate/utils/__init__.py")
text = path.read_text()
old = "from .bnb import has_4bit_bnb_layers, load_and_quantize_model\n"
new = (
    "def has_4bit_bnb_layers(*args, **kwargs):\n"
    " from .bnb import has_4bit_bnb_layers as _has_4bit_bnb_layers\n"
    " return _has_4bit_bnb_layers(*args, **kwargs)\n\n\n"
    "def load_and_quantize_model(*args, **kwargs):\n"
    " from .bnb import load_and_quantize_model as _load_and_quantize_model\n"
    " return _load_and_quantize_model(*args, **kwargs)\n"
)
if old in text:
    path.write_text(text.replace(old, new, 1))
    print("Patched accelerate.utils bnb lazy imports")
elif "def load_and_quantize_model(*args, **kwargs):" in text:
    print("accelerate.utils bnb lazy import patch already present")
else:
    # 如果目标文本不存在,报错终止构建
    raise RuntimeError("accelerate.utils bnb import patch target not found")
​
# (b) numpy multiarray 查找补丁(代码略,逻辑类似)
other_path = Path("/usr/local/lib/python3.12/dist-packages/accelerate/utils/other.py")
text = other_path.read_text()
...
PY

评论区精华

transformers 版本不存在 正确性

gemini-code-assist[bot] 指出 transformers==5.3.0 在 PyPI 上不存在(目前 transformers 仍处于 4.x 系列),会导致 Docker 构建失败。

结论:未被修复,PR 仍被批准合并,存在构建失败风险。 · unresolved

补丁脚本路径硬编码 设计

gemini-code-assist[bot] 建议使用 `import accelerate` 动态解析路径,而不是硬编码 `/usr/local/lib/python3.12/dist-packages/`,以兼容 Python 版本升级。

结论:未被采纳,PR 仍被批准合并。 · unresolved

风险与影响

  1. 版本不存在风险(高): transformers==5.3.0 未发布,将导致 Docker 构建失败。该问题已被 reviewer 指出但未修复,若在 CI 中执行构建则会直接失败。
  2. 路径硬编码风险(中): 补丁脚本硬编码了 Python 3.12 的路径,未来基础镜像升级 Python 版本时补丁会失效。
  3. 依赖兼容性风险(低): 迁移 Megatron-LM 从特定 git commit 到 PyPI 版本,可能导致 API 细微差异,但测试通过可缓解。
  4. 补丁正确性风险(低): 补丁是文本替换,如果 accelerate 代码结构在未来版本中变化,补丁可能错误匹配或失效。

影响范围: 主要是基础设施和 CI 流程。影响所有使用 stable.trtllm 镜像的开发者、CI 构建和部署环境。
影响程度: 中等。镜像更新会提升 TRTLLM 版本和依赖管理一致性;但 transformers 版本问题可能导致构建失败,阻碍正常开发流程。
用户影响: 直接使用的团队需要拉取新镜像,CI 工作流会自动使用新标签。

版本不存在 路径硬编码 依赖兼容风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论