fixpipe

功能说明

矩阵计算完成后,对结果进行处理,例如对计算结果进行加偏置和对数据进行量化、并把数据从L1OUT 搬迁到GM Memory 中。

函数原型

fixpipe(dst, src, cburst_num, burst_len, dst_stride, src_stride, extend_params=None)

参数说明

表1 参数说明

参数名称

输入/输出

含义

dst

输出

目的操作数的起始 element,支持的数据类型为 Tensor(float16,float32,int32),具体参考表2,tensor的scope为GM或UB。

经过fixpipe处理,在加偏置、量化等操作以外,会将矩阵计算中多申请的数据删除。

该接口用于处理conv2d数据时dst格式为[cout_blocks, howo, 16]

该接口用于处理matmul数据时dst格式为[N1, m, N0]

注:cout_blocks及howo含义请参考conv2d参数说明参数说明

N1, m, N0含义请参考matmul参数说明参数说明

src

输入

源操作数的起始 element,支持的数据类型为 Tensor(float32,int32),具体参考表2。tensor 的scope为L1OUT。

源操作数是矩阵计算后的结果,

该接口用于处理conv2d数据时格式为[cout_blocks, round_howo, 16]。

该接口用于处理matmul数据时格式为[N1, M, N0]。

注:cout_blocks及round_howo含义请参考conv2d参数说明参数说明

N1, M, N0含义请参考matmul参数说明参数说明

cburst_num

输入

传输数据片段数目,取值范围:cburst_num∈[1, 4095],支持的数据类型为:立即数(int)。

该接口用于处理conv2d数据时矩阵计算后的结果格式为[cout_blocks,round_howo,16],cburst_num设为cout_blocks即可。

该接口用于处理matmul数据时矩阵计算后的结果格式为[N1, M, N0],cburst_num设为N1即可。

注:cout_blocks及round_howo含义请参考conv2d参数说明参数说明

N1, M, N0含义请参考matmul参数说明参数说明

burst_len

输入

连续传输数据片段长度,取值范围:burst_len∈[1, 65535],单位:32B。

支持的数据类型为:立即数(int)。

对于src,每个burst有效的数据片段长度为:

  • 该接口用于处理conv2d数据时应为howo*16*src_dtype_size/32,单位为32B。
  • 该接口用于处理matmul数据时应为m*N0*src_dtype_size/32,单位为32B。

dst_stride

输入

目的tensor相邻连续数据片段间隔(前burst尾与后burst头),取值范围:dst_stride∈[0, 65535], 单位:32B。支持的数据类型为:立即数(int)。

src_stride

输入

源tensor相邻连续数据片段间隔(前burst尾与后burst头),取值范围:src_stride∈[0, 65535], 单位:256 elements。支持的数据类型为:立即数(int)。

保留接口,为了计算数据准确性,填0即可。

extend_params

(针对Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品AI Core)

输入

扩展参数,数据类型为字典。默认值为None。 当前支持三个key,分别为"bias","quantize_params"和"relu"。具体内容如下:

1、key: "bias"

value:默认值为None,即不使能添加偏置功能。

若使能,value为偏置操作数的起始 element,支持的数据类型为 Tensor(int32, float32),需与src的数据类型保持一致,shape形状为[Cout,]

Cout :若src为conv2d输出,为卷积核个数;若src为matmul输出,为N方向长度。

tensor 的scope为L1

2、key : "quantize_params"

value: 默认值为None,即不使能量化功能。

使能时value为字典,字典中包含两个key,分别为"mode"和"mode_param"

"mode"对应value支持数据类型为字符串,支持如下几种量化模式:

  • "int322fp16": int32 量化成float16
  • "fp322fp16": float32量化成float16

"mode_param"对应value为如下三种:

  • scalar(float16)或立即数(float): 表示单个scale 值,仅mode为"int322fp16"时支持。
  • tensor(float16):shape为[16],scope为L1,分别作用于cout的16个channel,仅当不使能bias功能且mode为"int322fp16"时支持。
  • None,当mode为"fp322fp16"时应设置为None。

3、key:"relu":

value:默认值为False,支持的类型为bool类型。False:不使能relu功能;True:使能relu功能

注意事项:

  • 仅当不使能bias功能时支持relu。
  • 当使能量化功能,且参数为"mode":"int322fp16", "mode_param":scalar(float16)或立即数(float)时,不支持relu功能。

extend_params

(针对Atlas A2训练系列产品

输入

扩展参数,数据类型为字典。默认值为None。 当前支持两个key,分别为"quantize_params"和"relu"。具体内容如下:

1、key : "quantize_params"

value: 默认值为None,即不使能量化功能。

使能时value为字典,字典中包含两个key,分别为"mode"和"mode_param"

"mode"对应value支持数据类型为字符串,支持如下几种量化模式:

  • "int322fp16": int32 量化成float16
  • "fp322fp16": float32量化成float16

"mode_param"对应value为如下三种:

  • scalar(float32)或立即数(float): 表示单个scale 值,仅mode为"int322fp16"时支持。
  • tensor(float32):shape为[cburst_num, 16],scope为GM,分别作用于conv2d或matmul输出的cout个channel轴数据,仅当mode为"int322fp16"时支持。
  • None,当mode为"fp322fp16"时应设置为None。

2、key:"relu":

value:默认值为False,支持的类型为bool类型。False:不使能relu功能;True:使能relu功能。

注:量化功能和relu功能可以同时使能。

表2 src和dst的数据类型组合

src.dtype

dst.dtype

extend_params["quantize_params"]

float32

float16

"fp322fp16"

int32

float16

"int322fp16"

float32

float32

None

int32

int32

None

支持的型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas A2训练系列产品

昇腾310B AI处理器

AS31XM1X AI处理器

注意事项

返回值

调用示例