已合并
test(nn): Add test cases for torch.nn.parameter.is_lazy #42625
m0_45651774创建于 28 天前
test(nn): Add test cases for torch.nn.parameter.is_lazy #42625
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 m0_45651774 的贡献)28 天前 创建了 pull request,commit e7caed6d
atomgit-bot
28 天前 评论:
28 天前 评论:
变更摘要
此 PR 新增了测试文件 test/nn/test_parameter_is_lazy.py,为 torch.nn.parameter.is_lazy API 补充独立的单元测试用例。测试覆盖了正向场景(UninitializedParameter 和 UninitializedBuffer 返回 True)与负向/边界场景(普通 Parameter、普通 Tensor、None 以及 materialize 后均返回 False),同时支持 NPU 设备自动检测。
主要改动
- 新增测试文件
test/nn/test_parameter_is_lazy.py:添加了 49 行完整的独立测试用例文件,专门验证torch.nn.parameter.is_lazy。 - 新增
TestIsLazy测试类:包含 6 个测试方法,涵盖is_lazy对UninitializedParameter、UninitializedBuffer、普通Parameter、普通Tensor、None以及materialize后状态的返回值验证。 - 正向逻辑验证:
test_is_lazy_uninitialized_parameter和test_is_lazy_uninitialized_buffer分别确认延迟参数和延迟缓冲区被正确识别,is_lazy返回True。 - 负向与边界逻辑验证:
test_is_lazy_regular_parameter、test_is_lazy_regular_tensor、test_is_lazy_none以及test_is_lazy_after_materialize确保已实例化对象、空值以及物化后的延迟参数均返回False,避免假阳性。 - NPU 设备支持:通过
torch.accelerator.current_accelerator()动态获取设备类型,确保所有测试用例可在 NPU 或 CPU 上正确运行。


ascend-robot
28 天前 评论:
28 天前 评论:
atomgit-bot
28 天前 评论:
28 天前 评论:
代码审查
我已经完整审查了该 diff 中的所有变更。以下是分析过程:
逐项审查
1. 文件头部(第 1-8 行)
- 模块文档字符串清晰地说明了测试目的。
- 导入语句
from torch.testing._internal.common_utils import TestCase, run_tests符合该仓库中其他测试文件的惯例(如test_global_module_full_backward_hooks.py、test_unflatten_dense_tensors.py等均使用相同导入)。
2. 设备类型检测(第 11 行)
device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu"使用海象运算符:=,Python 3.8+ 支持(setup.py确认最低支持 3.8)。- 当
current_accelerator()返回None(无加速器)时,三元条件取"cpu",acc.type不会被求值,逻辑正确。 - 此模式与仓库中 20+ 个其他测试文件完全一致,是项目惯用写法。
3. TestIsLazy 测试类(第 14-45 行)
逐一验证每个测试方法:
| 方法 | 验证对象 | 预期结果 | 是否正确 |
|---|---|---|---|
test_is_lazy_uninitialized_parameter |
UninitializedParameter |
True |
✓ |
test_is_lazy_uninitialized_buffer |
UninitializedBuffer |
True |
✓ |
test_is_lazy_regular_parameter |
torch.nn.Parameter |
False |
✓ |
test_is_lazy_regular_tensor |
普通 Tensor |
False |
✓ |
test_is_lazy_none |
None |
False |
✓ |
test_is_lazy_after_materialize |
materialize 后的参数 | False |
✓ |
关键验证点:
torch.nn.parameter.UninitializedParameter(device=device_type)— 与test_uninitialized_parameter_cls_to_become.py:22用法一致,device关键字参数有效。torch.nn.parameter.UninitializedBuffer(device=device_type)— 符合 PyTorch API。uninit_param.materialize(shape=(3, 3))— 与test_uninitialized_parameter_cls_to_become.py:26完全一致,合法调用。torch.nn.parameter.is_lazy()— 该函数在test/test_modules.py:834处已有调用,API 存在且可用。
4. 测试入口(第 48-49 行)
- 标准的
if __name__ == "__main__": run_tests(),无问题。
关闭总结
- 已审查文件:
test/nn/test_parameter_is_lazy.py— 无问题。 - 发现数量:0(P0-P3 均为 0)。
- 整体风险评估:此变更是纯粹的测试用例新增,代码逻辑正确,API 调用与仓库中现有测试保持一致,不存在正确性、安全、可靠性或回归风险。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


28 天前 添加了label:ascend-cla/yes
此处折叠了78条消息 查看更多
17 天前 添加了label:approved
Jingwei Huang
16 天前 评论:
16 天前 评论:
/lgtm


16 天前 添加了label:lgtm
16 天前 合入了pull request
ascend-robot
16 天前 评论:
16 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13637 [ commitID:3bfa1716 ] 已完成


【合入来源】
[Usage]: torch.nn.parameter.is_lazy在 torch-npu 的资料未明确标注支持状态,但实际在 NPU 环境下可正常使用
请勿携带内部流程信息(需求链接、问题单、内部issue等)
【修改方案】
一、API 功能说明
二、测试文件test_parameter_is_lazy.py完整验证该 API 的原因
PyTorch 官方社区暂无针对该 API 的直接独立用例覆盖,有相关调用,但是验证功能不充分,因此自行编写用例并提交到 test 目录。
三、NPU适配
【资料变更】
涉及
已检查文档,https://gitcode.com/Ascend/pytorch/tree/master/docs/zh/api/native_api 下面各个版本未写了该API已支持,所以需要提交PR修改资料。
【接口变更】
不涉及
【功能验证】
在2.7.1、2.11.0 、2.12.0版本上执行该用例,均通过,日志如下:
测试命令:
【CheckList】