Prhub

#7337 [ci] chore: add three baselines for npu's nightly ci

原始 PR 作者 daikang6 合并时间 2026-08-10 20:14 文件变更 2 提交数 40 评论 0 代码增减 +26 / -11

执行摘要

为 NPU nightly CI 新增三个基线对比检查

PR body 明确说明目标为“add three baselines for npu's nightly ci”,即给 NPU 的 nightly CI 增加基线对比机制。结合此前多个 NPU CI 相关 PR(如 #7338、#7311、#7305 等),团队在持续完善 NPU 平台的持续集成与回归检测能力,基线对比用于自动发现训练结果偏离历史水平的情况。

值得 CI/基础设施维护者快速浏览,了解 NPU nightly 的基线对比模式。设计上简单直接,但存在任务名称与实际脚本不一致的小问题,建议后续清理。无需深入精读。

讨论亮点

该 PR 无 review 评论,仅得到 wucong25 的 APPROVED 批准。整个变更过程通过 40 个 commit 反复调试(如“测试基线-1”“新增对标GPU的UT/ST”等),但最终合并时只保留了格式化后的测试文件和 CI 配置的净改动,没有公开的设计讨论或分歧记录。

实现拆解

  1. 修改 .github/workflows/nightly_ascend.yml:在现有三个 nightly 任务(dapo-moonlight-16b-megatron-vllm、gspo-qwen3-30b-megatron-vllm、grpo-qwen3-8b-fsdp2-vllm)的脚本执行之后,各新增一个名为“Running nightlyCI_* checking script”的 step。每个 step 先 cd 到 /root/.cache/nightly_log/,再执行 python check_npu.py --log <日志路径> --base <基线文件路径>,日志和基线均存放在对应任务目录下。该脚本会对比本次运行日志与基线文件,输出差异并决定 CI 是否失败。

  2. 修改 tests/trainer/ppo/test_reinforce_pp_multiturn_on_cpu.py:将 test_observation_span_does_not_block_returns 中的函数调用格式由多行改为单行,并重新排版 test_batch_dimension 中的 mask/rewards 张量列表。这属于 pre-commit 自动格式化,无逻辑变化。

  3. 未引入新的测试、配置文件或部署配套,基线文件(baseline_*.txt)由外部生成存放于 nightly log 目录,check_npu.py 的具体实现不在本次变更范围内。

文件 模块 状态 重要度
.github/workflows/nightly_ascend.yml CI 配置 modified 4.09
tests/trainer/ppo/test_reinforce_pp_multiturn_on_cpu.py 单元测试 modified 4.11

关键源码片段

.github/workflows/nightly_ascend.yml infrastructure

核心变更文件,为三个 nightly 任务添加基线检查 step,是 PR 的主体。

# .github/workflows/nightly_ascend.yml 中新增的基线检查 step 示例
# 每个任务在训练脚本执行完后,进入 nightly_log 目录运行 check_npu.py
# --log 指定本次运行日志,--base 指定预存的基线文件
- name: Running nightlyCI_dapo-moonlight-16b-megatron-vllm_ascend checking script
  run: |
    cd /root/.cache/nightly_log/
    python check_npu.py --log run_dapo_moonlight-16b_megatron_npu/run_dapo_moonlight-16b_megatron_npu.log --base run_dapo_moonlight-16b_megatron_npu/baseline_dapo_moonlight-16b_megatron_npu.txt
tests/trainer/ppo/test_reinforce_pp_multiturn_on_cpu.py test-coverage

被 pre-commit 格式化,无逻辑变化,但作为 PR 文件之一体现变更被清理后的最终状态。

# tests/trainer/ppo/test_reinforce_pp_multiturn_on_cpu.py
# 格式化后的调用示例:函数调用合并为单行,语义完全不变
def test_observation_span_does_not_block_returns(self):
    """Core regression test: observation tokens must not block reward propagation."""
    config = _config(gamma=1.0)
    compact_mask = torch.ones(1, 4)
    compact_rewards = torch.tensor([[0.0, 0.0, 0.0, 1.0]])
    expanded_mask = torch.tensor([[1.0, 1.0, 0.0, 0.0, 1.0, 1.0]])
    expanded_rewards = torch.tensor([[0.0, 0.0, 0.0, 0.0, 0.0, 1.0]])
​
    # 对比紧凑序列与插入 observation 后的序列,合法 token 的 return 应一致
    _, compact_returns = compute_reinforce_plus_plus_outcome_advantage(compact_rewards, compact_mask, config=config)
    _, expanded_returns = compute_reinforce_plus_plus_outcome_advantage(expanded_rewards, expanded_mask, config=config)
​
    compact_valid = compact_returns[compact_mask.bool()]
    expanded_valid = expanded_returns[expanded_mask.bool()]
    torch.testing.assert_close(compact_valid, expanded_valid)

评论区精华

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

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

风险与影响

  1. 基线文件缺失或过期:check_npu.py 依赖对应的 baseline_*.txt 文件,若基线文件未同步生成或内容陈旧,可能导致 nightly CI 误报失败。

  2. 任务名与实际脚本不一致:patch 中 gspo-qwen3-30b 任务新增 step 的日志路径指向 run_grpo_qwen3_30b_megatron_sglang_npu,但 step 名写为 vllm,虽然不影响脚本执行,但会造成后续排查混淆。

  3. check_npu.py 的判定逻辑未知:该脚本不在本 PR 内,其对比阈值和失败标准未明确,存在对比过严或过松的风险。

  4. 无测试覆盖:本变更纯粹是 CI 配置,没有对应的本地验证方式,错误只能在 nightly 运行中发现。

影响范围局限于 NPU nightly CI 流水线,为三个训练任务增加回归检测能力,提升 CI 对训练异常(如损失爆炸、性能下降)的感知。对用户无直接功能影响,对维护团队则需要在 nightly 运行前确保基线文件就绪。

基线文件可用性依赖 任务名与脚本不一致 check_npu.py 判定逻辑未评审

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论