Prhub

#25039 [AMD] Disable unittest fail-fast for deepseekv4 perf test

原始 PR 作者 yctseng0211 合并时间 2026-05-13 13:47 文件变更 4 提交数 3 评论 1 代码增减 +56 / -8

执行摘要

禁用 AMD DeepSeek-V4 测试的 unittest fail-fast

The 4 DSv4 test files each define both an accuracy test (test_a_gsm8k) and a performance test (test_b_perf_8k_1k) that share a single very-expensive server launch in setUpClass. run_suite.py's run_one_file launches each test file with python3 <file> -f which enables unittest fail-fast, so an accuracy assertion failure would skip the perf measurement and lose the perf table from the GitHub step summary.

该 PR 展示了处理 CI 框架与测试用例需求冲突的巧妙方法(通过运行时过滤 sys.argv),值得测试维护人员注意。环境变量的同步更新也反映了对 AMD 平台最新优化配置的跟进。建议未来考虑将精度测试和性能测试拆分为独立文件,以更根本地避免此类问题。

讨论亮点

无,没有 review 评论或讨论。

实现拆解

  1. 定位问题run_suite.py 通过 run_one_file 使用 python3 <file> -f 运行每个测试文件,开启 unittest 的 fail-fast 模式,导致 test_a_gsm8k(精度)失败后 test_b_perf_8k_1k(性能)被跳过。
  2. 解决方式:在每个测试文件的 if __name__ == "__main__": 中,导入 sys,从 sys.argv 中移除 -f--failfast 参数,然后调用 unittest.main(),从而绕过 CI 框架的 fail-fast 设置。
  3. 同步环境变量:将四个文件的 COMMON_ENV_VARS 中的多个配置项从 false 改为 true 或新增,以匹配最新的 AMD ROCm 7.2 推荐配置,包括:SGLANG_OPT_USE_FUSED_COMPRESSSGLANG_OPT_USE_TRITON_SWA_PREPARESGLANG_OPT_USE_AITER_MHC_PRESGLANG_OPT_USE_AITER_MHC_POSTAITER_BF16_FP8_MOE_BOUND,并将 SGLANG_HACK_FLASHMLA_BACKENDtilelang 改为 triton
  4. 统一修改:四个测试文件(test_deepseek_v4_flash_fp4.pytest_deepseek_v4_flash_fp8.pytest_deepseek_v4_pro_fp4.pytest_deepseek_v4_pro_fp8.py)均同步应用上述修改,保证一致性。
文件 模块 状态 重要度
test/registered/amd/test_deepseek_v4_flash_fp4.py 测试脚本 modified 4.59
test/registered/amd/test_deepseek_v4_flash_fp8.py 测试脚本 modified 4.59
test/registered/amd/test_deepseek_v4_pro_fp4.py 测试脚本 modified 4.59
test/registered/amd/test_deepseek_v4_pro_fp8.py 测试脚本 modified 4.59

关键源码片段

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

第一个被修改的测试文件,展示了核心的两处变更(环境变量和 fail-fast 过滤),影响其他三个文件同步修改。

# 文件:test/registered/amd/test_deepseek_v4_flash_fp4.py
# 关键修改 1:环境变量配置更新,适配 AMD ROCm 7.2 最佳实践
COMMON_ENV_VARS = {
    "SGLANG_OPT_USE_FUSED_COMPRESS": "true", # 从 false 改为 true,启用 fused 压缩
    "SGLANG_OPT_USE_OLD_COMPRESSOR": "true",
    "SGLANG_OPT_USE_TILELANG_SWA_PREPARE": "false",
    "SGLANG_OPT_USE_TRITON_SWA_PREPARE": "true", # 新增,使用 triton 实现
    "SGLANG_OPT_USE_JIT_KERNEL_FUSED_TOPK": "false",
    "SGLANG_OPT_USE_FUSED_HASH_TOPK": "false",
    "SGLANG_OPT_DEEPGEMM_HC_PRENORM": "false",
    "SGLANG_OPT_USE_TILELANG_MHC_PRE": "false",
    "SGLANG_OPT_USE_AITER_MHC_PRE": "true", # 新增,启用 AITER MHC pre
    "SGLANG_OPT_USE_TILELANG_MHC_POST": "false",
    "SGLANG_OPT_USE_AITER_MHC_POST": "true", # 新增,启用 AITER MHC post
    "SGLANG_ENABLE_THINKING": "1",
    "SGLANG_USE_AITER": "1",
    "AITER_BF16_FP8_MOE_BOUND": "1", # 新增,设置 AITER MoE 边界
    "SGLANG_USE_ROCM700A": "1",
    "SGLANG_FP8_PAGED_MQA_LOGITS_TORCH": "1",
    "SGLANG_OPT_DPSK_V4_RADIX": "0",
    "SGLANG_OPT_USE_OVERLAP_STORE_CACHE": "false",
    "SGLANG_OPT_USE_FUSED_STORE_CACHE": "false",
    "SGLANG_TOPK_TRANSFORM_512_TORCH": "1",
    "SGLANG_OPT_USE_TILELANG_INDEXER": "true",
    "SGLANG_HACK_FLASHMLA_BACKEND": "triton", # 从 tilelang 改为 triton
    "SGLANG_DSV4_REASONING_EFFORT": "max",
}# FP4 variant: FP4 mixed-precision experts
FP4_ENV_VARS = {
    "SGLANG_DSV4_FP4_EXPERTS": "true",
    "SGLANG_FORCE_TRITON_MOE_FP8": "0",
}# ... 测试方法(test_a_gsm8k, test_b_perf_8k_1k)保持不变 ...if __name__ == "__main__":
    # 关键修改 2:run_suite.py 使用 -f 启动,开启 unittest fail-fast
    # 我们希望性能测试即使在精度测试失败时也能运行
    # 因此从 sys.argv 中移除 -f / --failfast 参数
    import sys
    sys.argv = [a for a in sys.argv if a not in ("-f", "--failfast")]
    unittest.main()

评论区精华

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

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

风险与影响

低风险。仅修改测试文件的环境变量和启动逻辑,不涉及生产代码。环境变量变更可能影响测试覆盖率,但已在 AMD 机器上验证(见 PR 附带的测试结果)。移除 fail-fast 可能导致一个测试方法失败后后续测试方法继续执行,但这是设计意图,不会引入雪崩风险因为测试方法彼此独立(共享一个 setUpClass 但各测试方法不依赖对方)。

影响 AMD CI 中 DeepSeek-V4 nightly 测试的稳定性和数据完整性。性能测试将不再被精度测试失败阻塞,从而确保持续收集性能指标。对用户无直接影响。环境变量的更新有助于确保测试使用正确的硬件优化配置。

环境变量变更 测试流程调整

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论