Prhub

#37760 [CI][NPU] Fix kimi_k2_6 16p in64k perf test and dsv4-flash testcases

原始 PR 作者 pllimax 合并时间 2026-09-03 21:57 文件变更 6 提交数 2 评论 0 代码增减 +44 / -62

执行摘要

修复 NPU 平台上 Kimi K2.6 和 DeepSeek V4-Flash 的测试用例,优化预填充稳定性并同步至最新硬件配置。

根据 PR body 的描述,变更动机有二:

  1. kimi_k2_6 测试稳定性:原测试使用 --chunked-prefill-size 262144,导致完整 64K token 输入被一次性预填充,峰值激活内存过高,在 A3 设备上易引发重计算或 OOM,使夜间延迟测量不稳定。降低至 32768 可稳定预填充,恢复可复现的端到端延迟。
  2. DSV4-Flash 测试配置过时:DSV4-Flash 的性能/准确性测试仍使用旧的 ZBAL 环境配置。为保持一致性并利用新特性,需要切换到 DEEPEP + war-barrier 配置,并配合调整内存分片、预填充 token 数、KV 缓存数据类型、预热请求数等启动参数。同时,测试执行脚本 run_npu_testcase.sh 需要加载供应商自定义算子环境。

本 PR 是一个重要的测试基础设施维护和同步工作,值得 NPU 平台开发者和 CI 维护者精读。它揭示了 SGLang 在 NPU 硬件上针对特定模型(DSV4-Flash)的性能调优已进入更精细的阶段(引入 war-barrier、调整内部分块策略)。变更本身风险较低,但通过阅读可以了解到:

  1. Kimi K2.6 大上下文测试中的一个关键内存优化技巧(调整 chunked-prefill-size)。
  2. DeepSeek V4-Flash 在 NPU 上从 ZBAL 迁移到 DEEPEP + war-barrier 架构的具体配置差异和参数选择(如 mem-fraction-static, kv-cache-dtype)。
  3. 测试执行脚本如何集成硬件供应商的特定环境。
讨论亮点

本 PR 的 review 仅有批准状态,没有实质性的技术讨论。审核者 cherryblo 和 sglang-npu-bot 直接批准了更改。这表明变更可能是在外部沟通(如 Slack)中达成共识,或者变更内容(测试配置同步)的意图明确且风险可控。

实现拆解

本次变更的核心入口是多个 NPU 测试用例的配置文件,以及一个测试执行脚本。实现过程可拆解如下:

  1. 修复 Kimi K2.6 性能测试预填充稳定性:

    • 涉及文件:test/registered/npu/performance/kimi_k2_6/test_npu_kimi_k2_6_w4a8_16p_in64k_out1k_100ms.py
    • 关键变更:将启动参数 --chunked-prefill-size 从 262144 修改为 32768。
    • 原因与影响:减小预填充分块大小以避免单块过大的激活内存,这是修复 A3 设备上测试不稳定性的直接手段,确保性能指标的可复现性。
  2. 同步 DSV4-Flash 测试环境配置至 DEEPEP + war-barrier 架构:

    • 涉及文件:四个 DSV4-Flash 测试文件(三个性能测试,一个准确性测试)。
    • 核心配置替换:在所有测试的环境变量字典中,移除了旧的 ZBAL 相关变量(如 HCCL_BUFFSIZE, SGLANG_ZBAL_*),并统一添加了新的 DEEPEP 和 war-barrier 配置(DEEPEP_HCCL_BUFFSIZE: 2048, SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK: 35, SGLANG_ENABLE_WAR_BARRIER: 1, SGLANG_FORCE_COARSE_WAR_BARRIER: 1)。
    • 启动参数调整:
      • 内存与计算:将 --mem-fraction-static 从 0.7 或 0.62 调整为 0.68,并添加 --max-prefill-tokens 80000 以控制预填充规模。
      • 数据类型与预热:将 --kv-cache-dtype 从 auto 改为 bfloat16;将 warmup_requests 从 0 增加至 16,以稳定首次推理性能。
      • 分布式预填充设置:对于 PD 分离部署(1P+1D),将预填充节点的 --chunked-prefill-size 从 -1(不限制)改为 131072,同时将解码节点的 --chunked-prefill-size 从 32768 改为 -1,实现了更精细的控制。并从解码节点的 CUDA Graph batch size 列表中移除了 56。
    • 新增环境变量:在 DSv4-Flash 单节点 8p 测试中,添加了 SGLANG_SET_CPU_AFFINITY 和 HCCL_OP_EXPANSION_MODE 变量。在 1P+1D 部署的解码节点环境中,添加了 SGLANG_NPU_USE_MULTI_STREAM。
  3. 为 DSV4-Flash 测试引入供应商自定义算子环境:

    • 涉及文件:python/sglang/test/ascend/e2e/run_npu_testcase.sh
    • 关键变更:在设置完 CANN 和 NNAL 环境后,新增两行 source 命令,加载 /usr/local/Ascend/ascend-toolkit/latest/opp/vendors/customize/bin/set_env.bash 和 .../custom_transformer/bin/set_env.bash,并使用 || true 容忍可能的文件不存在错误。
    • 原因与影响:此变更确保了 DSV4-Flash 测试在 CI 环境中能够找到并链接到其依赖的供应商定制化算子库,是测试能够正确运行的必要前提。
