已开启
【社区任务】7月社区任务第四期-Ascend for PyTorch API 一致性开发(54) #3536
群青世界创建于  7月30日
群青世界成员
7月30日 创建

一、任务概览
Ascend for PyTorch是昇腾 NPU 适配 PyTorch 框架的核心插件,为 PyTorch 提供完整的昇腾硬件算子支持、调度能力与推理优化,保障 PyTorch 模型可在昇腾 NPU 上无缝、高效运行。
当前 PyTorch 官方原生 API 已形成完善体系,但部分API尚未在 Ascend for PyTorch 中完成实现、对齐与验证,导致部分 PyTorch 原生模型 / 代码在昇腾 NPU 上运行时出现接口报错、功能不一致等问题。
本任务邀请开发者参与Ascend for PyTorch API 补齐与适配验证,完成缺失 API 的开发、调试、测试与文档交付,完善 Torch-NPU 对 PyTorch 原生 API 的兼容性,提升昇腾 NPU 上 PyTorch 框架的易用性与模型适配覆盖率。
二、任务要求及参考指导
https://docs.qq.com/doc/DT3R3eVNWdm1yUkdR
三、任务价值
深度参与昇腾生态 + PyTorch 开源共建,贡献代码合入官方仓库;
掌握 NPU PyTorch 框架适配、异构计算核心技能;
获得开源社区认可,积累工业级实习项目经验,提升简历竞争力。
四、任务领取
请前往昇腾社区-任务广场领取任务:https://www.hiascend.com/activities/task-center ,其余领取方式无效。(昇腾社区任务发布会滞后,请耐心等候)
五、API名称
torch.QUInt4x2Storage.dtype

