已合并
修正Conv3D Transpose N2H方案准入规则 #9726
hexinhui创建于 9月2日
修正Conv3D Transpose N2H方案准入规则 #9726
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 hexinhui 的贡献)atomgit-bot
9月2日 评论:
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 等场景。


不准确?
atomgit-bot
9月2日 评论:
9月2日 评论:
9月2日 添加了label:cann-cla/yes
CANN-robot
9月2日 评论:
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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


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


9月9日 添加了label:approved
9月9日 关闭了关联的issue
9月9日 合入了pull request
CANN-robot
9月9日 评论:
9月9日 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
问题现象:
当前 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转置后,进入该模板会导致性能劣化。
改动方案为:
CheckTransposeN2HEnable签名新增outputPadding5参数,调用点(aclnn_convolution.cpp的CheckN2HAndTranspose)传入params->adaptoutputPad;CheckN2HTransposeDtypeAvailable:要求 input/weight dtype 一致且 ∈ {FP16, BF16, FP32},否则记录[N2H] only FP16, BF16 and FP32 are supported并拒绝;仅当GetCurNpuArch() == DAV_3510时启用该检查;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生成声明