文件 模块 状态 重要度
test/registered/npu/performance/deepseek_v4_flash/test_npu_deepseek_v4_flash_w8a8_8p_in8k_out1k_50ms.py DSV4-Flash 测试 modified 5.09
test/registered/npu/performance/kimi_k2_6/test_npu_kimi_k2_6_w4a8_16p_in64k_out1k_100ms.py Kimi K2.6 测试 modified 3.65
python/sglang/test/ascend/e2e/run_npu_testcase.sh 测试执行脚本 modified 3.75
test/registered/npu/accuracy/deepseek_v4_flash/test_npu_deepseek_v4_flash_w8a8_8p_gpqa.py DSV4-Flash 准确性测试 modified 3.66
test/registered/npu/performance/deepseek_v4_flash/test_npu_deepseek_v4_flash_w8a8_8p_in32k_out1k_50ms.py DSV4-Flash 测试 modified 4.28
test/registered/npu/performance/deepseek_v4_flash/test_npu_deepseek_v4_flash_w8a8_1p1d_16p_in8k_out1k_50ms.py DSV4-Flash 分离部署测试 modified 4.17

关键源码片段

test/registered/npu/performance/deepseek_v4_flash/test_npu_deepseek_v4_flash_w8a8_8p_in8k_out1k_50ms.py test-coverage

DSV4-Flash 单节点性能测试的核心配置文件,展示了从 ZBAL 到 DEEPEP + war-barrier 的完整环境变量与启动参数迁移,是本次配置同步的代表性样本。

# 变更后的 DSV4-Flash W8A8 单节点 8p 测试环境变量与启动参数配置片段
DEEPSEEK_V4_FLASH_W8A8_8P_ENVS = {
    "PYTORCH_NPU_ALLOC_CONF": "expandable_segments:True",
    "STREAMS_PER_DEVICE": "32",
    "INF_NAN_MODE_FORCE_DISABLE": "1",
    "SGLANG_SET_CPU_AFFINITY": "1",
    "HCCL_SOCKET_IFNAME": "lo",
    "GLOO_SOCKET_IFNAME": "lo",
    "HCCL_OP_EXPANSION_MODE": "AIV",
    "SGLANG_NPU_USE_MULTI_STREAM": "1",
    # deepep
    "DEEP_NORMAL_MODE_USE_INT8_QUANT": "1",
    "DEEPEP_HCCL_BUFFSIZE": "2048",
    "SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK": "35",
    # war barrier
    "SGLANG_ENABLE_WAR_BARRIER": "1",
    "SGLANG_FORCE_COARSE_WAR_BARRIER": "1",
    # skip gpu branch, mtp 等其他变量 ...
}
​
DEEPSEEK_V4_FLASH_W8A8_8P_OTHER_ARGS = [
    # ... 前序参数不变 ...
    "--prefill-max-requests",
    160,
    "--max-prefill-tokens",
    80000, # 新增:控制预填充的最大 token 数
    "--attention-backend",
    "dsv4",
    # ... 中间参数不变 ...
    "--mem-fraction-static",
    0.68, # 从 0.7 降低,为 KV 缓存预留更多空间
    "--chunked-prefill-size",
    131072,
    # ... 后续参数不变 ...
    "--kv-cache-dtype",
    "bfloat16", # 从 "auto" 显式指定为 bfloat16
    # ... 其他参数不变 ...
]
​
class TestNPUDeepSeekV4FlashW8A88PIn8kOut1k50ms(TestNpuPerformanceTestCaseBase):
    # ... 类属性 ...
    warmup_requests = 16 # 从 0 增加到 16,用于稳定首次推理性能
    # ...
python/sglang/test/ascend/e2e/run_npu_testcase.sh configuration

测试执行入口脚本,新增了加载供应商自定义算子环境的命令,是 DSV4-Flash 测试能在 CI 环境中运行的关键配套改动。

# 在 run_npu_testcase.sh 中,为适配 DSV4-Flash 自定义算子而新增的环境设置
# set environment of cann
. /usr/local/Ascend/cann/set_env.sh
. /usr/local/Ascend/nnal/atb/set_env.sh
# Adapt Deepseek-V4-Flash test cases with additional environment variables.
source /usr/local/Ascend/ascend-toolkit/latest/opp/vendors/customize/bin/set_env.bash || true
source /usr/local/Ascend/ascend-toolkit/latest/opp/vendors/custom_transformer/bin/set_env.bash || true
​
# 后续执行测试用例的逻辑不变 ...

评论区精华

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

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

风险与影响

  1. 测试稳定性风险(中):虽然变更旨在提升测试稳定性,但调整多个底层环境变量(如 DEEPEP_HCCL_BUFFSIZE, SGLANG_ENABLE_WAR_BARRIER)和启动参数,如果配置不当,可能导致测试在新配置下出现新的性能波动或失败。需要观察后续 CI 结果。
  2. 配置一致性风险(低):将多个测试文件的配置从旧架构迁移到新架构,需要确保所有必要的参数都已正确同步。本 PR 看起来已全面覆盖了 DSv4-Flash 的相关测试。
  3. 硬件与驱动兼容性风险(低):新增的 source .../vendors/.../set_env.bash 命令依赖于特定的 Ascend 工具包目录结构。如果 CI 镜像中的路径变更,脚本会因 || true 而静默失败,导致 DSV4-Flash 测试因缺少算子环境而出错。这是一种可预见的维护点。

用户与系统影响:

  • 直接影响范围:NPU 平台的 nightly CI 测试流程,特别是 Kimi K2.6 和 DeepSeek V4-Flash 模型的性能与准确性基准测试。
  • 影响程度:间接影响。改善了 CI 的可靠性和测试结果的可比性,确保性能和精度数据反映的是最新硬件与软件栈的真实水平。不直接影响运行时代码或生产服务。
    团队影响:

  • 为 NPU 平台的性能优化和模型支持工作提供了更可靠的验证基础。同步了多个测试用例的配置,减少了维护不同版本配置的负担。脚本改动可能影响负责 NPU CI 的工程师的调试流程。

测试配置同步 CI 基础设施依赖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论