Prhub

#25301 [AMD] fix moriep unittest oom on mi300x ci

原始 PR 作者 billishyahao 合并时间 2026-05-18 15:42 文件变更 3 提交数 6 评论 2 代码增减 +27 / -25

执行摘要

修复 AMD CI 上 moriep 单测 OOM

PR body 指出:"This patch is to reduce the memory use for moriep unittest to avoid potential oom CI failure found on AMD GPUs with smaller HBM volume"。

该 PR 为纯粹的测试与 CI 配置调整,不涉及核心逻辑,普通读者无需精读。但 AMD 相关的开发者可关注参数调整逻辑,理解如何在有限显存下配置 MoE 测试。设计决策:通过降低 context length 和 dispatch tokens 有效减少显存占用。

讨论亮点

审核者 bingxche 和 HaiShaw 直接批准,无实质性讨论。

实现拆解

  1. 调整测试参数 (test/registered/amd/test_moriep_small.py):

    • 引入 DEFAULT_DEEPEP_MODEL_NAME_FOR_TEST_NEXTN 导入,为 MTP 测试指定 draft 模型路径。
    • 降低 --mem-fraction-static 从 0.72 到 0.7,以减少预分配显存。
    • 大幅降低 --chunked-prefill-size 从 16384 到 1024、--context-length 从 12288 到 4096、--max-total-tokens 从 131072 到 32768,以降低峰值内存。
    • 将每个 rank 的最大 dispatch tokens 从 4096 降至 128(通过环境变量 SGLANG_MORI_NUM_MAX_DISPATCH_TOKENS_PER_RANK),减少通信缓冲。
    • 调整准确率阈值:TestPureDP.test_gsm8k 从 >=0.935 降至 >=0.90;TestMTP.test_gsm8k 从 >=0.92 降至 >=0.90。
    • 更新 CI 注册时间 est_time 从 1200 秒到 5400 秒,反映测试耗时增加。
  2. 延长 CI job 超时 (.github/workflows/pr-test-amd-rocm720.ymlpr-test-amd.yml):

    • 将 job 超时从 60 分钟提升至 120 分钟。
    • 将 per-file 超时从 3600 秒提升至 5400 秒,防止测试因耗时过长被 kill。
文件 模块 状态 重要度
test/registered/amd/test_moriep_small.py MoE 测试 modified 5.01
.github/workflows/pr-test-amd-rocm720.yml CI 配置 modified 3.21
.github/workflows/pr-test-amd.yml CI 配置 modified 2.64

关键源码片段

test/registered/amd/test_moriep_small.py test-coverage

核心测试文件,通过降低多个内存敏感参数修复 OOM,并调整准确率阈值。

# 测试参数配置,通过降低各项内存占用避免 Mi300X 上 OOM
common_args = [
    "--tp-size", "8",
    "--ep-size", "8",
    "--dp-size", "8",
    "--enable-dp-attention",
    "--moe-a2a-backend", "mori",
    "--trust-remote-code",
    "--load-balance-method", "round_robin",
    "--moe-dense-tp-size", "1",
    "--enable-dp-lm-head",
    "--mem-fraction-static", "0.7", # 从 0.72 降至 0.7,减少预分配显存
    "--chunked-prefill-size", "1024", # 从 16384 降至 1024,降低 prefill 阶段内存
    "--max-running-requests", "128",
    "--context-length", "4096", # 从 12288 降至 4096,减少 KV cache
    "--max-total-tokens", "32768", # 从 131072 降至 32768,限制总 token 数
    "--attention-backend", "aiter",
    "--cuda-graph-max-bs", "32",
]# 环境变量设定:限制每个 rank 最大 dispatch tokens 并启用隔离模式
env = dict(os.environ)
env["SGLANG_USE_AITER"] = "1"
env["SGLANG_MORI_DISPATCH_DTYPE"] = "bf16"
env["SGLANG_MORI_NUM_MAX_DISPATCH_TOKENS_PER_RANK"] = "128" # 从 4096 大幅降低
env["MORI_SHMEM_MODE"] = "ISOLATION" # 避免对称堆内存溢出

评论区精华

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

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

风险与影响

主要风险在于降低了准确率阈值(0.935→0.90,0.92→0.90),可能掩盖精度回归。但考虑到测试仅为快速验证,且生产环境有独立精度测试,此风险可控。内存参数收紧可能导致测试在更大模型或更完整设置下仍 OOM,但当前参数已验证通过 CI。CI 超时延长不会影响其他功能。

影响范围仅限 AMD CI 上的 stage-c-test-large-8-gpu-amd 测试套件中的 moriep 测试。不会影响其他硬件平台或生产推理。对系统无性能影响。团队需要关注测试通过后是否仍能有效捕获精度问题。

测试阈值放宽 内存参数收紧 CI 超时延长

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论