执行摘要
- 一句话:将DeepSeek-V4 AMD CI测试迁移到主分支标准镜像
- 推荐动作:该PR是基础设施改进,没有引入新功能,但对于保持AMD CI的可持续性很重要。建议CI维护者关注工作流变更后的实际运行时间变化,以及测试脚本中的环境变量是否与最新
run_dsv4.sh保持同步。一般开发者可跳过阅读。
功能与动机
DeepSeek-V4模型代码和ROCm优化已通过PR #26383合并到main分支,因此V4 nightly CI无需再从专用DSv4分支构建镜像,可直接使用标准ROCm 7.2镜像,以降低维护成本和镜像构建时间。
实现拆解
- 更新四个DSv4测试脚本:将
COMMON_ENV_VARS 中的环境变量从老旧的 tilelang/AITER 混合方案更新为以 AITER indexer + triton 注意力为主的新配置,移除不必要的变量(如 SGLANG_OPT_USE_TILELANG_SWA_PREPARE、SGLANG_OPT_USE_OLD_COMPRESSOR),新增 SGLANG_DEFAULT_THINKING、SGLANG_OPT_USE_FUSED_COMPRESS_TRITON 等,并简化 FP4_ENV_VARS/FP8_ENV_VARS(移除 SGLANG_FORCE_TRITON_MOE_FP8)。同时调整服务器启动参数:将 --attention-backend 从 compressed 改为 dsv4,新增 --mem-fraction-static 0.90 和 --swa-full-tokens-ratio 0.1 以匹配 main 分支的配置。
- 修改 GitHub Actions 工作流
nightly-test-amd-rocm720.yml:移除为DSv4专用镜像准备的 Resolve DSv4 image tag 步骤(包括Docker Hub认证和镜像标签解析),将 Setup docker 步骤改为使用标准 scripts/ci/amd/amd_ci_start_container.sh --rocm-version rocm720。取消 --skip-sglang-build 和 --skip-aiter-build 参数,改为完整安装依赖,使V4任务与其他AMD nightly任务使用相同的基础镜像和安装流程。
- 保持测试结构不变:四个测试文件(FP4/FP8 × Flash/Pro)的类结构、GSM8K评估入口和
register_amd_ci 注册保持不变,仅调整配置以对齐 main 分支的运行时需求。
关键文件:
test/registered/amd/test_deepseek_v4_flash_fp4.py(模块 V4测试;类别 test;类型 test-coverage): DeepSeek-V4 Flash FP4 测试脚本,是四个测试中 VP 之一,变更了环境变量和启动参数以匹配 main 分支。
test/registered/amd/test_deepseek_v4_flash_fp8.py(模块 V4测试;类别 test;类型 test-coverage): DeepSeek-V4 Flash FP8 测试脚本,与FP4类似变更,使用FP8专用专家设置。
test/registered/amd/test_deepseek_v4_pro_fp4.py(模块 V4测试;类别 test;类型 test-coverage): DeepSeek-V4 Pro FP4 测试脚本,Pro模型使用更长的超时和不同模型路径。
test/registered/amd/test_deepseek_v4_pro_fp8.py(模块 V4测试;类别 test;类型 test-coverage): DeepSeek-V4 Pro FP8 测试脚本,与Pro FP4类似。
.github/workflows/nightly-test-amd-rocm720.yml(模块 CI配置;类别 infra;类型 infrastructure): GitHub Actions 工作流,移除了DSv4镜像解析步骤,简化了V4任务的Docker设置和依赖安装。
关键符号:未识别
关键源码片段
test/registered/amd/test_deepseek_v4_flash_fp4.py
DeepSeek-V4 Flash FP4 测试脚本,是四个测试中 VP 之一,变更了环境变量和启动参数以匹配 main 分支。
# test/registered/amd/test_deepseek_v4_flash_fp4.py ( 关键变更部分 )
# 更新后的公共环境变量,使用 AITER indexer + triton 注意力 + ROCm700A
COMMON_ENV_VARS = {
"SGLANG_DEFAULT_THINKING": "1",
"SGLANG_DSV4_REASONING_EFFORT": "max",
"SGLANG_OPT_DEEPGEMM_HC_PRENORM": "false",
"SGLANG_USE_AITER": "1",
"SGLANG_USE_ROCM700A": "1",
"SGLANG_OPT_USE_FUSED_COMPRESS": "true",
"SGLANG_OPT_USE_FUSED_COMPRESS_TRITON": "true",
"SGLANG_HACK_FLASHMLA_BACKEND": "triton",
"SGLANG_OPT_FP8_WO_A_GEMM": "false",
"SGLANG_OPT_USE_JIT_INDEXER_METADATA": "false",
"SGLANG_OPT_USE_TOPK_V2": "false",
"SGLANG_OPT_USE_AITER_INDEXER": "true",
"SGLANG_OPT_USE_TILELANG_INDEXER": "false",
"SGLANG_OPT_USE_TILELANG_MHC_PRE": "false",
"SGLANG_OPT_USE_TILELANG_MHC_POST": "false",
"SGLANG_FP8_PAGED_MQA_LOGITS_TORCH": "1",
"SGLANG_OPT_USE_MULTI_STREAM_OVERLAP": "false",
"SGLANG_ROCM_USE_MULTI_STREAM": "false",
"AITER_BF16_FP8_MOE_BOUND": "0",
}
# FP4 专用环境变量
FP4_ENV_VARS = {
"SGLANG_DSV4_FP4_EXPERTS": "true",
}
# 服务器启动参数,现在使用 dsv4 注意力后端并优化内存比例
other_args = [
"--trust-remote-code",
"--tp", "8",
"--disable-radix-cache",
"--attention-backend", "dsv4",
"--max-running-requests", "256",
"--page-size", "256",
"--mem-fraction-static", "0.90",
"--swa-full-tokens-ratio", "0.1",
"--chunked-prefill-size", "8192",
"--disable-shared-experts-fusion",
"--tool-call-parser", "deepseekv4",
"--reasoning-parser", "deepseek-v4",
]
test/registered/amd/test_deepseek_v4_flash_fp8.py
DeepSeek-V4 Flash FP8 测试脚本,与FP4类似变更,使用FP8专用专家设置。
# test/registered/amd/test_deepseek_v4_flash_fp8.py (FP8 专用部分 )
COMMON_ENV_VARS = { ... } # 与 FP4 相同
# FP8 专用环境变量:保留 SGLANG_DSV4_FP4_EXPERTS=false
FP8_ENV_VARS = {
"SGLANG_DSV4_FP4_EXPERTS": "false",
}
# 服务器启动参数与 FP4 一致
other_args = [
"--trust-remote-code",
"--tp", "8",
"--disable-radix-cache",
"--attention-backend", "dsv4",
"--max-running-requests", "256",
"--page-size", "256",
"--mem-fraction-static", "0.90",
"--swa-full-tokens-ratio", "0.1",
"--chunked-prefill-size", "8192",
"--disable-shared-experts-fusion",
"--tool-call-parser", "deepseekv4",
"--reasoning-parser", "deepseek-v4",
]
评论区精华
无review评论,仅获得HaiShaw的批准。PR描述中作者提供了两个模型(V4-Pro FP4和V4-Flash FP8)的加速比测试数据,验证了迁移后精度和吞吐量满足要求。
风险与影响
- 风险:主要风险在于环境变量和启动参数的变更可能导致测试在特定硬件或软件组合下失败。例如,
--attention-backend dsv4 依赖于DSv4特定的注意力实现,若ROCm环境缺少相关依赖可能出错。但作者已烟雾测试两个配置并通过。此外,工作流中去掉了 --skip-sglang-build,每次运行会重新编译sglang,可能增加CI耗时,但确保与main分支代码一致,降低了因镜像过时而导致的隐藏问题。其他AMD nightly任务不受影响,因为V4任务独立运行。
- 影响:影响范围限于AMD GPU上的DeepSeek-V4 nightly CI测试。减少了维护专用镜像的负担,简化了CI配置。对用户无直接影响,但对AMD平台测试团队有正面维护收益。系统层面,工作流文件减少64行,变得简洁。测试脚本的环境变量调整使配置更贴近生产运行脚本(
python/run_dsv4.sh)。
- 风险标记:环境变量变更可能导致兼容性问题, CI步骤简化可能隐藏镜像依赖
关联脉络
- PR #26383 [AMD] Merge DeepSeek-V4 model and ROCm optimizations into main: 本PR的基础:DSv4模型和ROCm优化合并到main后,才使V4 nightly可以使用标准镜像。
参与讨论