Prhub

#26353 NPU Nightly Pipeline Skip Test Case Adaptation and Recovery Testing

原始 PR 作者 liuxianglong17 合并时间 2026-05-29 09:29 文件变更 17 提交数 6 评论 10 代码增减 +151 / -118

执行摘要

恢复并适配 NPU Nightly 跳过的测试用例

在 NPU Nightly 流水线中,一些测试用例因执行失败或已解决的问题而被跳过。这些测试用例需要适配当前环境并恢复到 Nightly 流水线中进行测试。

建议合并。该 PR 恢复了重要的 nightly 测试覆盖,且针对环境变化做了适配,review 中提出的问题均已解决。后续可考虑增加内存监控或资源限制来防止潜在 OOM。

讨论亮点

Reviewer AndyLi429 提出了四个问题:

  • tearDown 缺失:新增的 test_npu_no_chunked_prefill.py 没有进程清理代码。作者在后续提交中添加了 tearDownClass
  • 测试删除疑问:怀疑误删除 test_npu_no_overlap_scheduler.py。作者解释为误操作,已恢复。
  • 参数省略:Kimi-VL-A3B 测试移除了 other_args。作者说明因为测试目标从 GSM8K 精度改为 MMMU,使用了基类 TestVLMModels,无需再次指定。
  • OOM 风险:担忧 setUpClass 启动服务器后 run_bench_serving 可能内存溢出。作者确认实际测试未触发 OOM。
    所有问题均已解决。

实现拆解

实现步骤:

  1. 移除跳过标记:在多个测试文件的 register_npu_ci 调用中删除 disabled 参数,使测试重新注册到 nightly 套件。受影响文件包括 test_npu_no_chunked_prefill.py(旧)、test_npu_kimi_vl_a3b_instruct.pytest_npu_llama_3_2_11b_vision_instruct.pytest_npu_openai_function_calling.pytest_npu_deepep_low_latency_qwen3_next.py 等。

  2. 重写无分块预填充测试:删除旧文件 test/registered/ascend/basic_function/parameter/test_npu_no_chunked_prefill.py,在 memory_and_scheduling 目录下新建同名文件。新测试类 TestNoChunkedPrefill 改用 setUpClass 启动独立服务器进程、tearDownClass 清理,并使用 run_eval 进行 MMLU 精度评估(阈值 0.65),同时保留 run_bench_serving 的压力测试。

  3. 统一 VLM 测试基类:将 TestKimiVLA3BInstruct 从继承 GSM8KAscendMixinCustomTestCase 改为继承共享基类 TestVLMModels,评估数据集从 GSM8K 切换为 MMMU,阈值设为 0.2。移除了不再需要的 other_args(如 --trust-remote-code--tp-size 等),因为基类已处理。类似地,TestLlama3211BVisionInstruct 也改为从 test_ascend_utils 导入模型路径常量并添加文档字符串。

  4. 调整 DeepEP 低延迟测试参数:在 test_npu_deepep_low_latency_qwen3_next.py 中,启用 CUDA Graph 批量大小(--cuda-graph-bs 2 4 6 8)替代 --disable-cuda-graph;设置 DEEPEP_NORMAL_LONG_SEQ_PER_ROUND_TOKENS=3000DEEPEP_NORMAL_LONG_SEQ_ROUND=10SGLANG_DEEPEP_BF16_DISPATCH=1 等环境变量以适配 NPU BF16 要求;增大 SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK 到 160。

  5. 改进函数调用测试:在 test_npu_openai_function_calling.py 中,test_function_call_required 放宽断言:不再要求特定函数名 get_weather 和参数值,仅验证 tool_calls 存在且参数为合法 JSON。添加 strict: true 到工具定义中。

这些改动使之前因跳过而缺失的测试覆盖重新生效。

文件 模块 状态 重要度
test/registered/ascend/basic_function/memory_and_scheduling/test_npu_no_chunked_prefill.py 无分块预填充 added 7.56
test/registered/ascend/basic_function/parameter/test_npu_no_chunked_prefill.py 无分块预填充 removed 6.9
test/registered/ascend/vlm_models/test_npu_kimi_vl_a3b_instruct.py Kimi-VL-A3B modified 6.43
test/registered/ascend/vlm_models/test_npu_llama_3_2_11b_vision_instruct.py Llama-3.2-Vision modified 5.46
test/registered/ascend/interface/test_npu_openai_function_calling.py 函数调用 modified 5.31
test/registered/ascend/basic_function/parallel_strategy/expert_parallelism/test_npu_deepep_low_latency_qwen3_next.py DeepEP 低延迟 modified 4.7

关键符号

TestNoChunkedPrefill.setUpClass TestNoChunkedPrefill.tearDownClass TestNoChunkedPrefill.test_mmlu TestNoChunkedPrefill.test_no_chunked_prefill_without_radix_cache TestKimiVLA3BInstruct.test_vlm_mmmu_benchmark TestLlama3211BVisionInstruct.test_vlm_mmmu_benchmark

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

新增测试缺少 tearDown 正确性

AndyLi429 指出新增的 test_npu_no_chunked_prefill.py 没有进程清理代码 'where is tear down?'。

结论:作者在后续提交中添加了 tearDownClass 清理进程。 · 已解决

测试文件删除疑问 question

AndyLi429 询问 test_npu_no_overlap_scheduler.py 是否被删除。

结论:作者解释为误操作,已恢复该文件。 · 已解决

Kimi-VL-A3B 测试参数省略 设计

AndyLi429 询问移除 other_args 的原因。

结论:作者说明因为测试从 GSM8K 切换为 MMMU,使用了共享基类 TestVLMModels,无需额外参数。 · 已解决

setUpClass 与 run_bench_serving 的 OOM 风险 性能

AndyLi429 担心 setUpClass 启动服务器后运行 run_bench_serving 容易 OOM。

结论:作者确认实际测试中未遇到 OOM。 · 已解决

风险与影响

主要风险包括:

  1. 无分块预填充测试在同一进程中先后启动服务器和运行 benchmark,若内存不足可能 OOM,但作者验证未发生。
  2. DeepEP 环境变量修改可能影响其他共用 NPU 节点的测试,需要监控稳定性。
  3. 恢复的测试可能会暴露之前隐藏的 flaky 问题,尤其是函数调用测试放宽断言后可能覆盖偏差。
    总体风险可控。

影响仅限于 NPU Nightly CI 流水线:增加了约 5 个测试用例的回归覆盖,覆盖无分块预填充、多模态 VLM 精度、DeepEP MoE 低延迟部署、OpenAI 函数调用等功能。对 CUDA 或其他硬件后端无影响。团队需在合并后观察 nightly 流水线是否持续稳定。

OOM 风险 环境依赖 测试 flakiness

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论