likedislike
Lluoxiaoyan2024
7月31日 关联了pull request:test(nn): Add validation cases for torch.QUInt4x2Storage.dtype (#3536)
TorchNPU-BotTorchNPU-Bot成员
7月31日 添加了label:bot-triaged
TorchNPU-Bot
TorchNPU-Bot成员
7月31日 评论:

检测到当前 issue 已关联 PR,自动添加标签:bot-triaged

likedislike
Lluoxiaoyan2024
7月31日 关联了pull request:test(nn): Add validation cases for torch.QUInt4x2Storage.dtype (#3536)
Lluoxiaoyan2024
7月31日 关联了pull request:test(nn): Add validation cases for torch.QUInt4x2Storage.dtype (#3536)
Lluoxiaoyan2024
7月31日 关联了pull request:test(nn): Add validation cases for torch.QUInt4x2Storage.dtype (#3536)
Lluoxiaoyan2024
7月31日 关联了pull request:test(nn): Add validation cases for torch.QUInt4x2Storage.dtype (#3536)
8月3日 评论:

我要认领这个任务

likedislike
Lluoxiaoyan2024
8月12日 关联了pull request:test(nn): Add consistency validation cases for torch.QUInt4x2Storage.dtype on NPU (#3536)
Lluoxiaoyan2024
8月12日 关联了pull request:test(nn): Add consistency validation cases for torch.QUInt4x2Storage.dtype on NPU (#3536)
Lluoxiaoyan2024
8月12日 关联了pull request:test(nn): Add consistency validation cases for torch.QUInt4x2Storage.dtype on NPU (#3536)
Lluoxiaoyan2024
8月12日 关联了pull request:test(nn): Add consistency validation cases for torch.QUInt4x2Storage.dtype on NPU (#3536)
luoxiaoyan2024
8月12日 评论:

torch.QUInt4x2Storage.dtype API 一致性验证结论

一、验证环境

内容
CANN 版本 8.5.1
操作系统 Ubuntu
NPU 型号 Ascend 910B3
覆盖版本 torch / torch_npu 的 2.7.1 / 2.11.0 / 2.12.0 / master(v2.9.0 已撤回,不再提交)
源码仓库 https://gitcode.com/Ascend/pytorch
Fork 仓库 https://gitcode.com/luoxiaoyan2024/pytorch
补充验证 Ascend 950PR,CANN 9.1.0,npu-smi 25.7.rc1.6,Ubuntu 22.04.5 x86_64,Python 3.10.12,torch 2.12.0+cu130 / torch_npu 2.12.0(实跑 test/test_quint4x2_storage_dtype.pyRan 2 tests ... OK
实测补充 Atlas 800T A2 服务器 torch 容器实测 torch.QUInt4x2Storage.dtype == torch.quint4x2(属性设备无关)

二、使用场景

torch.QUInt4x2Storage.dtype 是量化存储类 QUInt4x2Storage只读类属性,用于返回其对应的量化 dtype torch.quint4x2(4-bit 无符号量化类型)。它服务于量化张量的底层 4-bit 存储管理,属于类级别的常量属性——不接收 Tensor、不执行数值计算、也不调用任何 NPU 算子。

三、API 功能说明

  • torch.QUInt4x2Storage 是 PyTorch 量化相关的 TypedStorage 子类,其 dtype 类属性恒等于 torch.quint4x2
  • 实测(torch,Atlas 800T A2 容器):
    • torch.QUInt4x2Storage.dtypetorch.quint4x2
    • torch.QUInt4x2Storage().dtypetorch.quint4x2
  • 该 dtype 属于量化 dtype 集合 {quint8, qint8, qint32, quint4x2},且可与 quint8 / qint8 明确区分(边界值)。

四、社区用例覆盖

在 PyTorch 官方 test/ 中检索 QUInt4x2Storage / quint4x2

  • 结论:官方 test/ 中没有针对 torch.QUInt4x2Storage.dtype聚焦一致性用例;该属性只在量化相关用例中被间接触及(如量化张量构造、存储底层细节),没有独立断言其 dtype 取值与量化 dtype 集合归属。
  • → 据此判定:社区无直接用例 → 自写用例提交 test/ 目录(用例补齐)。

五、NPU 适配分析

  • torch.QUInt4x2Storage.dtypetorch 核心类的只读属性,导入 torch_npu 后符号直接可用,无需 transfer_to_npu 适配、无需改动 NPU 算子
  • 当前 NPU 未单独注册 QUInt4x2Storage 存储类(NPU 存储类列表仅覆盖数值 / bool / bfloat16 类),因此以设备无关类属性 torch.QUInt4x2Storage.dtype == torch.quint4x2 作为权威校验值。
  • 用例通过 torch.npu.is_available() 守卫;若 NPU 后续暴露 torch.npu.QUInt4x2Storage,用例会自动扩展该校验(额外校验其 dtype 与空存储实例)。

六、功能验证

  • 设备无关属性(CPU 路径):已在 Atlas 800T A2 真实 torch 容器中实测确认:
    • torch.QUInt4x2Storage.dtypetorch.quint4x2
    • torch.QUInt4x2Storage().dtypetorch.quint4x2
    • torch.QUInt4x2Storage.dtype in {quint8, qint8, qint32, quint4x2} → True ✅
    • 该属性为只读类属性,跨版本稳定,不随设备变化。
  • NPU 路径(Ascend 950PR 实测,2026-09-08):在 Ascend 950PR(CANN 9.1.0,npu-smi 25.7.rc1.6,Python 3.10.12,torch 2.12.0+cu130 / torch_npu 2.12.0)环境实跑 python3 test_quint4x2_storage_dtype.py -vRan 2 tests ... OK,CPU 用例与 NPU 用例实际执行(非跳过)torch.npu.is_available()=True
$ python3 test_quint4x2_storage_dtype.py -v   # 950PR: Ascend950PR / CANN 9.1.0, torch 2.12.0+cu130 / torch_npu 2.12.0
test_cpu_quint4x2_storage_dtype (__main__.TestQUInt4x2StorageDtype) ... ok
test_npu_quint4x2_storage_dtype (__main__.TestQUInt4x2StorageDtype) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.003s

OK

verify_quint4x2_950pr.png

  • 910B3 路径:v2.7.1 / v2.11.0 / v2.12.0 三版本已在 910B3(CANN 8.5.1)容器实跑同文件,均 Ran 2 tests ... OK(运行日志见 PR #44411~#44413 描述);master 分支由社区 CI 流水线验证。

复现命令(CPU 路径):

import torch
assert torch.QUInt4x2Storage.dtype is torch.quint4x2
assert torch.QUInt4x2Storage().dtype is torch.quint4x2
assert torch.QUInt4x2Storage.dtype in (torch.quint8, torch.qint8, torch.qint32, torch.quint4x2)
print("OK")

七、test 用例补齐(patch 处理)

新增自包含一致性用例文件 test/test_quint4x2_storage_dtype.py(单文件新增,无 torch/torch_npu/ 源码改动),含两个方法:

  • test_cpu_quint4x2_storage_dtype:校验类属性 dtype 恒为 torch.quint4x2,属于量化 dtype 集合(quint8 / qint8 / qint32 / quint4x2),并与 quint8 / qint8 明确区分。
  • test_npu_quint4x2_storage_dtype:在 NPU 环境下校验设备无关类属性仍为 torch.quint4x2;并对 QUInt4x2Storage 的存在性做了与 CPU 测试一致的 hasattr 守卫(避免个别构建配置下抛 AttributeError),若 NPU 注册 torch.npu.QUInt4x2Storage 则额外校验其 dtype 与空存储实例。

提交分支(每个版本分支独立 PR;v2.9.0 撤回不再提交):

目标分支 PR
v2.7.1 https://gitcode.com/Ascend/pytorch/pull/44411
v2.11.0 https://gitcode.com/Ascend/pytorch/pull/44412
v2.12.0 https://gitcode.com/Ascend/pytorch/pull/44413
master https://gitcode.com/Ascend/pytorch/pull/44414

注:v2.9.0 不再提交。

八、资料 / API 补齐判定

  • ② 资料补齐torch.QUInt4x2Storage 是既有量化存储类,其 dtype 为只读类属性;NPU 未单独实现该存储类,无新增 NPU 算子需登记 native_apis无需资料补齐
  • ③ API 补齐:属性在 torch_npu 加载后直接可用、行为一致,无需改动 torch/torch_npu/ 源码 → 不需要

九、结论

补齐类型 判定 依据
① 用例补齐 ✅ 需要 社区无该属性聚焦一致性用例;新增 test/test_quint4x2_storage_dtype.py 提交至 4 个版本分支
② 资料补齐 ❌ 不需要 既有量化存储类只读属性,NPU 未单独实现,无需 native_apis 登记
③ API 补齐 ❌ 不需要 NPU 加载后属性直接可用、行为一致,无需改源码

最终路径:① 用例补齐(test 目录一致性用例)。 提交 test/test_quint4x2_storage_dtype.pyv2.7.1 / v2.11.0 / v2.12.0 / master(v2.9.0 撤回),关联 issue https://gitcode.com/Ascend/pytorch/issues/3536,PR 合入后关闭该 issue。

likedislike