aclnnWeightQuantBatchMatmulV2
产品支持情况
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]
- [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
- [object Object]Atlas 推理系列产品[object Object]
功能说明
- 算子功能:完成一个输入为伪量化场景的矩阵乘计算,并可以实现对于输出的量化计算。
- 计算公式: 公式中的为伪量化场景的输入,其反量化公式为 当需要对输出进行量化处理时,其量化公式为 当不需要对输出再进行量化操作时,其计算公式为
函数原型
每个算子分为undefined,必须先调用“aclnnWeightQuantBatchMatmulV2GetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnWeightQuantBatchMatmulV2”接口执行计算。
aclnnStatus aclnnWeightQuantBatchMatmulV2GetWorkspaceSize(const aclTensor *x, const aclTensor *weight, const aclTensor *antiquantScale, const aclTensor *antiquantOffsetOptional, const aclTensor *quantScaleOptional, const aclTensor *quantOffsetOptional, const aclTensor *biasOptional, int antiquantGroupSize, const aclTensor *y, uint64_t *workspaceSize, aclOpExecutor **executor)
aclnnStatus aclnnWeightQuantBatchMatmulV2(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream)
aclnnWeightQuantBatchMatmulV2GetWorkspaceSize
参数说明
x(aclTensor *, 计算输入):矩阵乘的左输入矩阵,公式中的输入
x
,device侧的aclTensor,undefined支持ND。undefined仅支持转置场景。- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持两维,shape支持(m, k),m表示矩阵第1维的大小,k表示矩阵的第2维的大小,其中Reduce维度k需要与
weight
的Reduce维度k大小相等,数据类型支持FLOAT16、BFLOAT16。x
矩阵为非转置时,m大小在[1, 2^31-1]范围内;转置时,m大小在[1, 65535]范围内。 - [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。shape支持2
6维,输入shape需要为(batch, m, k),其中batch表示矩阵的批次大小,支持04维,m表示单个batch矩阵第1维的大小,k表示单个batch矩阵的第2维的大小,batch维度需要与weight
的batch维度满足undefined。当伪量化算法模式为pertensorundefined时,m*k不能超过512000000。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持两维,shape支持(m, k),m表示矩阵第1维的大小,k表示矩阵的第2维的大小,其中Reduce维度k需要与
weight(aclTensor *, 计算输入):矩阵乘的右输入矩阵,公式中的输入
weight
,device侧的aclTensor,undefined支持ND、FRACTAL_NZ。- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持2维,Reduce维度k需要与
x
的Reduce维度k大小相等。数据类型支持INT8、INT4、INT32,当weight
undefined为FRACTAL_NZ且数据类型为INT4或INT32时,或者当weight
undefined为ND且数据类型为INT32时,仅在INT4Pack场景支持,需配合aclnnConvertWeightToINT4Pack
接口完成从INT32到INT4Pack的转换,以及从ND到FRACTAL_NZ的转换,undefined,若数据类型为INT4,则weight
的内轴应为偶数。undefined仅支持转置场景。shape支持(k, n),其中k表示矩阵第1维的大小,n表示矩阵第2维的大小。 对于不同伪量化算法模式,weight
的undefined为FRACTAL_NZ仅在如下场景下支持: - [object Object]Atlas 推理系列产品[object Object]:维度支持2~6维,batch维度需要与
x
的batch维度满足undefined,数据类型支持INT8。具体如下:- 当undefined为ND时,输入shape需要为(batch, k, n),其中batch表示矩阵的批次大小,支持0~4维,k表示单个batch矩阵第1维的大小,n表示单个batch矩阵的第2维的大小。
- 当undefined为FRACTAL_NZ时:
- 输入shape需要为(batch, n, k),其中batch表示矩阵的批次大小,支持0~4维,k表示单个batch矩阵第1维的大小,n表示单个batch矩阵的第2维的大小。
- 配合aclnnCalculateMatmulWeightSizeV2以及aclnnTransMatmulWeight完成输入Format从ND到FRACTAL_NZ的转换,undefined。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持2维,Reduce维度k需要与
antiquantScale(aclTensor *, 计算输入):实现输入反量化计算的反量化scale参数,反量化公式中的输入
antiquantScale
,device侧的aclTensor。undefined支持ND。- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16、UINT64、INT64(当FLOAT16、BFLOAT16时,数据类型要求和输入
x
保持一致;当为UINT64、INT64时,x
仅支持FLOAT16,不转置,weight
仅支持int8,ND转置,模式仅支持perchannelundefined,quantScaleOptional和quantOffsetOptional必须传入空指针,m仅支持[1, 96],k和n要求64对齐,需要首先配合aclnnCast接口完成FLOAT16到FLOAT32的转换,详情请参考undefined,再配合aclnnTransQuantParamV2接口完成FLOAT32到UINT64的转换,详情请参考undefined)。undefined仅支持转置场景。 对于不同伪量化算法模式,antiquantScale
支持的shape如下: - [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16,数据类型要求和输入
x
保持一致。 对于不同伪量化算法模式,antiquantScale
支持的shape如下:
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16、UINT64、INT64(当FLOAT16、BFLOAT16时,数据类型要求和输入
antiquantOffsetOptional(aclTensor *, 计算输入):实现输入反量化计算的反量化offset参数,反量化公式中的
antiquantOffset
,device侧的aclTensor。可选输入, 当不需要时为空指针;存在时shape要求与antiquantScale
一致。undefined支持ND。- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16、INT32,数据类型为FLOAT16、BFLOAT16时,数据类型要求和输入
x
的数据类型保持一致;数据类型为INT32类型时,数据范围限制为[-128, 127],x仅支持FLOAT16,weight仅支持int8,antiquantScale
仅支持UINT64/INT64。undefined仅支持转置场景。 - [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16,数据类型要求和输入
x
保持一致。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:数据类型支持FLOAT16、BFLOAT16、INT32,数据类型为FLOAT16、BFLOAT16时,数据类型要求和输入
quantScaleOptional(aclTensor *, 计算输入):实现输出量化计算的量化参数,device侧的aclTensor,由量化公式中的
quantScale
和quantOffset
的数据通过aclnnTransQuantParam
接口转化得到。quantOffsetOptional(aclTensor *, 计算输入):实现输出量化计算的量化offset参数,量化公式中的
quantOffset
,device侧的aclTensor。biasOptional(aclTensor *, 计算输入):偏置输入,公式中的
bias
,device侧的aclTensor。可选输入, 当不需要时为空指针。undefined支持ND。不支持undefined。- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持1维或2维,shape支持(n,)或(1, n)。数据类型支持FLOAT16、FLOAT。当
x
的数据类型为BFLOAT16时,本参数要求为FLOAT;当x
的数据类型为FLOAT16时,本参数要求为FLOAT16。 - [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。维度支持1~6维,带batch时,输入shape需要为(batch,1,n),batch要与x和weight的batch维度broadcast后的batch保持一致,不带batch时,输入shape需要为(n,)或(1, n)。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持1维或2维,shape支持(n,)或(1, n)。数据类型支持FLOAT16、FLOAT。当
antiquantGroupSize(int, 计算输入):表示在伪量化pergroup和mxundefined下,对输入
weight
进行反量化计算的groupSize输入,描述一组反量化参数对应的待反量化数据量在Reduce方向的大小。当伪量化算法不为pergroup和mxundefined时传入0;当伪量化算法为pergroupundefined时传入值的范围为[32, k-1]且值要求是32的倍数;在mxundefined,仅支持32。y(aclTensor *, 计算输出):计算输出,公式中的
y
,device侧的aclTensor。undefined支持ND。不支持undefined。- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持2维,shape支持(m, n)。数据类型支持FLOAT16、BFLOAT16、INT8。当
quantScaleOptional
存在时,数据类型为INT8;当quantScaleOptional
不存在时,数据类型支持FLOAT16、BFLOAT16,且与输入x
的数据类型一致。 - [object Object]Atlas 推理系列产品[object Object]:数据类型支持FLOAT16。维度支持2~6维,shape支持(batch, m, n),batch可不存在,支持x与weight的batch维度broadcast,输出batch与broadcast之后的batch一致,m与x的m一致,n与weight的n一致。
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:维度支持2维,shape支持(m, n)。数据类型支持FLOAT16、BFLOAT16、INT8。当
workspaceSize(uint64_t *, 出参):返回需要在Device侧申请的workspace大小。
executor(aclOpExecutor **, 出参):返回op执行器,包含了算子计算流程。
返回值:
aclnnStatus:返回状态码,具体参见undefined。
aclnnWeightQuantBatchMatmulV2
参数说明
- workspace(void *, 入参):在Device侧申请的workspace内存地址。
- workspaceSize(uint64_t, 入参):在Device侧申请的workspace大小,由第一段接口
aclnnWeightQuantBatchMatmulV2GetWorkspaceSize
获取。 - executor(aclOpExecutor *, 入参):op执行器,包含了算子计算流程。
- stream(aclrtStream, 入参):指定执行任务的Stream。
返回值:
aclnnStatus:返回状态码,具体参见undefined。
约束说明
性能优化建议:
- [object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
调用示例
示例代码如下,仅供参考,具体编译和执行过程请参考undefined。