已合并
【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) #42273
【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) #42273
已合并
luoxiaoyan2024创建于 7月21日
7月21日

【合入来源】

关联 issue:https://gitcode.com/Ascend/pytorch/issues/2955

【修改方案】

一、API 功能说明

torch.BoolStorage 是 PyTorch 的布尔类型存储类(TypedStorage 子类),核心功能如下:

  • 承载布尔型张量的底层存储:以 torch.bool 为元素类型,提供按索引读写、填充、转为张量等存储语义。
  • 配套 NPU 类型:torch_npu.npu.BoolStorage 是昇腾 NPU 上的布尔存储类,用于 NPU 张量的底层存储;NPU 布尔张量的 .storage() 即返回该类型实例。
  • 标准 storage 类:与 torch.IntStorage / torch.FloatStorage 等同族,是 PyTorch 原生 API,非 torch_npu 私有扩展。

二、测试文件 test_bool_storage.py 完整验证该 API 的原因

该用例针对 torch.BoolStoragetorch_npu.npu.BoolStorage 两类存储类,从构造、索引、填充、类型/大小、设备一致性四个维度全覆盖验证,具体如下:

  1. 对 CPU 类 torch.BoolStorage 的验证(test_cpu_bool_storage_basic / _from_sequence / _empty / _out_of_bounds)
    • 构造与索引:以 torch.BoolStorage(3) 构造并逐个 setitem/getitem,确认 tolist() 与预期一致、与社区行为一致。
    • 元信息:size()==3element_size()==1(与 torch.BoolStorage().element_size() 上游预期一致)。
    • 填充与往返:fill_(False)tolist() 全 False,并经 torch.BoolTensor(s) 往返确认 dtype==torch.bool、值一致。
  2. 对 NPU 类 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。
    • 设备一致性:构造一个 NPU 布尔张量并断言其 .storage()torch_npu.npu.BoolStorage 实例、dtype==torch.booltolist() 与张量一致。
  3. 边界与语义
    • 本用例不尝试用 NPU storage 构造 CPU 张量(现代 PyTorch 设备语义禁止,属预期),仅对 NPU storage 直接操作或经 NPU 张量 .storage() 取,符合规范。
      综上,该文件覆盖了 BoolStorage 存储类在 NPU 上的「正常场景 + 索引边界 + 元信息 + 设备一致性」,是对该存储类在 NPU 上行为的完整且严谨的验证。

三、NPU 适配

torch.BoolStoragetorch_npu.npu.BoolStorage 适配昇腾 NPU 时无需修改 API 本身,具体分析:

  1. 标准 storage 类,逻辑与硬件解耦
    • element_size()tolist()fill_()、索引等均为通用存储语义,无论 CPU/GPU/NPU 调用结果一致,无设备特化分支。
  2. 配套 NPU 类型已具备
    • torch_npu.npu.BoolStorage 已在 torch_npu 中注册,NPU 布尔张量的存储即其实例,无需新增绑定。
  3. 本用例仅做一致性看护
    • 用例不改写任何全局状态,仅验证存储类行为在 NPU 上与社区一致,可直接复用。

【资料变更】

不涉及

已检查文档 https://gitcode.com/Ascend/pytorch/tree/v2.12.0/docs/zh/native_apistorch.BoolStorage 为标准 storage 类、非私有接口、非缺失 API,依据 API 一致性说明文档 §2 不纳入 native_apis 资料补齐范围,故不需要提交 PR 修改资料。

【接口变更】

不涉及

【功能验证】

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

在 Ascend 910B NPU 环境、torch 2.7.1 / 2.11.0 / 2.12.0 / master(nightly)+ 对应 torch_npu 上执行该用例,均通过。代表性日志(2.7.1 与 2.12.0)如下:

# torch 2.7.1 / torch_npu 2.7.1 (Ascend 910B)
python test/test_bool_storage.py -v
Ran 9 tests in 1.2s
OK

# torch 2.12.0 / torch_npu 2.12.0.rc1 (Ascend 910B)
python test/test_bool_storage.py -v
Ran 9 tests in 1.2s
OK

其余 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】

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

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 luoxiaoyan2024 的贡献)
Lluoxiaoyan2024
7月21日 创建了 pull request,commit b146a07d
Lluoxiaoyan2024
7月21日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(78)
atomgit-bot
atomgit-bot
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 的构造、索引、dtypeelement_size()fill_(),并断言 NPU bool tensor 的 .storage() 返回 npu.BoolStorage 实例且其值与 dtype 正确。
likedislike
atomgit-bot
atomgit-bot
7月21日 评论:

代码审查

总结

我对 test/test_bool_storage.py 中的每项变更都进行了全面审查。该文件新增了 72 行代码,包含两个测试方法:test_cpu_bool_storagetest_npu_bool_storage

审查内容

  • 导入正确性:导入语句(torchtorch_npu.npu as nputorch.testing._internal.common_utils 中的 TestCaserun_tests)与此仓库的约定一致,并且正确引用了所需 API。
  • 测试逻辑:所有断言均与 torch.BoolStoragetorch_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 的一致性验证。无需修改。

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

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

/approve

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