Prhub

#25007 Add Arm64 INT8 MoE test coverage

原始 PR 作者 ranimandepudi 合并时间 2026-06-10 10:36 文件变更 12 提交数 8 评论 20 代码增减 +245 / -17

执行摘要

为 Arm64 CI 添加 INT8 MoE 测试并迁移至注册系统

现有 test_moe.py 包含 BF16/FP8/INT4 等 Arm64 尚未支持的量化路径,直接复用会导致 CI 假失败,因此需要一份专属的 INT8 MoE 测试文件。同时,Arm64 测试需要跟随 Xeon 的迁移路径,从 test/srt/run_suite.py 迁移至 test/run_suite.py 的注册系统。

值得精读其中的 CI 迁移模式:通过 register_cpu_ci 声明式注册测试,配合集中式 PER_COMMIT_SUITES 管理套件,可显著简化多平台 CI 配置。后续清理 test/srt/cpu/ 目录时可参考此 PR 的副本策略。

讨论亮点
  • cyb70289 建议目录结构:“Since this file is arm64 only, it's better to create a subdir 'arm64', and move it there, with the name test_moe.py”。ranimandepudi 同意并执行。
  • mingfeima 推动注册系统迁移:“could you please move test cases to sglang/test/registered/cpu? we have moved all the xeon ci test cases to registered”。随后在 review 中要求更新 CI 工作流以使用 test/run_suite.py 和新的套件命名。
  • CI 基础设施适配:多次 CI 失败后,作者发现 test/run_suite.pyvalidate_all_suites() 要求套件名称需在 PER_COMMIT_SUITES 中,遂添加 "base-b-test-cpu-arm64";同时旧 test/srt/run_suite.py 的 glob 检查需要文件仍在 test/srt/ 下,故保留副本。

实现拆解

  1. 新增 INT8 MoE 测试文件:在 test/registered/cpu/arm64/test_moe.py 创建 TestFusedExpertsInt8 类,通过 _int8_moe 方法构造随机 W8A8 输入,调用 kernel.fused_experts_cpu 与 PyTorch 参考实现对比,使用宽松容差(Arm64 上 atol=0.03)。测试维度覆盖 M={1,6,32,64}、N/K={256,512}、E=8、topk=4。
  2. 在旧目录保留副本:为兼容 test/srt/run_suite.py 的固定 glob 检查,同时保留 test/srt/cpu/arm64/test_moe.py(仅 suite 名称不同)。后续旧目录完全移除后该副本可删除。
  3. 注册现有 CPU 测试到 Arm64 套件:在 test/registered/cpu/ 下的 activation、decode、norm、qwen3、rope、server_args_backend、topk 等测试文件中各添加一行 register_cpu_ci(est_time=10, suite="base-b-test-cpu-arm64"),使它们也在 Arm64 CI 中运行。
  4. 更新 CI 配置与套件定义:在 test/run_suite.pyPER_COMMIT_SUITES 中添加 "base-b-test-cpu-arm64";在 .github/workflows/pr-test-arm64.yml 中将运行命令从 test/srt/run_suite.py 切换到 test/run_suite.py --hw cpu --suite base-b-test-cpu-arm64
  5. 清理旧套件:从 test/srt/run_suite.py 中移除旧的 suite_arm64 定义及其 suites.update(suite_arm64) 调用。
文件 模块 状态 重要度
test/registered/cpu/arm64/test_moe.py MoE 测试 added 7.28
test/srt/cpu/arm64/test_moe.py MoE 测试 added 6.35
test/run_suite.py CI 调度 modified 4.22
test/srt/run_suite.py CI 调度 modified 4.4
.github/workflows/pr-test-arm64.yml CI 配置 modified 3.18
test/registered/cpu/test_activation.py 激活测试 modified 2.71

关键符号

TestFusedExpertsInt8._int8_moe TestFusedExpertsInt8.test_int8_moe

关键源码片段

test/run_suite.py test-coverage

在 PER_COMMIT_SUITES 中添加 base-b-test-cpu-arm64 套件,使注册的 Arm64 测试能被 CI 发现和执行。

# 修改前:
PER_COMMIT_SUITES = {
    HWBackend.CPU: ["base-a-test-cpu", "base-b-test-cpu"],
    # ...
}# 修改后:
PER_COMMIT_SUITES = {
    HWBackend.CPU: ["base-a-test-cpu", "base-b-test-cpu", "base-b-test-cpu-arm64"],
    # ...
}

评论区精华

测试文件目录位置 设计

cyb70289 建议将 arm64 测试移到 test/srt/cpu/arm64 子目录并重命名为 test_moe.py,以便与 x86 完整 MoE 测试分离,并为未来添加 bf16、int4 预留空间。

结论:作者同意并实施,创建了 cpu/arm64 子目录。 · 已解决

迁移到 test/registered/cpu 设计

mingfeima 要求将 arm64 测试也迁移到 test/registered/cpu/ 目录,与 Xeon 测试迁移保持一致。

结论:作者后续提交了迁移,将测试置于 test/registered/cpu/arm64/test_moe.py,并在旧目录保留副本以兼容 CI 检查。 · 已解决

CI 工作流与套件命名 infra

mingfeima 指出需要更新 pr-test-arm64.yml 以使用 test/run_suite.py 和新的套件命名(base-b-test-cpu-arm64),否则 CI 仍运行旧测试。同时,CI 因 validate_all_suites 失败,需将套件名加入 PER_COMMIT_SUITES。

结论:作者最终提交完善了 CI 配置,arm64 套件改用新命名并成功运行。 · 已解决

风险与影响

变更全部为测试和 CI 配置,无产品代码改动。主要风险是新注册的测试在 Arm64 CI 中可能因环境差异失败,但已在 AWS Graviton3 验证通过。副本文件的存在可能导致后续目录清理时遗漏,需在 test/srt/cpu/ 正式废弃后手动删除。

Arm64 CI:测试覆盖率显著提升,增加了 INT8 MoE 及更多 core kernel 测试(activation、decode 等);CI 运行命令从旧 run_suite.py 切换到新注册系统,与 Xeon/AMD 等平台对齐。对其他平台无影响。团队层面,这展示了从旧测试框架向注册系统迁移的完整模式,可供 NPU、XPU 等参考。

测试副本可能遗留 CI 配置变更可能影响其他平台

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论