已合并
test(nn): Add test cases for torch.nn.parameter.is_lazy #42612
test(nn): Add test cases for torch.nn.parameter.is_lazy #42612
已合并
m0_45651774创建于 27 天前
m0_45651774
m0_45651774
27 天前

【合入来源】

[Usage]: torch.nn.parameter.is_lazy在 torch-npu 的资料未明确标注支持状态,但实际在 NPU 环境下可正常使用
请勿携带内部流程信息(需求链接、问题单、内部issue等)

【修改方案】

一、API 功能说明

torch.nn.parameter.is_lazy 用于判断一个参数(parameter)或缓冲区(buffer)是否处于 lazy(延迟初始化)状态。
判断输入对象 param 是否为:
	• torch.nn.UninitializedParameter
	• torch.nn.UninitializedBuffer
如果是,则返回 True;否则返回 False。

二、测试文件test_parameter_is_lazy.py完整验证该 API 的原因
PyTorch 官方社区暂无针对该 API 的直接独立用例覆盖,有相关调用,但是验证功能不充分,因此自行编写用例并提交到 test 目录。

1. 覆盖了 API 的所有正向逻辑(True 场景)
is_lazy 的核心功能是判断对象是否为未初始化的延迟(Lazy)状态。测试通过以下用例验证了所有符合该特性的对象:
未初始化的 Parameter (UninitializedParameter):验证 API 能正确识别延迟参数,返回 True。
未初始化的 Buffer (UninitializedBuffer):验证 API 能正确识别延迟 Buffer,返回 True。
2. 覆盖了全面的负向与边界逻辑(False 场景)
测试不仅验证了“是”的情况,还通过对比组排除了其他常见数据类型的干扰,确保没有假阳性(False Positive):
普通 Parameter:已实例化的 Parameter 应返回 False。
普通 Tensor:标准的 PyTorch 张量应返回 False。
空值 None:处理非法或边界输入时,API 不会崩溃并能安全返回 False。
3. 验证了生命周期变化(动态状态转换)
延迟加载(Lazy Model)的核心机制在于“先占位,后实例化”。
test_is_lazy_after_materialize 完整模拟了参数的生命周期:
1.初始为 UninitializedParameter  is_lazy 返回 True。
2.调用 .materialize() 完成实体化  is_lazy 返回 False。
此用例确保了 API 能精准感知对象从 Lazy  Concrete 的状态转变。
4. 适配特定硬件环境(NPU 跨设备验证)
代码开头使用 torch.accelerator.current_accelerator() 动态获取设备类型(如 NPU/Ascend)。
所有的验证用例在创建 Tensor/Parameter 时,都显式指定了 device=device_type。这不仅验证了 API 在标准 CPU 上的逻辑,还确保了其在 NPU 等特定硬件加速器上的兼容性与正确性。

三、NPU适配

`torch.nn.parameter.is_lazy` 是 PyTorch 中用于判断参数是否处于 Lazy 初始化状态的纯 Python 层辅助 API。其核心逻辑仅依赖 `UninitializedParameter` 和 `UninitializedBuffer` 类型判断,不涉及 Tensor 计算、设备管理、内存分配或底层 Kernel 调用。核心逻辑不耦合任何特定硬件(包括 GPU/NPU/CPU),因此适配昇腾 NPU 时无需修改这个 API 本身,可直接复用。

【资料变更】

涉及
已检查文档,https://gitcode.com/Ascend/pytorch/tree/master/docs/zh/api/native_api 下面各个版本未写了该API已支持,所以需要提交PR修改资料。

【接口变更】

不涉及

【功能验证】

说明测试场景,测试方法。如果本次测试方式与常规单元测试不同,请详细说明您的测试步骤
新增/变更内容是否已新增/适配UT测试用例看护,并补充测试自验证截图

在2.7.1、2.11.0 、2.12.0版本上执行该用例,均通过,日志如下:
测试命令:

python test/nn/test_parameter_is_lazy.py

image.png

【CheckList】

PR提交人对以下CheckList自检项进行全量自检,自检通过或不涉及,均修改 [ ] 为 [x]

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 m0_45651774 的贡献)
m0_45651774m0_45651774
27 天前 创建了 pull request,commit 61f3d7b0
atomgit-bot
atomgit-bot
27 天前 评论:

变更摘要

此 PR 新增测试文件 test/nn/test_parameter_is_lazy.py,为 torch.nn.parameter.is_lazy API 补充完整的验证用例。测试覆盖了正向逻辑(UninitializedParameterUninitializedBuffer 返回 True)、负向与边界逻辑(普通 Parameter、普通 Tensor、None 返回 False),以及延迟参数在调用 materialize 后的状态转换场景。所有测试通过 torch.accelerator.current_accelerator() 自动适配 NPU 或 CPU 设备。

主要改动

  • 新增 TestIsLazy 测试类:在 test/nn/test_parameter_is_lazy.py 中定义继承自 TestCaseTestIsLazy 类,包含 6 个测试方法,覆盖 torch.nn.parameter.is_lazy 的全部预期行为。
  • 正向场景验证test_is_lazy_uninitialized_parametertest_is_lazy_uninitialized_buffer 分别验证 UninitializedParameterUninitializedBuffer 使 is_lazy 返回 True
  • 负向与边界场景验证test_is_lazy_regular_parametertest_is_lazy_regular_tensortest_is_lazy_none 分别验证已实例化的 Parameter、普通 Tensor 和 None 均使 is_lazy 返回 False
  • 状态转换验证test_is_lazy_after_materialize 验证 UninitializedParameter 在调用 materializeis_lazy 返回 True,调用后返回 False,覆盖延迟初始化的生命周期变化。
  • NPU 设备自动适配:通过 torch.accelerator.current_accelerator() 获取当前加速器类型,确保张量和参数在 NPU 或 CPU 上正确创建。
likedislike
atomgit-bot
atomgit-bot
27 天前 评论:

代码审查

审查总结

共审查了 1 个变更文件

  • test/nn/test_parameter_is_lazy.py:发现 1 个问题(P3)

各优先级问题统计

优先级 数量
P0 0
P1 0
P2 0
P3 1

整体风险评估

低风险。该变更是一个纯新增的测试文件,测试逻辑正确、覆盖全面(正向、负向、边界、状态转换)。唯一的问题是缺少 import torch_npu,可能导致测试静默退化为 CPU 执行而非预期的 NPU 验证——这不影响测试通过/失败的结果,但会降低测试对 NPU 场景的实际覆盖价值。建议在合入前补上该导入即可。

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

likedislike
ascend-robotascend-robot成员
27 天前 添加了label:ascend-cla/yes
此处折叠了58条消息 查看更多
Jingwei Huang
Jingwei Huang成员
15 天前 评论:

/lgtm

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

Pull Request 已合并或已关闭。

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

likedislike
ascend-robot
ascend-robot成员
15 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13635 [ commitID:d89eb203 ] 已完成
likedislike