已合并
fix: correct init_step_count and erase_step_count cache behavior #42170
chenlan114514创建于 7月20日
fix: correct init_step_count and erase_step_count cache behavior #42170
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 chenlan114514 的贡献)7月20日 创建了 pull request,commit ae9291f6
7月20日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(39),【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(41),[社区任务]: KinetoStepTracker.init_step_count 和 KinetoStepTracker.erase_step_count 的测试覆盖与 NPU 适配检查
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
7月20日 评论:
7月20日 评论:
变更摘要
本次 PR 修复了 torch.autograd.profiler.KinetoStepTracker 中 init_step_count 和 erase_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 后步数正确下降,以及混合操作序列的完整工作流验证。


ascend-robot
7月20日 评论:
7月20日 评论:
atomgit-bot
7月20日 评论:
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_count和erase_step_count的补丁和测试。补丁逻辑正确,测试覆盖全面且预期值准确。发现的两个 P3 问题(未使用的死代码变量和测试缺少 tearDown)均不影响功能正确性,属于代码整洁性改进建议。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


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


18 天前 添加了label:approvedlgtm
18 天前 合入了pull request
ascend-robot
18 天前 评论:
18 天前 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


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


【合入来源】
任务:
【开源实习】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_countKinetoStepTracker.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_stepinit_step_count不改变全局步数test_increment_takes_maximumcurrent_step返回所有 requester 步数的最大值test_erase_keeps_step_monotonictest_erase_all_requesters_keeps_historytest_erase_return_value_contracterase_step_count返回bool表示删除是否成功test_reinit_is_idempotentinit_step_count无副作用test_new_requester_after_erase_inherits_zero【资料变更】
不涉及。
【接口变更】
不涉及。
【功能验证】
测试场景:新增测试用例验证
补丁本地验证 :
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】