文件最后提交记录最后更新时间
3 个月前
27 天前
27 天前
1 个月前
27 天前
9 个月前
28 天前
README

ExtendConv2D

产品支持情况

产品 是否支持
Ascend 950PR&950DT系列产品 √
Atlas A3系列产品 ×
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}})

    • 输出表示为:

    y(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{y}(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 表示卷积计算,支持空洞卷积(dilations > 1)、分组卷积(groups > 1)。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、FLOAT16 NCHW、NHWC
filter 输入 公式中的卷积权重张量filter。 HIFLOAT8、INT8、FLOAT8_E4M3FN、FLOAT16 NCHW、HWCN
bias 可选输入 卷积偏置张量bias。 FLOAT、INT32、FLOAT16 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。调用方必须始终提供y1,仅当dual_output为true时y1写入有效结果。 FLOAT16、FLOAT、BFLOAT16、HIFLOAT8、INT8、FLOAT8_E4M3FN NCHW、NHWC
strides 属性 卷积扫描步长,包括stride_h, stride_w。 INT32 -
pads 可选属性 对输入的填充,包括pad_top, pad_bottom, pad_left, pad_right。 INT32 -
dilations 可选属性 卷积核中元素的间隔,包括dilation_h, dilation_w。 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。支持范围 [-128, 127]。当`x`类型为`HIFLOAT8`或`FLOAT8_E4M3FN`时,仅支持配置为0。 INT32 -
round_mode 可选属性 表示输出的舍入模式。如果输出的数据类型是HIFLOAT8,此时该参数必须为'round'。默认为'rint'。 STRING -
pad_mode 可选属性 表示pads自动填充的模式,支持"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(BFLOAT16),34(HIFLOAT8),36(FLOAT8_E4M3FN)]。 INT32 -
dtype1 可选属性 表示输出y1的数据类型。支持的列表包括 [-1(默认),0(FLOAT),1(FLOAT16),2(INT8),27(BFLOAT16),34(HIFLOAT8),36(FLOAT8_E4M3FN)]。 INT32 -

约束说明

  • Ascend 950PR&950DT系列产品:

    • x的数据类型必须与filter一致。
    • bias和scale维度大小应该与filter的N维度大小一致。
    • x、filter、bias、scale0/1、relu_weight0/1、clip_value0/1、y中每一组tensor的每一维大小都应该在[1, 1000000]范围内。
    • strides、dilations的值应该在[1, 1000000]范围内。
    • pads的值应该在[0, 1000000]范围内。
    • 支持的数据类型和Format组合如下表:
    张量 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
    FLOAT16 FLOAT16 FLOAT16 INT64/UINT64 FLOAT16/INT8 FLOAT16/INT8
    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
  • 如果任何参数超出上述范围,算子的正确性无法保证。

  • 由于硬件资源限制,算子在部分参数取值组合场景下会执行失败,请根据日志信息提示分析并排查问题。若无法解决,请单击 Link获取技术支持。

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_extend_conv2d 通过 aclnnQuantConvolution接口方式调用extend_conv2d算子。