

Pull Request已成功合入, 合并人@ascend-robot
(感谢 wuyouqi1 的贡献)变更摘要
此 PR 主要扩展了 NPU 张量序列化对 FRACTAL_NZ_C0 系列格式变体的支持,同时修复了在 A5 aclnn-only 环境下内部格式(如 FRACTAL_NZ)张量在拷贝和打印时的兼容性问题。核心思路是在序列化映射表、格式转换内核及 OpApi 拷贝路径中补齐对 NZ_C0 变体的处理,并为 NPU 私有格式张量的 __repr__ 方法新增补丁以绕过 internal_format 守卫。
主要改动
-
序列化映射表扩展:在
NPUSerialization.cpp的FORMAT_INFO中新增FRACTAL_NZ_C0_16、FRACTAL_NZ_C0_32、FRACTAL_NZ_C0_2、FRACTAL_NZ_C0_4、FRACTAL_NZ_C0_8到对应ACL_FORMAT_*的映射,使这五种 NZ_C0 变体格式可被正常序列化与反序列化。 -
OpApi 拷贝路径的内部格式转换:在
CopyKernelOpApi.cpp的NPUNativeOpApiFunctions::copy_中,当源张量位于 NPU 且并非基格式时,先通过FormatCastHelper::ApplyBaseFormatTensorBy将源张量转为 ND 格式再执行copy_d2h_baseformat_opapi,以兼容 A5 aclnn-only 环境下aclnnInplaceCopy不接受内部格式的限制。 -
copy_ 操作的 internal_format_opapi 标志启用:在
npu_native_functions.yaml中为copy_添加internal_format_opapi: True,配合上述格式转换逻辑确保 copy 操作能正确处理内部格式张量。 -
格式转换内核的额外数据类型修正:在
FormatCastKernelNpu.cpp的MaybeUseAclnnNpuFormatCast中增加判断——当处于IsAclnnOnly()模式且未指定customize_dtype时,对元素大小 ≥4 字节的类型(如 int32/float32)强制使用ACL_FLOAT16作为customizeAcltype,以适配 A5 平台要求。 -
NPU 私有格式张量的打印补丁:新增
tensor_repr_patches.py,通过PatchManager注册对torch.Tensor.__repr__的补丁:当张量在 NPU 设备上且格式非 ND 时,自动执行.cpu()转换为基格式后再打印,避免_tensor_str中的cat/stack触发 internal_format 守卫。


代码审查
关闭总结
| 文件 | 审查结果 |
|---|---|
torch_npu/_init/patches/tensor_repr_patches.py |
3 个问题 (1×P1, 2×P3) |
torch_npu/csrc/aten/common/FormatCastKernelNpu.cpp |
无问题 |
torch_npu/csrc/aten/npu_native_functions.yaml |
无问题 |
torch_npu/csrc/aten/ops/op_api/CopyKernelOpApi.cpp |
无问题 |
torch_npu/csrc/core/NPUSerialization.cpp |
无问题 |
- P1: 1 个 —
_orig_repr可能不接受tensor_contents关键字参数, 存在__repr__崩溃风险 - P2: 0 个
- P3: 2 个 — 过宽异常捕获无日志 +
__repr__热路径上的不必要import
总体风险判断: 中低。核心 C++ 变更(序列化格式映射、格式转换、internal_format_opapi 白名单)逻辑正确且与现有代码风格一致。唯一的实质性风险来自新增的 Python tensor_repr_patches.py 中 tensor_contents 参数兼容性问题, 需确认目标 PyTorch 版本是否支持。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


In response to this:
/sync v2.9.0 v2.10.0 v2.12.0 v2.11.0 master
同步操作执行结果:
| Branch | Status | Pull Request |
|---|---|---|
| v2.9.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| v2.10.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| v2.12.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| v2.11.0 | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 | |
| master | 同步失败:请手动创建 PR 进行同步,我们会继续完善分支之间同步操作,尽量避免同步失败的情况 |



