已合并
修正Conv3D Transpose N2H方案准入规则 #9726
hexinhui创建于 9月2日
修正Conv3D Transpose N2H方案准入规则 #9726
已合并
hexinhui创建于 9月2日
hexinhui成员
9月2日

描述

问题现象:
当前 Conv3D Transpose 的 N2H 转置方法为数学上的等价性能优化方案,其路径准入判断(CheckTransposeN2HEnable,位于 conv/convolution_forward/op_host/op_api/convolution.cpp)仅检查 groups、stride/dilation/pad 属性及 N/D/H/W/C 形状范围(cout/cin ∈ [1,128] 等)。
当前的准入规则未评估 tiling中HkWk 模板对 L1 内存的容量需求,L1 容量不足的 shape 经过N2H转置后,进入该模板会导致性能劣化。
改动方案为:

  1. CheckTransposeN2HEnable 签名新增 outputPadding5 参数,调用点(aclnn_convolution.cpp 的 CheckN2HAndTranspose)传入 params->adaptoutputPad;
  2. 新增 CheckN2HTransposeDtypeAvailable:要求 input/weight dtype 一致且 ∈ {FP16, BF16, FP32},否则记录 [N2H] only FP16, BF16 and FP32 are supported 并拒绝;仅当 GetCurNpuArch() == DAV_3510 时启用该检查;
  3. 新增 CheckN2HNoHkWkL1Probe:按 no-HkWk 模板 base M=1024、base N=16、cube block 32 字节估算所需 L1(aProbe = min(batch, calHo) × wi × strideW × 32,其中 calHo 由 wo=(wi-1)×strideW+wk+outputPaddingW 推导;bProbe = wk × 32 × 16),requiredL1 = aProbe + bProbe,与平台 GetLocalMemSize(L1) 实际容量比较,requiredL1 ≤ availableL1 才允许进入 N2H 路径。

关联的Issue

#5653

测试

泛化用例通过,冒烟用例通过

文档更新

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 hexinhui 的贡献)
Hhexinhui成员
9月2日 创建了 pull request,commit 6bda839b
atomgit-bot
atomgit-bot
9月2日 评论:

变更摘要

本 PR 主要调整 Conv3D 转置的 N2H(NCHW 转 NHWC)优化规则:在原有的 CheckTransposeN2HEnable 判定基础上,新增基于平台 L1 缓存容量的可用性探测,使 N2H 路径只有在所需 L1 空间不超过硬件可用 L1 时才启用,并同步扩展接口签名、调用点及单元测试。

主要改动

  • 接口签名扩展: CheckTransposeN2HEnable 新增 outputPadding5 参数(convolution.h 声明同步更新),并在 aclnn_convolution.cpp 的 CheckN2HAndTranspose 调用点传入 params->adaptoutputPad;判定条件同时收紧为仅 NpuArch::DAV_3510 架构且 groups == 1 时生效。
  • 新增 L1 探测逻辑: 在 convolution.cpp 中新增 CheckN2HNoHkWkL1Probe,基于输入/权重形状、strideW、outputPaddingW 及 dtype 字节数计算所需 L1(引入常量 N2H_NO_HKWK_BASE_M、N2H_NO_HKWK_BASE_N、N2H_CUBE_BLOCK_BYTES),并与 GetPlatformInfos() 查询到的可用 L1 比较,决定 N2H 是否启用。
  • 溢出安全与类型校验辅助函数: 新增 SafeMulN2HProbe、SafeAddN2HProbe 进行无符号溢出保护的乘加运算,新增 IsN2HNoHkWkDtype 限制仅支持 DT_FLOAT16、DT_BF16、DT_FLOAT 类型。
  • 测试桩支持 L1 配置: 测试 stub 的 platform.cpp/platform.h 新增 SetPlatformInfoAvailable、SetPlatformL1Size、ResetPlatformInfo,使 GetPlatformInfos() 可返回带可配置 l1_size 的模拟平台信息。
  • 新增 N2H L1 规则单元测试: 在 test_aclnn_convolution.cpp 中新增 convolution_n2h_l1_test 测试套件及 CalcN2HNoHkWkRequiredL1、RunN2HGate 辅助函数,覆盖 L1 恰好满足、少 1 字节拒绝、L1 缺失/为 0、outputPadding 跨 L1 边界、curHo 整除分支、非 DAV_3510 架构及不支持 dtype 等场景。
likedislike
不准确?
atomgit-bot
atomgit-bot
9月2日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
9月2日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
9月2日 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

✅ Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
*/*/op_host/op_api/*.h ✅ 汤磊, 余鑫, 沈承宗, 高成 (4/2) ✅ 汤磊 (1/1)
conv ✅ 余鑫, 沈承宗, 高成 (3/2) ✅ 余鑫 (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

hexinhui, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了247条消息 查看更多
tang-lei01成员
9月9日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
9月9日 添加了label:approved
CANN-robotCANN-robot成员
9月9日 关闭了关联的issue
CANN-robotCANN-robot成员
9月9日 合入了pull request
CANN-robot
CANN-robot成员
9月9日 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike