已合并
【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) #42278
【API一致性任务】test: add consistency validation cases for torch.BoolStorage / torch_npu.npu.BoolStorage (#2955) #42278
已合并
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.7.1/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 c3446926
Lluoxiaoyan2024
7月21日 关联了issue:【社区任务】7月社区任务第二期-Ascend for PyTorch API 一致性开发(78)
atomgit-bot
atomgit-bot
7月21日 评论:

🤖 正在生成合并请求摘要,请稍候…

likedislike
atomgit-bot
atomgit-bot
7月21日 评论:

🤖 AI 代码检视正在进行中,请稍候…

likedislike
此处折叠了171条消息 查看更多
梁松伟
梁松伟成员
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#13978 [ commitID:dfbe30b3 ] 已完成
likedislike