Pull Request已成功合入, 合并人@CANN-robot
(感谢 YuanTianyi 的贡献)变更摘要
该 PR 新增双输出(y0/y1)的 V2 算子 ExtendConvTransposeV2,其底层复用 conv3d_backprop_input_v2 的 tiling 与 kernel 实现,通过引入第二路输出 y1 及对应量化参数 scale1,支持双输出独立量化(quantMode0/quantMode1)与独立 ReLU(enRelu0/enRelu1)控制。为支撑该能力,将原单输出的 quantMode/enRelu 字段拆分为两路,并将 fusion_mode 改为位编码语义,同时在 arch35 卷积反向 kernel 链路中为各 Block 类扩展了 y1/scale1 的输入与处理逻辑。
主要改动
-
新增
ExtendConvTransposeV2算子: 新增算子注册定义(extend_conv_transpose_v2_proto.h、extend_conv_transpose_v2_def.cpp),声明scale0/scale1可选输入及y0/y1两个输出;extend_conv_transpose_v2_infershape.cpp在input_size全零时按转置卷积公式重新推导输出 shape 并复制到 y1;新增 tiling 注册(复用Conv3DDXV2系列模板类)与 kernel 入口extend_conv_transpose_v2.cpp(通过DTYPE_Y1宏启用双输出路径)。 -
Tiling 数据与运行参数扩展为双输出: 在
conv3d_backprop_input_v2_tiling_data_arch35.h中新增dualOutput、enRelu1、quantMode1字段,将原quantMode/enRelu重命名为quantMode0/enRelu0;Conv3dBpInputV2RunInfo同步拆分两路字段,SCALE_INDEX拆为SCALE0_INDEX/SCALE1_INDEX,并从dual_output属性读取hasDualOutput_写入 tiling 数据;各 tiling 类按GetVectorScaleCount()计算 scale L1 占用(scale0/scale1 双路向量量化)。 -
kernel 双输出计算链路:
Conv3dDxBase、Conv3dDxOswBlock、Conv3dDxKsBlock、Conv3dDxSmallKernel均扩展scale0Type/scale0Format、y1Type、scale1Type/scale1Format模板参数,新增y1Gm_/scale1Gm_及hasSecondOutput_,并新增SetScale1与双输出IterateAll/GetTensorC/LoadL0c2GmDual路径;ConvBpContext/Output1Intf与IsSecondOutput机制使两路输出写回时分别选择enRelu0/enRelu1与scale0/scale1。 -
fusion_mode位编码与量化模式扩展:GetFusionMode将fusion_mode按位解析为两路 ReLU(bit0=y0、bit1=y1,取值范围扩展为 {0,1,2,3}),extend_conv_transpose_v2_proto.h中同步更新注释说明;同时为NO_QUANT/SCALAR_QUANT场景补充标量反量化分支(SetQuantInt32ToHalf/SetQuantInt8等),并新增GetOutputQuantMode/GetScaleGlobal/GetScaleL1Buf辅助函数按当前输出路选择量化模式与 scale 缓冲。 -
双输出约束与校验调整:
Conv3DDXV2KernelSplitTiling在开启双输出(hasDualOutput_)时禁用KernelSplitHW路径;fixedShiftVal校验改为限定在(0, fixedShiftValDefault]区间,并新增DUAL_OUTPUT_EXTEND_CONV_TRANSPOSE_INDEX属性索引;同时新增 infershape 与 tiling 的 UT 用例(test_extend_conv_transpose_v2_infershape.cpp、test_extend_conv_transpose_v2_tiling.cpp)。


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


| Time | Name | Result | Changeid | TimeStamp | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-08-31 15:45:50 | commit | 2026-08-31T11:17:43+08:00 | f89a0c6f | ||||||||||||
| SC_Result | :x: FAILURE | Ied7c4c6 | |||||||||||||
| RDV_Result | :white_check_mark: SUCCESS | Ied7c4c6 | |||||||||||||
|


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


描述
1. 双输出 Tiling 与 Kernel
ExtendConvTransposeV2TilingData,并复用现有 Conv3D Backprop Tiling 模板。dual_output=true标识双输出场景。extend_conv_transpose_v2.cppKernel 入口,处理两路输出及各自的 scale/quant mode。2. 保持原算子兼容
ExtendConvTransposeV2暴露,不影响原有图入口。关联的Issue
https://gitcode.com/cann/ops-nn/issues/4910
测试
rdv,自验证用例通过
文档更新
更新了ExtendConvTransposeV2算子的README.md 文件
类型标签
AI/Agent生成声明