# PR #22870 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[AMD][MoRI] bump MoRI to v1.1.0
- 合并时间：2026-04-16 15:11
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/22870

---

# 执行摘要

- 一句话：将 AMD ROCm Docker 镜像中的 MoRI 依赖从 v0.1.0 升级至 v1.1.0。
- 推荐动作：该 PR 变更直接且范围小，适合快速浏览以了解 AMD 支持栈的依赖更新。值得关注的设计决策是 **从编译时配置转向运行时自动检测**，这体现了对部署灵活性的重视。建议结合 MoRI v1.1.0 的发布说明（PR body 中已链接）深入理解新特性。对于不直接使用 AMD ROCm 镜像的工程师，精读价值有限。

# 功能与动机

根据 PR body 的描述，升级 MoRI 至 v1.1.0 是为了引入新特性：torch-free pybind、主机 / 设备分离（实现安装时零 hipcc）以及运行时 NIC 自动检测。这旨在简化部署流程并提升运行时灵活性。引用自 PR body：“This release introduces torch-free pybind, host/device separation (zero hipcc at install time), and runtime NIC auto-detection.”

# 实现拆解

1. **更新 MoRI 版本号**：在 `docker/rocm.Dockerfile` 中，将 `ARG MORI_COMMIT` 的值从 `v0.1.0` 修改为 `v1.1.0`，这是升级的核心入口。
2. **移除编译时 NIC 配置**：由于 MoRI v1.1.0 支持运行时 NIC 自动检测，删除了 `USE_IONIC` 和 `USE_BNXT` 两个环境变量的导出语句。这些变量原本用于在编译时指定 NIC 后端，现在已不再需要。
3. **更新构建日志信息**：将构建日志中的输出信息从显示 `USE_IONIC` 和 `USE_BNXT` 的值，改为仅显示 `NIC_BACKEND`，以反映配置的简化。
4. **更新注释说明**：在 Dockerfile 中添加了关于 NIC 后端依赖的新注释，说明 MoRI 现在在运行时自动检测 NIC（可通过 `MORI_DEVICE_NIC` 环境变量覆盖），并且仅安装供应商包以供 dlopen 使用，无需编译时标志。
5. **无测试或配置配套改动**：本次变更仅涉及 Docker 构建文件，没有关联的源代码、测试、配置或部署脚本的配套修改。

关键文件：
- `docker/rocm.Dockerfile`（模块 部署脚本；类别 infra；类型 infrastructure；符号 MORI_COMMIT, USE_IONIC, USE_BNXT）: 这是本次 PR 唯一修改的文件，直接决定了 ROCm Docker 镜像中 MoRI 的版本和构建配置。

关键符号：未识别


## 关键源码片段

### `docker/rocm.Dockerfile`

这是本次 PR 唯一修改的文件，直接决定了 ROCm Docker 镜像中 MoRI 的版本和构建配置。

```dockerfile
# 定义 MoRI 版本参数
ARG MORI_REPO="https://github.com/ROCm/mori.git"
ARG MORI_COMMIT="v1.1.0"  # 从 v0.1.0 升级至 v1.1.0

# ...

# NIC 后端依赖处理逻辑
case "${NIC_BACKEND}" in
    # default: mlx5
    none)
        # MoRI v1.1.0 在运行时自动检测 NIC，无需编译时标志。
        # 此处仅安装供应商包（如 libionic.so）供 dlopen 使用。
        ;;
    # AMD NIC
    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; \
        # ... 安装 ainic 相关包
        ;;
    # TODO: 后续添加 Broadcom bnxt 包/仓库
    # bnxt)
    #     echo "[MORI] NIC_BACKEND=bnxt: 添加 Broadcom bnxt 包/仓库。";
    #     ;;
    *)
        echo "[MORI] 未知 NIC_BACKEND=${NIC_BACKEND}，跳过特定包安装。";
        ;;
esac

# 构建并安装 MORI
export MORI_GPU_ARCHS="${GPU_ARCH_LIST}";  # 注意：review 建议此变量可能已不再需要
# 更新日志输出，反映配置简化
echo "[MORI] MORI_GPU_ARCHS=${MORI_GPU_ARCHS} NIC_BACKEND=${NIC_BACKEND}";  # 移除了 USE_IONIC 和 USE_BNXT 的显示
```

# 评论区精华

review 中主要讨论了代码风格和潜在优化点：
1. **注释格式一致性**：gemini-code-assist[bot] 建议将注释中的非 ASCII 字符（如 em-dash `—`）和大小写调整为与文件其他部分一致，使用全大写 `[MORI]` 前缀以提高可维护性和跨环境兼容性。
2. **清理环境变量**：同一评论者指出，鉴于 MoRI v1.1.0 实现了“安装时零 hipcc”，`MORI_GPU_ARCHS` 环境变量可能在安装过程中不再必需，建议考虑移除以保持构建环境清洁。
**结论与状态**：这些建议未被采纳（PR 最终合并时未修改相关行），但提供了对升级后构建配置的进一步优化思路。讨论聚焦于代码风格和构建优化，未涉及功能正确性或兼容性争议。

- 注释格式与一致性优化 (style): 建议未被采纳，PR 合并时未修改相关注释。
- 清理可能过时的环境变量 (design): 建议未被采纳，PR 合并时保留了该变量。

# 风险与影响

- 风险：1. **兼容性风险**：MoRI v1.1.0 可能引入 API 或行为变更，若 SGLang 运行时代码依赖特定 MoRI 接口，存在不兼容风险。但本次 PR 仅更新版本号，未修改调用代码，风险较低。
2. **构建风险**：移除 `USE_IONIC`/`USE_BNXT` 编译时标志依赖于 MoRI v1.1.0 的运行时自动检测功能。如果自动检测失败或环境变量覆盖未正确实现，可能导致 NIC 后端无法正常工作。
3. **回归风险**：由于是依赖升级且改动范围极小（仅 Dockerfile），直接导致功能回归的风险较低，但需通过 CI 测试验证新镜像的构建和基本功能。
- 影响：1. **对用户的影响**：使用 ROCm Docker 镜像的用户将自动获得 MoRI v1.1.0 的新特性，如改进的安装体验和更灵活的 NIC 配置。无直接 API 变更，对终端用户透明。
2. **对系统的影响**：简化了 Docker 镜像的构建配置，移除硬编码的编译时标志，使镜像更易于维护和适应不同硬件环境。可能轻微影响镜像构建时间（取决于新版本编译过程）。
3. **对团队的影响**：开发者和运维人员需要知晓 MoRI 升级，并在涉及 AMD ROCm 环境部署时验证新镜像的稳定性。由于是基础设施变更，对大多数开发工作流无直接影响。
- 风险标记：依赖升级 , 构建配置变更

# 关联脉络

- PR #22363 [AMD] Fix `aiter` import failure in ROCm Docker images: 同样修改了 docker/rocm.Dockerfile，涉及 AMD ROCm 镜像的构建问题修复，属于同一模块（部署脚本）的维护。