ExtendConv2D
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:实现 2D 卷积功能。
-
计算公式:
-
假定输入(
x)的 shape 是 (N,Cin,H,W)(N, C_{\text{in}}, H, W) ,(filter)的 shape 是 (Cout,Cin,Kh,Kw)(C_{\text{out}}, C_{\text{in}}, K_h, K_w),输出(y)的 shape 是 (N,Cout,Hout,Wout)(N, C_{\text{out}}, H_{\text{out}}, W_{\text{out}}) -
输出表示为:
out(Ni,Coutj)=bias(Coutj)+∑k=0Cin−1filter(Coutj,k)⋆x(Ni,k)y0(Ni,Coutj)=out(Ni,Coutj)×scale0(Coutj)y1(Ni,Coutj)=out(Ni,Coutj)×scale1(Coutj) \text{out}(N_i, C_{\text{out}_j}) = \text{bias}(C_{\text{out}_j}) + \sum_{k = 0}^{C_{\text{in}} - 1} \text{filter}(C_{\text{out}_j}, k) \star \text{x}(N_i, k)\\ \text{y0}(N_i, C_{\text{out}_j}) = \text{out}(N_i, C_{\text{out}_j}) \times\text{scale0}(C_{\text{out}_j})\\ \text{y1}(N_i, C_{\text{out}_j}) = \text{out}(N_i, C_{\text{out}_j}) \times\text{scale1}(C_{\text{out}_j})
如果启用relu,那么:
y0=relu(y0)y1=relu(y1) \text{y0} = \text{relu}(\text{y0})\\ \text{y1} = \text{relu}(\text{y1})
其中,⋆\star 表示卷积计算,支持空洞卷积、分组卷积。NN 代表
batch size,CC 代表通道数,HH 和 WW 分别代表高和宽,相应输出维度的计算公式如下:Hout=(H+pad_top+pad_bottom−(dilation_h×(Kh−1)+1))/stride_h+1Wout=(W+pad_left+pad_right−(dilation_w×(Kw−1)+1))/stride_w+1 H_{\text{out}} = (H + \text{pad\_top} + \text{pad\_bottom} - (\text{dilation\_h} \times (K_h - 1) + 1)) / \text{stride\_h} + 1 \\ W_{\text{out}} = (W + \text{pad\_left} + \text{pad\_right} - (\text{dilation\_w} \times (K_w - 1) + 1)) / \text{stride\_w} + 1
-
参数说明
| 参数名 | 输入 / 输出 / 属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 公式中的输入张量 x。 | HIFLOAT8、INT8、FLOAT8_E4M3FN | NCHW、NHWC |
| filter | 输入 | 公式中的卷积权重张量 filter。 | HIFLOAT8、INT8、FLOAT8_E4M3FN | NCHW、HWCN |
| bias | 可选输入 | 卷积偏置张量 bias。 | FLOAT、INT32 | ND |
| offset_w | 可选输入 | 量化偏移张量 offset_w(未使用)。 | INT8 | - |
| scale0 | 可选输入 | 输出0的量化参数 scale0。 | INT64,UINT64 | ND |
| relu_weight0 | 可选输入 | 输出0对应的relu斜率参数relu_weight0。 | FLOAT | ND |
| clip_value0 | 可选输入 | 输出0对应的截断值 clip_value0(未使用)。 | FLOAT16、HIFLOAT8、INT8、FLOAT8_E4M3FN、BFLOAT16 | ND |
| scale1 | 可选输入 | 输出1的量化参数 scale1。 | INT64,UINT64 | ND |
| relu_weight1 | 可选输入 | 输出1对应的relu斜率参数relu_weight1。 | FLOAT | ND |
| clip_value1 | 可选输入 | 输出1对应的截断值 clip_value1(未使用)。 | FLOAT16、HIFLOAT8、INT8、FLOAT8_E4M3FN、BFLOAT16 | ND |
| y0 | 输出 | 公式中的输出张量 y0。 | FLOAT16、FLOAT、BFLOAT16、HIFLOAT8、INT8、FLOAT8_E4M3FN | NCHW、NHWC |
| y1 | 输出 | 公式中的输出张量 y1。 | FLOAT16、FLOAT、BFLOAT16、HIFLOAT8、INT8、FLOAT8_E4M3FN | NCHW、NHWC |
| strides | 属性 | 卷积扫描步长,stride_h, stride_w ∈ [1,63]。 | INT32 | - |
| pads | 可选属性 | 对输入的填充,pad_h, pad_w ∈ [0,255]。 | INT32 | - |
| dilations | 可选属性 | 卷积核中元素的间隔,dilation_h, dilation_w ∈ [1,255]。 | INT32 | - |
| groups | 可选属性 | 从输入通道到输出通道的块链接个数,必须满足 groups × filter 的 in_channels 维度 = x 的 in_channels 维度,以及filter的out_channels必须是groups的倍数。支持范围 [1, 65535]。 | INT32 | - |
| data_format | 可选属性 | 输入数据格式,支持 "NCHW"、"NHWC"。 | STRING | - |
| offset_x | 可选属性 | 量化算法中的偏移 offset_x。 | INT32 | - |
| round_mode | 可选属性 | 舍入模式,如果输出的数据类型是 hifloat8,round_mode 可以设置为 'round'。否则可以设置为 'rint'。 | STRING | - |
| pad_mode | 可选属性 | 填充模式,支持 "SPECIFIC"、"SAME"、"VALID"、"SAME_UPPER", "SAME_LOWER"。 | STRING | - |
| enable_hf32 | 可选属性 | 是否启用 HF32 计算,支持 true、false(未使用)。 | BOOL | - |
| enable_relu0 | 可选属性 | 是否为第0个输出启用 relu,支持 true、false。 | BOOL | - |
| enable_relu1 | 可选属性 | 是否为第1个输出启用 relu,支持 true、false。 | BOOL | - |
| dual_output | 可选属性 | 是否使用双输出,支持 true、false。 | BOOL | - |
| dtype0 | 可选属性 | 表示输出 y0 的数据类型。支持的列表包括 [-1(默认),0(FLOAT),1(FLOAT16),2(INT8),27(BFOAT16), 34(HIFLOAT8), 36(FLOAT8_E4M3FN)]。 | BOOL | - |
| dtype1 | 可选属性 | 表示输出 y1 的数据类型。支持的列表包括 [-1(默认),0(FLOAT),1(FLOAT16),2(INT8),27(BFOAT16), 34(HIFLOAT8), 36(FLOAT8_E4M3FN)] | BOOL | - |
约束说明
-
Ascend 950PR/Ascend 950DT :
x的数据类型必须与filter一致。N维度大小应该大于等于 0。H、W维度大小应该大于等于 0(等于 0 的场景仅在输出y的H、W维度也等于 0 时支持)。C维度大小应该大于等于 0(等于 0 的场景仅在输出y的任意维度也等于 0 时支持)。- 对于
filter输入,H、W的大小应该在 [1, 511] 的范围内。N维度大小应该大于等于 0(等于 0 的场景仅在bias、output的N维度也等于 0 时支持),C维度大小的支持情况与输入x的C维度一致。 bias和scale维度大小应该与filter的N维度大小一致。
张量 x filter bias scale0/1 clip_value0/1 y0/1 数据类型 INT8 INT8 INT32 INT64/UINT64 INT8 FLOAT16/INT8 HIFLOAT8 HIFLOAT8 FLOAT INT64/UINT64 HIFLOAT8 FLOAT/FLOAT16/BFLOAT16/HIFLOAT8 FLOAT8_E4M3FN FLOAT8_E4M3FN FLOAT INT64/UINT64 FLOAT8_E4M3FN FLOAT/FLOAT16/BFLOAT16/FLOAT8_E4M3FN 数据格式 NCHW NCHW ND ND ND NCHW NHWC HWCN ND ND ND NHWC -
x、filter、bias、scale0/1、relu_weight0/1、clip_value0/1、y中每一组tensor的每一维大小都应不大于 1000000。 -
groups∈ [1, 65535]。 -
如果任何参数超出上述范围,算子的正确性无法保证。
-
由于硬件资源限制,算子在部分参数取值组合场景下会执行失败,请根据日志信息提示分析并排查问题。若无法解决,请单击 Link 获取技术支持。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_extend_conv2d | 通过 aclnnQuantConvolution 接口方式调用 extend_conv2d 算子。 |