Prhub

#50467 [Hardware][AMD][Kernel][CI][Bugfix] Fix ROCm DeepEP FP8 max

原始 PR 作者 mawong-amd 合并时间 2026-07-31 10:37 文件变更 2 提交数 2 评论 0 代码增减 +6 / -11

执行摘要

修复 ROCm DeepEP FP8 max 并收紧测试容差

PR body 指出:在 FP8 e4m3fn-based 平台(gfx950)上,低延迟 FP8 内核因缺少宏保护而使用了错误的 e4m3fnuz 最大值 240.0 而非 448.0;在 e4m3fnuz-based 平台(gfx942)上,vLLM 为了与 e4m3fn 数学对齐(x2 缩放并刷新负零)使用了调整后的最大值 224.0。上游 DeepEP PR#17 已修复此问题,通过命令行参数支持可插拔的 e4m3fnuz 最大值。该 PR 旨在应用上游修复,而非像 PR#50145 那样放宽测试容差。

该 PR 值得关注,因为修复了 FP8 最大值错误并保持了测试的严格性。设计决策值得借鉴:优先修复根因而非放松测试。

讨论亮点

审核过程中只有一条来自 AndreasKaratzas 的批准评论,声明 LGTM。Claude bot 评论自动审核因 fork 而禁用。无其他讨论。

实现拆解

  1. 更新 Dockerfile.rocm 中 DeepEP 的构建版本:将 DEEPEP_BRANCH 从 a9ea9774 更新为 0f63d3e9,该版本包含 ROCm/DeepEP#17 的修复。
  2. 在 DeepEP 构建命令中添加 --rocm-gfx942-fp8-fnuz-max 224 参数,以对齐 vLLM 在 fp8_utils.py 中的 clamp 值(E4M3FNUZ 为 224)。
  3. 在 test_deepep_moe.py 中,移除了针对 fp8_fnuz 平台的特殊容差放宽逻辑(不再使用 check_accuracy 的宽松容差,而是统一使用 torch.testing.assert_close 的严格容差 6e-2)。同时移除了不再使用的 check_accuracy 导入。
文件 模块 状态 重要度
docker/Dockerfile.rocm 部署脚本 modified 3.93
tests/kernels/moe/test_deepep_moe.py MoE 内核测试 modified 4.44

关键符号

assert_deepep_close

关键源码片段

docker/Dockerfile.rocm infrastructure

更新 DeepEP 分支并添加 FP8 最大值参数,是修复的核心部署变更。

# DeepEP build stage - depends on ROCShmem, builds the HIP kernel wheel.
FROM build_rocshmem AS build_deepep
ARG DEEPEP_BRANCH="0f63d3e9" # 升级到包含 FP8 最大值修复的版本(ROCm/DeepEP#17)
ARG DEEPEP_REPO="https://github.com/ROCm/DeepEP.git"
ARG DEEPEP_NIC="cx7"# 构建 DeepEP wheel。DeepEP 在 ROCSHMEM_DIR 查找 rocshmem。
# DeepEP 仅支持 gfx942 和 gfx950,因此默认列表避免 gfx90a。
# 我们传递 --rocm-gfx942-fp8-fnuz-max 224 使 DeepEP dispatch FP8 量化边界与 vLLM 的 clamp 对齐
# (见 vllm/model_executor/layers/quantization/utils/fp8_utils.py):E4M3FNUZ 为 224。
RUN --mount=type=cache,target=/root/.cache/ccache \
    export PYTORCH_ROCM_ARCH="gfx942;gfx950" \
    && git clone ${DEEPEP_REPO} \
    && cd DeepEP \
    && git checkout ${DEEPEP_BRANCH} \
    && LDFLAGS="-fuse-ld=mold" MAX_JOBS="${MAX_JOBS:-$(nproc)}" \
       python3 setup.py --variant rocm --rocm-explicit-ctx --nic ${DEEPEP_NIC} --rocm-gfx942-fp8-fnuz-max 224 bdist_wheel --dist-dir=/app/deep_install
tests/kernels/moe/test_deepep_moe.py test-coverage

移除特殊容差放宽,恢复严格数值校验,并清理未使用的导入。

# tests/kernels/moe/test_deepep_moe.pydef assert_deepep_close(
    expected: torch.Tensor,
    actual: torch.Tensor,
    k: int,
    use_fp8_dispatch: bool,
) -> None:
    # 统一使用严格容差。之前在此处针对 fp8_fnuz 平台放宽了容差(1.5e-1),
    # 但那只是掩盖了 FP8 最大值错误的 bug;现在根因已修复,恢复严格校验。
    torch.testing.assert_close(
        expected,
        actual,
        atol=6e-2,
        rtol=6e-2,
    )

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险较低,但需注意:测试容差收紧后,若 DeepEP 在提交 0f63d3e9 中未完全修复问题,可能导致测试在新平台(如 gfx950)上失败。此外,该修改仅影响 ROCm 容器构建,但 DeepEP 版本更新可能引入其他行为变化。

影响范围限定在 ROCm 平台(gfx942 和 gfx950)上的 DeepEP FP8 MoE 内核。用户将获得更准确的 FP8 量化边界,可能改善模型精度。对于直接使用容器或依赖 DeepEP 的用户有影响,但未改动核心 vLLM 代码。

测试容差收紧 依赖版本更新

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论