已合并
test: add NPU coverage for Optimizer.zero_grad #43537
Jinfan Liu创建于 25 天前
test: add NPU coverage for Optimizer.zero_grad #43537
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 Jinfan Liu 的贡献)25 天前 创建了 pull request,commit cdf425cb
25 天前 关联了issue:【社区任务】7月社区任务第一期-Ascend for PyTorch API 一致性开发(17)
ascend-robot
25 天前 评论:
25 天前 评论:
atomgit-bot
25 天前 评论:
25 天前 评论:
变更摘要
本 PR 为 NPU 平台新增 Optimizer.zero_grad 的测试覆盖(纯测试改动,不涉及实现代码)。新增文件 test/npu/test_optimizer_zero_grad.py,通过 TestOptimizerZeroGrad 测试类在 NPU 设备上验证 zero_grad 的默认行为、布尔及真值/假值参数、以及非法调用签名,共 4 个测试用例。
主要改动
- 新增 NPU 测试文件: 添加
test/npu/test_optimizer_zero_grad.py,定义TestOptimizerZeroGrad测试类,并通过torch_npu.testing.testcase的run_tests运行。 - 测试辅助方法: 新增
_create_optimizer_with_gradient、_assert_gradient_is_none、_assert_gradient_is_zero,用于在 NPU 上创建带梯度的 SGD 优化器并断言parameter.grad为None或全零张量。 - 默认行为与布尔参数测试:
test_zero_grad_default_sets_gradient_to_none验证默认调用将梯度置为None;test_zero_grad_boolean_parameter_values验证True置空、False置零。 - 真值/假值参数测试:
test_zero_grad_non_boolean_truthy_and_falsy_values验证1/[1]走真值分支置空,0/[]/None走假值分支置零。 - 非法签名测试:
test_zero_grad_rejects_invalid_call_signatures验证多余位置参数(zero_grad(True, False))和未知关键字参数(zero_grad(unexpected=True))均抛出TypeError。


atomgit-bot
25 天前 评论:
25 天前 评论:
此处折叠了41条消息 查看更多
11 天前 添加了label:lgtm
11 天前 删除了label:ci-pipeline-passed
11 天前 合入了pull request
ascend-robot
11 天前 评论:
11 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#14087 [ commitID:2bdae958 ] 已完成


8 天前 修改了pull request 的描述
关联 issue
https://gitcode.com/Ascend/pytorch/issues/2739
API 功能
torch.optim.Optimizer.zero_grad(set_to_none=True)将优化器管理的全部 Parameter 的梯度清零或置为 None。默认set_to_none=True时直接把param.grad置为 None(更省内存);set_to_none=False时将梯度置为与参数同形状的全 0 张量。参数按 Python 真值语义处理(1/[1]等视为 True,0/[]/None等视为 False),与 PyTorch 官方行为一致。该操作仅涉及梯度内存管理,不触发算子计算,NPU 上与官方语义一致。官方用例情况
检索官方
test/目录后确认:官方test/test_optim.py等存在对zero_grad的调用,但未发现对set_to_none布尔/真值语义、非法调用签名(多参数/未知关键字)的直接覆盖,也没有 NPU 专项用例。本 PR 在test/npu/补充 NPU 侧直接验证。测试场景覆盖
新增
test/npu/test_optimizer_zero_grad.py,覆盖以下场景:optimizer.zero_grad()后param.grad is Noneset_to_none=True→ grad 为 None;set_to_none=False→ grad 非 None 且与torch.zeros_like逐元素相等(torch.equal)set_to_none=1、set_to_none=[1]→ grad 为 None;set_to_none=0、set_to_none=[]、set_to_none=None→ grad 为全 0(对齐官方真值处理)zero_grad(True, False)与zero_grad(unexpected=True)均抛TypeError资料补齐情况
Optimizer.zero_grad为 PyTorch 原生 API,Native API 资料中无单独 Restrictions/Notes 限制条目(NPU 行为与官方一致),本 PR 仅补充测试,不涉及 native API 文档修改。运行命令与日志
v2.7.1cd /workspace unset PYTHONPATH /workspace/venvs/master_py312/bin/python /workspace/user_data/tasks/_align-20260814/test-optimizer-zero-grad-master/test/npu/test_optimizer_zero_grad.py -vRan 4 tests ... OK(退出码 0)变更说明
test/npu/test_optimizer_zero_grad.py,仅补充测试,不修改任何实现代码JfanLiu:test-optimizer-zero-grad-v271,Target:v2.7.1