已关闭
[Usage]: 【API一致性任务】torch.Tensor.__setstate__ #4679
coconut创建于 9月8日关闭于 9月28日
9月8日 添加了label:help-wantedevent: api-consistencybot-triaged
9月8日 添加了label:usage
TorchNPU-Bot
9月8日 评论:
9月8日 评论:
检测到社区任务相关 issue,自动添加标签:event: api-consistency、help-wanted


9月8日 修改了issue 的描述
9月28日 关闭了 issue
9月28日 issue状态由 TODO 改变为 DONE
9月28日 添加了label:resolved
在提交新问题之前,请确保您已经在社区中搜索过相关问题,并使用了社区中提供的资源/工具后,仍未找到满意的解决方式。
环境信息
操作系统:Ubuntu
昇腾硬件信息:NPU
CANN软件版本:8.5.0
安装的对应软件版本:
torch 2.7.1、torch-npu 2.7.1
torch 2.9.0+cpu、torch_npu 2.9.0.post2
torch 2.10.0+cpu、torch_npu 2.10.0
torch 2.11.0+cu130、torch_npu 2.11.0rc1
torch 2.12.0+cu130、torch_npu 2.12.0rc1
使用场景及问题
来源任务
处理结论
根据 NPU API 一致性开发规范,本 Issue 用于记录 torch.Tensor.setstate 的源码依据、NPU 适配说明和实际运行结果。
一、API 功能
torch.Tensor.setstate 用于恢复 Tensor 的内部状态。本次测试重点验证:
二、社区用例覆盖情况
setstate 属于 Tensor 的内部状态恢复方法,PyTorch 社区测试主要通过序列化、JIT 或其他间接路径触发相关逻辑,缺少对该接口本身的直接行为验证。
因此,本任务需要补充直接 API 调用验证,确认 Ascend NPU 环境下的行为与原生 PyTorch 保持一致。
本次测试不包含 CUDA 到 NPU 的迁移路径,未使用:
tensor.cuda() torch.cuda.* device="cuda"三、测试源码片段
关联代码 PR 中的测试文件:
1. 根据当前加速器选择设备
device_type = acc.type if (acc := torch.accelerator.current_accelerator()) else "cpu"当环境中启用 NPU 时,device_type 为 npu;没有可用加速器时才回退到 cpu。950PR 日志确认:
2. 验证叶子 Tensor 的状态更新
tensor = torch.ones(2, device=device_type) self.assertFalse(tensor.requires_grad) tensor.__setstate__((True, None, None)) self.assertTrue(tensor.requires_grad)3. 验证非叶子 Tensor 的异常行为
with self.assertRaisesRegex( RuntimeError, "__setstate__ can be only called on leaf Tensors" ): (tensor + 1).__setstate__((False, None, None))该片段验证非叶子 Tensor 调用 setstate 时抛出与原生 PyTorch 一致的异常类型和错误信息。
四、适配和验证方案
五、产品支持情况
说明:
六、910B3 验证结果
910B3 环境日志目录:
v2.7.1
v2.11.0
v2.12.0
master 分支此前也已在 910B3 环境完成定向验证:
七、Ascend950PR 验证结果
1. 硬件环境
2. v2.7.1
3. v2.11.0
4. v2.12.0
2.11.0 和 2.12.0 日志中的 NPU allocator warning 是 CANN 与 SoC 版本相关的提示,不影响测试结果;三个版本的测试退出码均为 0。
八、资料补齐
不涉及资料补齐。
torch.Tensor.__setstate__属于私有方法,根据资料补齐要求,私有方法无需补齐文档,因此不修改: