ConvolutionForward
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
功能说明
-
算子功能:实现卷积功能,支持 1D 卷积、2D 卷积、3D 卷积,同时支持转置卷积、空洞卷积、分组卷积。 对于入参
transposed = True时,表示使用转置卷积或者分数步长卷积。它可以看作是普通卷积的梯度或者逆向操作,即从卷积的输出形状恢复到输入形状,同时保持与卷积相容的连接模式。它的参数和普通卷积类似,包括输入通道数、输出通道数、卷积核大小、步长、填充、输出填充、分组、偏置、扩张等。 -
计算公式:
我们假定输入(input)的 shape 是 (N,Cin,H,W)(N, C_{\text{in}}, H, W),(weight)的 shape 是 (Cout,Cin,Kh,Kw)(C_{\text{out}}, C_{\text{in}}, K_h, K_w),输出(output)的 shape 是 (N,Cout,Hout,Wout)(N, C_{\text{out}}, H_{\text{out}}, W_{\text{out}}),那输出将被表示为:
out(Ni,Coutj)=bias(Coutj)+∑k=0Cin−1weight(Coutj,k)⋆input(Ni,k) \text{out}(N_i, C_{\text{out}_j}) = \text{bias}(C_{\text{out}_j}) + \sum_{k = 0}^{C_{\text{in}} - 1} \text{weight}(C_{\text{out}_j}, k) \star \text{input}(N_i, k)
其中,⋆\star 表示卷积计算,根据卷积输入的维度,卷积的类型(空洞卷积、分组卷积)而定。NN 代表批次大小(batch size),CC 代表通道数,WW 和 HH 分别代表宽和高,相应输出维度的计算公式如下:
Hout=[(H+2∗padding[0]−dilation[0]∗(Kh−1)−1)/stride[0]]+1Wout=[(W+2∗padding[1]−dilation[1]∗(Kw−1)−1)/stride[1]]+1 H_{\text{out}}=[(H + 2 * padding[0] - dilation[0] * (K_h - 1) - 1 ) / stride[0]] + 1 \\ W_{\text{out}}=[(W + 2 * padding[1] - dilation[1] * (K_w - 1) - 1 ) / stride[1]] + 1
参数说明
参数名 |
输入/输出/属性 |
描述 |
数据类型 |
数据格式 |
|---|---|---|---|---|
| input | 输入 | FLOAT、FLOAT16、BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN | NCL、NCHW、NCDHW | |
| weight | 输入 | FLOAT、FLOAT16、BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN | NCL、NCHW、NCDHW | |
| bias | 输入 |
|
FLOAT、FLOAT16、BFLOAT16 | ND |
| stride | 输入 |
|
INT32 | - |
| padding | 输入 |
|
INT32 | - |
| dilation | 输入 |
|
INT32 | - |
| transposed | 输入 |
|
BOOL | - |
| outputPadding | 输入 |
|
INT32 | - |
| groups | 输入 |
|
INT64 | - |
| output | 输出 |
|
FLOAT、FLOAT16、BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN | NCL、NCHW、NCDHW |
| cubeMathType | 输入 |
|
INT8 | - |
- Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:
- input、weight 数据类型不支持 HIFLOAT8、FLOAT8_E4M3FN。
- bias 数据类型不支持 HIFLOAT8、FLOAT8_E4M3FN。数据类型与 input、weight 一致。
- conv1d、conv2d、conv3d 正向场景下 bias 会转成 FLOAT 参与计算。
- conv2d 和 conv3d transposed=true 场景,weight H、W 的大小应该在[1,255]范围内,其他维度应该大于等于 1。
- conv1d transposed=true 场景,weight L 的大小应该在[1,255]范围内,其他维度应该大于等于 1。
- conv3d 正向场景,weight H、W 的大小应该在[1,511]范围内。
- cubeMathType 为 0(KEEP_DTYPE) 时,当输入是 FLOAT 暂不支持。
- cubeMathType 为 1(ALLOW_FP32_DOWN_PRECISION) 时,当输入是 FLOAT 允许转换为 HFLOAT32 计算。
- cubeMathType 为 2(USE_FP16) 时,当输入是 BFLOAT16 不支持该选项。
- cubeMathType 为 3(USE_HF32) 时,当输入是 FLOAT 转换为 HFLOAT32 计算。
- Ascend 950PR/Ascend 950DT:
- input、weight 数据类型支持 FLOAT、FLOAT16、BFLOAT16、HIFLOAT8。
- transposed=true 时:input 数据类型额外支持 FLOAT8_E4M3FN,支持 N 维度大于等于0,其他各个维度的大小应该大于等于1。
- transposed=false 时:当 input 数据类型为 HIFLOAT8 时,weight 的数据类型必须与 input 一致。支持 N 维度大于等于0,支持 D、H、W 维度大于等于0(等于0的场景仅在 output 推导的 D、H、W 维度也等于0时支持),支持 C 维度大于等于0(等于0的场景仅在 output 推导的 N、C、D、H、W 其中某一维度等于0时支持)。
- bias 数据类型不支持 HIFLOAT8、FLOAT8_E4M3FN。
- transposed=true 时:当 input 和 weight 数据类型是 HIFLOAT8 和 FLOAT8_E4M3FN 时,不支持带 bias。
- transposed=false 时:当 input 和 weight 数据类型是 HIFLOAT8 时,bias 数据类型会转成 FLOAT 参与计算。
- cubeMathType 为 1(ALLOW_FP32_DOWN_PRECISION) 时,当输入是 FLOAT 允许转换为 HFLOAT32 计算。
- cubeMathType 为 2(USE_FP16) 时,当输入是 BFLOAT16 不支持该选项。
- cubeMathType 为 3(USE_HF32) 时,当输入是 FLOAT 转换为 HFLOAT32 计算。
约束说明
- Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:input, weight, bias 中每一组 tensor 的每一维大小都应不大于 1000000。
- Ascend 950PR/Ascend 950DT:transposed 为 true 的场景,支持 1D、2D 和 3D 卷积,支持空 Tensor。
- 由于硬件资源限制,算子在部分参数取值组合场景下会执行失败,请根据日志信息提示分析并排查问题。若无法解决,请单击Link获取技术支持。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_aclnn_convolution_1d_transpose | 通过aclnnConvolution接口演示 1D 转置卷积场景,调用 Conv2DTranspose 算子 |
| aclnn接口 | test_aclnn_convolution_2d_transpose | 通过aclnnConvolution接口演示 2D 转置卷积场景,调用 Conv2DTranspose 算子 |
| aclnn接口 | test_aclnn_convolution_3d_transpose | 通过aclnnConvolution接口演示 3D 转置卷积场景,调用 Conv3DTransposeV2 算子 |
| aclnn接口 | test_aclnn_conv_depthwise_2d | 使用aclnnConvDepthwise2d接口演示 2D 深度可分离卷积,调用 Conv2D 算子 |
| aclnn接口 | test_aclnn_conv_tbc | 使用aclnnConvTbc接口演示 time-batch-channel 卷积,调用 Conv2D 算子 |
| aclnn接口 | test_aclnn_quant_convolution | 使用aclnnQuantConvolution接口演示 3D 量化卷积,调用 Conv3DV2 算子 |