Prhub

#23263 [ROCm] Uniform docker to support AMD AINIC, BRCM Thor2 IBGDA NIC for MoRI-EP

原始 PR 作者 kkHuang-amd 合并时间 2026-04-21 14:39 文件变更 4 提交数 4 评论 8 代码增减 +52 / -17

执行摘要

更新 AMD ROCm Docker 镜像以支持 Broadcom Thor2 NIC 驱动和自动检测。

PR body中明确说明:"In order to run mori-ep in Broadcom Thor2 nic cards.",即为了在Broadcom Thor2网络接口卡上运行MoRI-EP(可能指AMD的分布式训练技术),需在Docker环境中添加相应驱动支持。

建议精读以了解AMD平台Docker镜像中NIC驱动的集成设计和自动检测机制。关注docker/rocm.Dockerfile中的case语句如何统一管理多种NIC后端,这对于基础设施团队在类似场景下的设计有参考价值。

讨论亮点
  • 代码优化建议:gemini-code-assist[bot]指出Dockerfile中的sed/grep命令冗余,建议移除以简化构建;还建议合并apt-get更新和优化包管理。讨论结论是采纳这些优化,在后续提交中调整。
  • 版本确认和参数移除:HaiShaw评论确认AINIC_VERSION版本(从1.117.5更新为1.117.5-a-38),并强调移除--build-arg NIC_BACKEND=ainic参数,以支持NIC自动检测。这导致CI工作流相应修改。
  • 未解决疑虑:无显著未解决疑虑,所有讨论点均在提交中解决。

实现拆解

  1. 更新Dockerfile构建参数和注释:修改docker/rocm.Dockerfile头部,将SGL_BRANCH从v0.5.9更新为v0.5.10.post1,并添加关于NIC_BACKEND自动检测的注释,说明用户可通过运行时环境变量选择NIC类型。
  2. 添加Broadcom BNXT驱动安装逻辑:在Dockerfile的NIC_BACKEND case语句中新增bnxt分支,安装Broadcom官方驱动包(如broadcom-bnxt-dkms),并配置APT源和库路径。
  3. 移除CI工作流中的硬编码参数:修改三个.github/workflows/文件(release-docker-amd-nightly.yml、release-docker-amd-rocm720-nightly.yml、release-docker-amd.yml),删除--build-arg NIC_BACKEND=ainic参数,并添加注释说明支持自动检测。
  4. 优化Dockerfile构建过程:根据review建议,移除冗余的sed/grep命令(用于依赖版本锁定),合并多个apt-get update调用以优化镜像层,并使用ldconfig替代手动文件复制来管理库路径。
文件 模块 状态 重要度
docker/rocm.Dockerfile Docker 构建 modified 5.2
.github/workflows/release-docker-amd.yml CI 工作流 modified 2.88
.github/workflows/release-docker-amd-nightly.yml CI 工作流 modified 2.48
.github/workflows/release-docker-amd-rocm720-nightly.yml CI 工作流 modified 2.48

关键源码片段

docker/rocm.Dockerfile infrastructure

核心变更文件,添加了 Broadcom BNXT 驱动安装逻辑,更新构建参数和注释,并优化包管理命令。

# NIC 后端依赖 — Mori 运行时自动检测 NIC(可通过 MORI_DEVICE_NIC 环境变量覆盖)。
# 这里仅安装供应商包以供 dlopen(如 libionic.so);无需编译时标志。
case "${NIC_BACKEND}" in
    # 默认:安装ainic和bxnt驱动
    none)
        apt-get update && apt-get install -y --no-install-recommends gnupg apt-transport-https \
        && install -m 0755 -d /etc/apt/keyrings \
        && curl -fsSL https://packages.broadcom.com/artifactory/api/security/keypair/PackagesKey/public -o /etc/apt/keyrings/broadcom-bnxt.asc \
        && echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/broadcom-bnxt.asc] https://packages.broadcom.com/artifactory/rpm/ubuntu focal main" > /etc/apt/sources.list.d/broadcom-bnxt.list \
        && apt-get update \
        && apt-get install -y --no-install-recommends broadcom-bnxt-dkms \
        && ldconfig # 使用ldconfig更新库路径,替代手动复制文件
        ;;
    ainic)
        echo "[MORI] Enabling AMD AINIC backend";
        # 安装AINIC驱动的具体逻辑...
        ;;
    bnxt)
        echo "[MORI] Enabling Broadcom BNXT backend";
        # 安装Broadcom驱动,逻辑与none分支类似但针对bnxt优化
        ;;
esac

评论区精华

Dockerfile 代码优化建议 设计

gemini-code-assist[bot] 指出 sed/grep 命令冗余,建议移除以简化构建,并优化 apt-get 更新和库路径管理。

结论:采纳建议,在提交中移除了冗余命令并优化了包管理逻辑。 · 已解决

AINIC_VERSION 确认 正确性

HaiShaw 评论询问 "Confirm this version?",指 AINIC_VERSION 从 1.117.5 更新为 1.117.5-a-38。

结论:版本已确认并更新,确保驱动版本正确性。 · 已解决

移除 NIC_BACKEND 参数 设计

HaiShaw 要求移除 --build-arg NIC_BACKEND=ainic,以支持 NIC 自动检测,避免硬编码。

结论:移除了该参数,并在 Dockerfile 和 CI 工作流中添加了自动检测支持。 · 已解决

风险与影响

  • 依赖包管理风险docker/rocm.Dockerfile中添加了外部APT源(如Broadcom仓库),可能导致构建失败或依赖冲突,尤其是在网络或仓库不可用时。
  • Docker镜像大小增加:安装额外驱动包(如broadcom-bnxt-dkms)会增大镜像体积,影响存储和拉取速度。
  • 跨平台兼容性:修改主要针对AMD平台,若在其他架构(如Intel或NPU)上误用,可能导致运行时错误。
  • 用户影响:AMD平台用户现在可以使用Broadcom Thor2 NIC进行MoRI-EP分布式训练,提升了硬件兼容性和灵活性。
  • 系统影响:Docker镜像支持更多NIC类型,但镜像体积略有增加;CI/CD流程微调,确保构建时自动检测NIC,减少了配置复杂性。
  • 团队影响:开发者和运维人员需了解新的NIC自动检测机制,可能需要更新部署文档或脚本。
依赖包管理风险 Docker 镜像大小增加 跨平台兼容性

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论