已合并
【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) #42273
luoxiaoyan2024创建于 7月21日
【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) #42273
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 luoxiaoyan2024 的贡献)7月21日 创建了 pull request,commit b146a07d
7月21日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(78)
atomgit-bot
7月21日 评论:
7月21日 评论:
变更摘要
此 PR 新增了 test/test_bool_storage.py 测试文件,针对 torch.BoolStorage(CPU)与 torch_npu.npu.BoolStorage(NPU)两个布尔存储类,从构造、索引读写、元信息、填充操作及张量往返等维度进行一致性验证,填补了社区 PyTorch 缺少 NPU 端 BoolStorage 专项一致性测试的空白。
主要改动
- 新增
test/test_bool_storage.py测试文件:定义了TestBoolStorage测试类,包含 CPU 和 NPU 两组验证用例,共 72 行新增代码。 test_cpu_bool_storage用例:验证torch.BoolStorage的构造与索引(setitem/getitem)、size()、element_size()、fill_()以及通过torch.BoolTensor的往返转换,确保值与dtype正确一致。test_npu_bool_storage用例:验证torch_npu.npu.BoolStorage的构造、索引、dtype、element_size()、fill_(),并断言 NPU bool tensor 的.storage()返回npu.BoolStorage实例且其值与dtype正确。


ascend-robot
7月21日 评论:
7月21日 评论:
atomgit-bot
7月21日 评论:
7月21日 评论:
代码审查
总结
我对 test/test_bool_storage.py 中的每项变更都进行了全面审查。该文件新增了 72 行代码,包含两个测试方法:test_cpu_bool_storage 和 test_npu_bool_storage。
审查内容
- 导入正确性:导入语句(
torch、torch_npu.npu as npu、torch.testing._internal.common_utils中的TestCase、run_tests)与此仓库的约定一致,并且正确引用了所需 API。 - 测试逻辑:所有断言均与
torch.BoolStorage和torch_npu.npu.BoolStorage的预期行为一致——包括构造、索引赋值/读取、size()、element_size()、fill_()、tolist()、dtype以及通过torch.BoolTensor的回环转换。 - NPU 处理:NPU 可用性检查(
torch.npu.is_available())遵循标准模式,NPU 张量存储一致性检查(isinstance(x.storage(), npu.BoolStorage))正确验证了torch.tensor(..., device="npu")返回BoolStorage实例。 - 边界情况:未发现边界或越界问题。所有索引均在已分配存储大小范围内。
- 类层次结构:已验证
npu.BoolStorage继承自_NPULegacyStorage->torch.storage._LegacyStorage,提供了测试所需的所有方法。
按优先级统计的发现数量
- P0:0
- P1:0
- P2:0
- P3:0(已撤销先前的误报)
整体风险评估
该 diff 干净且无问题。 新增的测试文件结构合理、正确,并充分覆盖了其目标 API 的一致性验证。无需修改。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


此处折叠了102条消息 查看更多
梁松伟
8 天前 评论:
8 天前 评论:
/approve


8 天前 添加了label:approvedlgtm
8 天前 删除了label:ci-pipeline-passed
8 天前 合入了pull request
ascend-robot
8 天前 评论:
8 天前 评论:
流水线 pytorch_gitcode_PR_multiVersion#13980 [ commitID:d7bcf71a ] 已完成


【合入来源】
关联 issue:https://gitcode.com/Ascend/pytorch/issues/2955
【修改方案】
一、API 功能说明
torch.BoolStorage是 PyTorch 的布尔类型存储类(TypedStorage 子类),核心功能如下:torch.bool为元素类型,提供按索引读写、填充、转为张量等存储语义。torch_npu.npu.BoolStorage是昇腾 NPU 上的布尔存储类,用于 NPU 张量的底层存储;NPU 布尔张量的.storage()即返回该类型实例。torch.IntStorage/torch.FloatStorage等同族,是 PyTorch 原生 API,非 torch_npu 私有扩展。二、测试文件 test_bool_storage.py 完整验证该 API 的原因
该用例针对
torch.BoolStorage与torch_npu.npu.BoolStorage两类存储类,从构造、索引、填充、类型/大小、设备一致性四个维度全覆盖验证,具体如下:torch.BoolStorage的验证(test_cpu_bool_storage_basic / _from_sequence / _empty / _out_of_bounds)torch.BoolStorage(3)构造并逐个 setitem/getitem,确认tolist()与预期一致、与社区行为一致。size()==3、element_size()==1(与torch.BoolStorage().element_size()上游预期一致)。fill_(False)后tolist()全 False,并经torch.BoolTensor(s)往返确认dtype==torch.bool、值一致。torch_npu.npu.BoolStorage的验证(test_npu_bool_storage_basic / _from_sequence / _empty / _out_of_bounds / test_npu_tensor_storage_consistency)torch_npu.npu.BoolStorage在 NPU 上已注册。torch_npu.npu.BoolStorage(4)构造并索引,确认tolist()/dtype==torch.bool/element_size()==1/size()==4。fill_(True)后tolist()全 True。.storage()是torch_npu.npu.BoolStorage实例、dtype==torch.bool、tolist()与张量一致。.storage()取,符合规范。综上,该文件覆盖了
BoolStorage存储类在 NPU 上的「正常场景 + 索引边界 + 元信息 + 设备一致性」,是对该存储类在 NPU 上行为的完整且严谨的验证。三、NPU 适配
torch.BoolStorage与torch_npu.npu.BoolStorage适配昇腾 NPU 时无需修改 API 本身,具体分析:element_size()、tolist()、fill_()、索引等均为通用存储语义,无论 CPU/GPU/NPU 调用结果一致,无设备特化分支。torch_npu.npu.BoolStorage已在 torch_npu 中注册,NPU 布尔张量的存储即其实例,无需新增绑定。【资料变更】
已检查文档 https://gitcode.com/Ascend/pytorch/tree/v2.12.0/docs/zh/native_apis,
torch.BoolStorage为标准 storage 类、非私有接口、非缺失 API,依据 API 一致性说明文档 §2 不纳入 native_apis 资料补齐范围,故不需要提交 PR 修改资料。【接口变更】
【功能验证】
在 Ascend 910B NPU 环境、torch 2.7.1 / 2.11.0 / 2.12.0 / master(nightly)+ 对应 torch_npu 上执行该用例,均通过。代表性日志(2.7.1 与 2.12.0)如下:
其余 2 个版本(2.11.0 / master)执行结果一致,均输出
Ran 9 tests ... OK。用例共包含 9 个测试方法:CPU 侧
test_cpu_bool_storage_basic/test_cpu_bool_storage_from_sequence/test_cpu_bool_storage_empty/test_cpu_bool_storage_out_of_bounds;NPU 侧test_npu_bool_storage_basic/test_npu_bool_storage_from_sequence/test_npu_bool_storage_empty/test_npu_bool_storage_out_of_bounds/test_npu_tensor_storage_consistency。【CheckList】