Closed
[Requirement|需求建议]: AngleV2算子新增ascend960dt平台适配 #4559
miaojingjingAdd on  5 days agoClosed at  4 days ago
miaojingjing
miaojingjingCollaborators
5 days ago Create

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

一、背景信息 (必填)

AngleV2 需要在现有平台支持基础上增加 ascend960dt 适配。当前 PR 前的代码尚未在 OpDef 中注册 ascend960dt,缺少该平台对应的 binary 与 simplified key 配置;BF16 原生比较 kernel 分发仅覆盖 __NPU_ARCH__ == 3510,op_kernel UT 编译列表也未包含 960DT。

本需求通过补齐 Host 平台注册和 binary 配置、扩展 BF16 kernel 分发以及完善 BF16 UT 数据与 tiling 生成,为 AngleV2 在 960DT 上的编译和验证提供对应实现。

二、价值/作用 (必填)

  • 为 AngleV2 增加明确的 ascend960dt OpDef 平台注册及 10 组 binary 映射配置。
  • 使 960DT(__NPU_ARCH__ == 9201)能够进入与 950(__NPU_ARCH__ == 3510)一致的 BF16 AngleV2<bfloat16_t> 分发路径,同时保持 2201 的既有 BF16 实现不变。
  • 将 ascend960dt 纳入 op_kernel UT 编译范围,并补齐 BF16 输入、golden 和 tiling 数据生成逻辑,为后续平台验证提供测试基础。

三、设计方案 (必填)

3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)

本需求不涉及 aclnn、PyTorch 或其他框架接入代码变更。改动范围为 AngleV2 的 OpDef 平台注册、op_host binary/simplified key 配置、Ascend C kernel 分发,以及 op_kernel UT 编译和测试数据生成。

3.2 总体设计
3.2.1 算子支持的数据类型

960DT 复用 A5 OpDef 配置,输入 x 支持 BF16、FP16、FP32、COMPLEX64、BOOL、UINT8、INT8、INT16、INT32、INT64;输出 y 对 BF16/FP16 分别保持 BF16/FP16,其余上述输入类型输出 FP32。输入与输出均为 required、ND 并启用 AutoContiguous。

新增的 960DT binary 配置具体包含以下映射;所有条目均为 shape: [-2] 和 format_match_mode: FormatAgnostic:

输入 dtype 输出 dtype
complex64 float32
float32 float32
bfloat16 bfloat16
float16 float16
bool float32
uint8 float32
int8 float32
int16 float32
int32 float32
int64 float32
3.2.2 host侧设计
  1. 在 angle_v2_def.cpp 中通过 AddConfig("ascend960dt", aicore_a5_config) 复用 ascend950 的 A5 配置,保留动态编译静态、动态格式、动态 rank 和动态 shape 支持标志。
  2. 新增 op_host/config/ascend960dt/angle_v2_binary.json,包含以下 10 个 binary 条目:
输入/输出 bin_filename
complex64 → float32 AngleV2_5cfa8f3b14716c3317bcd193933a3613
float32 → float32 AngleV2_1946086cc5d1bc19a4d66b5bd48e62cd
bfloat16 → bfloat16 AngleV2_bf16
float16 → float16 AngleV2_a8c107f79de7b47ce419f0ec015539f7
bool → float32 AngleV2_bool
uint8 → float32 AngleV2_uint8
int8 → float32 AngleV2_int8
int16 → float32 AngleV2_int16
int32 → float32 AngleV2_int32
int64 → float32 AngleV2_int64
  1. 新增 angle_v2_simplified_key.ini,配置 [AngleV2] default=0。
3.2.3 kernel侧设计
  1. 将 BF16 原生比较分支的编译条件由仅 __NPU_ARCH__ == 3510 扩展为 (__NPU_ARCH__ == 3510) || (__NPU_ARCH__ == 9201)。
  2. 在 3510/9201 下,KEY_DTYPE_BF16(tiling key 10)调用 AngleV2N::AngleV2<bfloat16_t>;2201 仍调用 AngleV2N::AngleV2Bf16<bfloat16_t, bfloat16_t>,其他 dtype 分发不变。
  3. UT AddOpTestCase 的 SoC 列表扩展为 ascend910b;ascend950;ascend960dt。
  4. BF16 测试数据按 float32 随机数生成后转换为 BF16,golden 使用 torch.angle(inputX.float()).to(torch.bfloat16),输入和 golden 以 int16 视图写文件。
  5. BF16 tiling 使用 bytesPerData = 15,与 FP16 共用 ALIGN_NUM = 16 和 dataPerRepeat = 128 的计算路径。
  6. 新增 3510/9201 条件编译的 test_case_bf16:单 block、tiling key 10,设置 totalLength=16、formerNum=1、tailNum=47、formerLength=16、tailLength=0、alignNum=16、totalLengthAligned=16、tileLength=12160、dataPerRepeat=128。
3.3 支持硬件
  • 本需求新增:ascend960dt,kernel 侧对应 __NPU_ARCH__ == 9201。
  • 复用既有:ascend950 的 A5 OpDef 配置及 __NPU_ARCH__ == 3510 的 BF16 分发路径。
  • UT 编译列表覆盖 ascend910b、ascend950、ascend960dt。
  • 既有 __NPU_ARCH__ == 2201 BF16 路径及其他平台的 OpDef 注册不因本需求改变。

3.4 算子约束限制

  • 本需求仅适配 AngleV2,不扩展其他算子。
  • 输入和输出沿用 required、ND、AutoContiguous 约束;960DT binary 条目使用动态 shape [-2] 和 FormatAgnostic,未新增其他数据格式。
  • BF16 原生比较分发仅覆盖 3510/9201;2201 保持独立的 AngleV2Bf16 实现。
  • 本需求未新增数据类型或框架接入声明,也未提供二级冒烟、算子泛化或 960DT 上板 UT/ST 的验证结果。

💡 备注(选填)

  • PR 变更文件已通过 pre-commit 的适用检查,包括 clang-format、ruff、codespell、JSON、文件末尾换行、私钥/冲突/大文件检查和 OAT;git diff --check 通过。
  • 同步完成 UT C++/Python 格式化、相关文件末尾换行及两个 Python 脚本的许可证头合规整改。

关联 PR:https://gitcode.com/cann/ops-math/pull/7018

likedislike
miaojingjingmiaojingjingCollaborators
5 days ago Added label: requirement
miaojingjing
miaojingjingCollaborators
5 days ago Comments:

/assign @miaojingjing

likedislike
CANN-robotCANN-robotCollaborators
5 days ago Assign miaojingjing as responsible person
CANN-robotCANN-robotCollaborators
4 days ago Close issue
CANN-robotCANN-robotCollaborators
4 days ago changed custom state from 进行中 to 已完成
CANN-robotCANN-robotCollaborators
4 days ago Added label: resolved