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算子 |