执行摘要
- 一句话:ROCm Docker构建新增MoRI NIC后端支持
- 推荐动作:
- 对于使用AMD NIC的ROCm用户,此PR提供了清晰的构建方式,值得采用。
- 对于vLLM基础镜像维护者,值得关注这种多阶段构建分离模式,在延长底层镜像生命周期和增加应用层灵活性之间做了良好平衡。
- 建议后续添加对其他NIC后端(如Broadcom BNXT)的支持时采用类似模式。
功能与动机
升级MoRI到v1.1.0以支持运行时自动检测NIC后端,并允许用户在构建时通过NIC_BACKEND参数(如ainic)安装对应NIC驱动包,满足AMD Pensando NIC部署需求。参考SGLang的Docker实现,保持构建灵活性和基础镜像稳定性。
实现拆解
-
在Dockerfile.rocm_base中,将MORI_BRANCH从固定SHA升级到v1.1.0,移除之前的USE_IONIC等编译标志,因为新版MoRI通过运行时环境变量自动检测NIC。
-
在Dockerfile.rocm顶部新增构建参数NIC_BACKEND(默认none)、AINIC_VERSION和UBUNTU_CODENAME。
-
新增mori_base构建阶段,安装MoriIO代理Python依赖(blinker, quart, msgpack, aiohttp, pyzmq),并通过case语句根据NIC_BACKEND值执行不同操作:
none:跳过NIC驱动安装。
ainic:添加AMD AINIC仓库,安装libionic-dev和ionic-common。
- 其他值:报错退出。
-
将test和final阶段的基础镜像从base改为mori_base,确保这两个阶段包含MORI运行时和依赖。
-
在最终镜像中,向/app/versions.txt追加MORI_NIC_BACKEND和AINIC_VERSION信息。
测试:通过docker build测试默认和ainic两种场景,验证构建成功和版本文件内容。
关键文件:
docker/Dockerfile.rocm(模块 构建脚本;类别 infra;类型 infrastructure): 核心变更文件:新增mori_base构建阶段,通过NIC_BACKEND参数条件安装NIC驱动和代理依赖;将test和final阶段基础镜像改为mori_base,确保运行时包含MORI。
docker/Dockerfile.rocm_base(模块 构建脚本;类别 infra;类型 configuration): 升级MORI分支到v1.1.0,移除了之前用于指定NIC的编译标志(USE_IONIC等),依赖运行时自动检测。这是基础镜像的唯一变更,影响所有ROCm镜像。
关键符号:未识别
关键源码片段
docker/Dockerfile.rocm
核心变更文件:新增mori_base构建阶段,通过NIC_BACKEND参数条件安装NIC驱动和代理依赖;将test和final阶段基础镜像改为mori_base,确保运行时包含MORI。
FROM base AS mori_base
ARG NIC_BACKEND
ARG AINIC_VERSION
ARG UBUNTU_CODENAME
RUN /bin/bash -lc 'set -euo pipefail; \
echo "[MORI] Install MoRI proxy deps"; \
# 安装 MoriIO 代理所需 Python 包,用于分离式 / KV 工作流
pip install --quiet --ignore-installed blinker && \
pip install --quiet quart msgpack aiohttp pyzmq; \
echo "[MORI] NIC_BACKEND=${NIC_BACKEND}"; \
case "${NIC_BACKEND}" in \
none) \
# 默认:不安装 NIC 驱动,使用 mlx5
;; \
ainic) \
# AMD AINIC:添加官方仓库并安装驱动与开发包
apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl gnupg apt-transport-https && \
rm -rf /var/lib/apt/lists/* && mkdir -p /etc/apt/keyrings; \
curl -fsSL https://repo.radeon.com/rocm/rocm.gpg.key | gpg --dearmor > /etc/apt/keyrings/amdainic.gpg; \
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/amdainic.gpg] https://repo.radeon.com/amdainic/pensando/ubuntu/${AINIC_VERSION} ${UBUNTU_CODENAME} main" \
> /etc/apt/sources.list.d/amdainic.list; \
apt-get update && apt-get install -y --no-install-recommends \
libionic-dev \
ionic-common \
; \
rm -rf /var/lib/apt/lists/*; \
;; \
*) \
echo "ERROR: unknown NIC_BACKEND=${NIC_BACKEND}. Use one of: none, ainic"; \
exit 2; \
;; \
esac;'
# 后续 test 和 final 阶段从 mori_base 继承,确保运行时包含 MORI
FROM mori_base AS test
...
FROM mori_base AS final
评论区精华
风险与影响
关联脉络
参与讨论