执行摘要
- 一句话:为AMD CI添加DSV4精度测试门控
- 推荐动作:值得阅读,展示了CI门控设计模式(按事件类型过滤、组合cron与PR触发、条件跳过测试),适合作为CI配置参考。
功能与动机
PR body 说明:'Adds ROCm 7.2 DeepSeek-V4 accuracy coverage to pr-test-amd-rocm720.yml',目的是在AMD ROCm平台上为DeepSeek-V4模型建立持续集成精度验证,防止回归并确保AMD硬件上的推理正确性。
实现拆解
- 修改CI工作流触发器(
.github/workflows/pr-test-amd-rocm720.yml):启用pull_request并限制路径;新增0 */6 * * * cron用于只运行dsv4精度作业;在workflow_dispatch的stage选项中添加dsv4-flash-fp4-fp8-amd-rocm720和dsv4-pro-fp4-amd-rocm720。
- 调整call-gate和check-changes条件:call-gate添加
if: github.event.schedule != '0 */6 * * *';check-changes中set-run-all-tests步骤增加|| "${{ github.event_name }}" == "schedule"。
- 添加dsv4精度测试job:基于现有dsv4测试job,在PR和6h cron中通过依赖控制仅运行dsv4作业;设置
SGLANG_DSV4_ACCURACY_ONLY=1环境变量使性能测试跳过。
- 更新四个测试脚本的环境变量和skip装饰器:将
SGLANG_HACK_FLASHMLA_BACKEND改为unified_kv_triton;在test_b_perf_8k_1k方法上添加@unittest.skipIf。
- 配置continue-on-error:PR触发时
false,cron触发时true。
关键文件:
.github/workflows/pr-test-amd-rocm720.yml(模块 CI配置;类别 infra;类型 infrastructure): CI工作流核心变更,定义了DSV4精度测试的触发条件和dsv4作业集成。
test/registered/amd/test_deepseek_v4_flash_fp4.py(模块 精度测试;类别 test;类型 test-coverage): DSV4 Flash FP4精度测试脚本,包含环境变量调整和skipIf装饰器。
test/registered/amd/test_deepseek_v4_flash_fp8.py(模块 精度测试;类别 test;类型 test-coverage): DSV4 Flash FP8精度测试脚本,变更同flash_fp4。
test/registered/amd/test_deepseek_v4_pro_fp4.py(模块 精度测试;类别 test;类型 test-coverage): DSV4 Pro FP4精度测试脚本,变更同前。
test/registered/amd/test_deepseek_v4_pro_fp8.py(模块 精度测试;类别 test;类型 test-coverage): DSV4 Pro FP8精度测试脚本,变更同前。
关键符号:TestDeepseekV4Fp4.test_b_perf_8k_1k, TestDeepseekV4Fp8.test_b_perf_8k_1k, TestDeepseekV4ProFp4.test_b_perf_8k_1k, TestDeepseekV4ProFp8.test_b_perf_8k_1k
关键源码片段
test/registered/amd/test_deepseek_v4_flash_fp4.py
DSV4 Flash FP4精度测试脚本,包含环境变量调整和skipIf装饰器。
# test/registered/amd/test_deepseek_v4_flash_fp4.py ( 关键变更 )
# 公共环境变量,AMD ROCm 7.2 专用配置
COMMON_ENV_VARS = {
# ... 其他环境变量 ...
# 变更前 : 'SGLANG_HACK_FLASHMLA_BACKEND': 'triton'
# 变更后 : 统一使用 unified_kv_triton 后端
'SGLANG_HACK_FLASHMLA_BACKEND': 'unified_kv_triton',
# ... 其余环境变量保持不变 ...
}
class TestDeepseekV4Fp4(CustomTestCase):
# ... setUpClass 与 tearDownClass 不变 ...
# 精度测试(直接执行,不跳过)
def test_a_gsm8k(self):
# 运行 GSM8K 评估并断言准确率 > 0.91
...
# 性能测试:当 SGLANG_DSV4_ACCURACY_ONLY=1 时跳过
@unittest.skipIf(
os.environ.get('SGLANG_DSV4_ACCURACY_ONLY') == '1',
'SGLANG_DSV4_ACCURACY_ONLY=1: accuracy-only run (skipping perf)',
)
def test_b_perf_8k_1k(self):
# 运行基准测试,输入 8K token 输出 1K token
...
评论区精华
此PR没有实质性的review讨论,仅有一个自动评论和HaiShaw的批准。审核者直接批准,表明变更清晰且风险低。
风险与影响
- 风险:未发现明显风险。环境变量SGLANG_DSV4_ACCURACY_ONLY可能在某些PR中跳过性能测试,导致性能回归泄漏;FlashMLA后端切换可能需要同步其他CI配置;新cron作业可能增加ROCm CI资源消耗。
- 影响:对用户无影响;对开发团队:增强了AMD平台DeepSeek-V4的CI覆盖,但也增加了CI总时间和资源占用;对CI流程引入了更精细的触发条件控制。
- 风险标记:新环境变量跳过性能测试, FlashMLA后端变更, CI资源消耗增加, PR触发条件可能遗漏非标准路径
关联脉络
- PR #27994 Remove outdated patch: 同为AMD CI维护,本PR在27994基础上新增dsv4门控,共同推进AMD CI稳定性。
- PR #27999 [AMD] Pin maturin<1.14 to fix ROCm image build failure: 同为AMD CI维护,本PR与27999均涉及AMD ROCm CI流程优化。
参与讨论