已合并
fix: correct init_step_count and erase_step_count cache behavior #42170
fix: correct init_step_count and erase_step_count cache behavior #42170
已合并
chenlan114514创建于 7月20日
chenlan114514
chenlan114514
7月20日

【合入来源】

任务:

【开源实习】Torch-NPU API一致性对齐:补齐测试用例、API功能对齐、补齐文档(39)#2968
【开源实习】Torch-NPU API一致性对齐:补齐测试用例、API功能对齐、补齐文档(41)#2971

任务分析issue:

【社区任务】: KinetoStepTracker.init_step_count 和 KinetoStepTracker.erase_step_count 的测试覆盖与 NPU 适配检查 #3048

本次提交为 torch.autograd.profiler.KinetoStepTracker 的两个方法补充测试用例:

  • KinetoStepTracker.init_step_count
  • KinetoStepTracker.erase_step_count

【API 功能介绍】

  • init_step_count(requester):为指定请求者初始化步数计数,首次调用时注册并将步数置为 0,重复调用无操作。
  • erase_step_count(requester):移除指定请求者的步数计数记录,全局步数保持历史最大值。

【修改内容】

新增测试文件 test/profiler/test_kineto_step_tracker.py,为原生行为建立回归测试,覆盖以下 7 个核心场景:

测试用例 验证内容
test_init_does_not_alter_global_step init_step_count 不改变全局步数
test_increment_takes_maximum current_step 返回所有 requester 步数的最大值
test_erase_keeps_step_monotonic 删除 requester 后全局步数不下降
test_erase_all_requesters_keeps_history 删除全部 requester 后全局步数保留历史最大值
test_erase_return_value_contract erase_step_count 返回 bool 表示删除是否成功
test_reinit_is_idempotent 重复 init_step_count 无副作用
test_new_requester_after_erase_inherits_zero 新 requester 继承当前全局步数,保持步数对齐

【资料变更】

不涉及。


【接口变更】

不涉及。


【功能验证】

测试场景:新增测试用例验证

补丁本地验证

python -c "
import torch
import torch_npu
print(f'torch={torch.__version__}')
print(f'torch_npu={torch_npu.__version__}')
print(f'accelerator={torch.npu.get_device_name() if torch.npu.is_available() else \"cpu\"}')
"
python /workspace/ascend-pytorch/test/profiler/test_kineto_step_tracker.py -v

测试结果:

torch=torch 2.7.1+cpu
torch_npu=torch-npu 2.7.1.post4
accelerator=Ascend910B3
test_erase_all_requesters_keeps_history (__main__.TestKinetoStepTracker.test_erase_all_requesters_keeps_history)
Global step retains historical maximum even after all requesters are erased. ... ok
test_erase_keeps_step_monotonic (__main__.TestKinetoStepTracker.test_erase_keeps_step_monotonic)
Erasing any requester never decreases global step (monotonic contract). ... ok
test_erase_return_value_contract (__main__.TestKinetoStepTracker.test_erase_return_value_contract)
erase_step_count returns bool indicating whether deletion succeeded. ... ok
test_increment_takes_maximum (__main__.TestKinetoStepTracker.test_increment_takes_maximum)
current_step always equals the maximum step among all requesters. ... ok
test_init_does_not_alter_global_step (__main__.TestKinetoStepTracker.test_init_does_not_alter_global_step)
init_step_count only registers requester, never changes global step. ... ok
test_new_requester_inherits_current_step (__main__.TestKinetoStepTracker.test_new_requester_inherits_current_step)
New requester inherits current global step for alignment. ... ok
test_reinit_is_idempotent (__main__.TestKinetoStepTracker.test_reinit_is_idempotent)
Calling init_step_count repeatedly on the same requester has no side effect. ... ok

----------------------------------------------------------------------
Ran 7 tests in 0.003s

OK

【CheckList】

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 chenlan114514 的贡献)
chenlan114514chenlan114514
7月20日 创建了 pull request,commit ae9291f6
chenlan114514chenlan114514
7月20日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(39),【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(41),[社区任务]: KinetoStepTracker.init_step_count 和 KinetoStepTracker.erase_step_count 的测试覆盖与 NPU 适配检查
atomgit-bot
atomgit-bot
7月20日 评论:

变更摘要

本次 PR 修复了 torch.autograd.profiler.KinetoStepTrackerinit_step_counterase_step_count 两个 API 的缓存更新缺陷,并在 torch_npu/__init__.py 中通过 monkey-patch 方式覆盖原生实现,同时新增针对性的单元测试文件以验证修复后的正确行为。

主要改动

  • 修复 init_step_count 缓存行为:在 torch_npu/__init__.py 中添加 _patched_init_step_count,确保新 requester 的步数被正确初始化为 0 并同步更新 _current_step 缓存,替代原生实现中可能出现的步数未归零问题。
  • 修复 erase_step_count 缓存行为:在 torch_npu/__init__.py 中添加 _patched_erase_step_count,在删除 requester 后重新计算 _step_dict 中剩余值的最大值来更新 _current_step,解决原生实现未更新缓存的问题。
  • 新增 KinetoStepTracker 单元测试:新增 test/profiler/test_kineto_step_tracker.py,包含 6 个测试用例,覆盖 init_step_count 的幂等性与初始化为零、多 requester 最大步数逻辑、erase_step_count 的基础语义、删除非最大值 requester 不影响当前步数、删除最大值 requester 后步数正确下降,以及混合操作序列的完整工作流验证。
likedislike
atomgit-bot
atomgit-bot
7月20日 评论:

代码审查

所有文件均已审查完毕,以下为本次审查的总结。


审查总结

  • 已审查文件数:2

    • test/profiler/test_kineto_step_tracker.py — 发现 1 个问题(P3)
    • torch_npu/__init__.py — 发现 1 个问题(P3)
  • 按优先级统计

    • P0:0
    • P1:0
    • P2:0
    • P3:2
  • 整体风险判断低风险。本次变更引入了针对 KinetoStepTracker.init_step_counterase_step_count 的补丁和测试。补丁逻辑正确,测试覆盖全面且预期值准确。发现的两个 P3 问题(未使用的死代码变量和测试缺少 tearDown)均不影响功能正确性,属于代码整洁性改进建议。

⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。

likedislike
此处折叠了215条消息 查看更多
li_jing_hw成员
18 天前 评论:

/approve

likedislike
ascend-robotascend-robot成员
18 天前 添加了label:approvedlgtm
ascend-robotascend-robot成员
18 天前 合入了pull request
ascend-robot
ascend-robot成员
18 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
18 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13736 [ commitID:a9f8b6f0 ] 已完成
likedislike