SetQuantVector
产品支持情况
|
产品 |
是否支持 |
|---|---|
|
|
√ |
|
|
√ |
|
|
√ |
|
|
√ |
|
|
x |
|
|
x |
功能说明
本接口提供对输出矩阵采用向量进行量化或反量化的功能,即对于输入shape为[1, N]的参数向量,N值为Matmul矩阵计算时M/N/K中的N值,对输出矩阵的每一列都采用该向量中对应列的系数进行量化或反量化。量化、反量化的详细内容请参考量化场景。
Matmul反量化场景:在Matmul计算时,左、右矩阵的输入为int8_t或int4b_t类型,输出为half类型;或者左、右矩阵的输入为int8_t类型,输出为int8_t类型。该场景下,输出C矩阵的数据从CO1搬出到Global Memory时,会执行反量化操作,将最终结果反量化为对应的half或int8_t类型。
Matmul量化场景:在Matmul计算时,左、右矩阵的输入为half或bfloat16_t类型,输出为int8_t类型。该场景下,输出C矩阵的数据从CO1搬出到Global Memory时,会执行量化操作,将最终结果量化为int8_t类型。
函数原型
- 量化参数的存储位置为GM
1__aicore__ inline void SetQuantVector(const GlobalTensor<uint64_t>& quantTensor)
- 量化参数的存储位置为L1 Buffer
1__aicore__ inline void SetQuantVector(const LocalTensor<uint64_t>& quantTensor)
Atlas 200I/500 A2 推理产品 暂不支持量化参数的存储位置为L1 Buffer。Atlas 推理系列产品 AI Core暂不支持量化参数的存储位置为L1 Buffer。
参数说明
|
参数名 |
输入/输出 |
描述 |
|---|---|---|
|
quantTensor |
输入 |
量化或反量化运算时的参数向量。参数向量的存储位置为GM或L1 Buffer。 |
返回值说明
无
调用示例
- 量化参数的存储位置为GM
1 2 3 4 5 6 7 8
GlobalTensor gmQuant; ... REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm, &tiling); mm.SetQuantVector(gmQuant); mm.SetTensorA(gm_a); mm.SetTensorB(gm_b); mm.SetBias(gm_bias); mm.IterateAll(gm_c);
- 量化参数的存储位置为L1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
GlobalTensor gmQuant; ... TQue<TPosition::C1, 2, 0> qidC1; LocalTensor<uint64_t> bufferQuant; pipe.InitBuffer(qidC1, 1, tiling.singleCoreN * sizeof(uint64_t)); REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm, &tiling); bufferQuant = qidC1.AllocTensor<uint64_t>(); DataCopy(bufferQuant, gmQuant, tiling.singleCoreN); qidC1.EnQue(bufferQuant); LocalTensor<uint64_t> localQuant = qidC1.DeQue<uint64_t>(); mm.SetQuantVector(localQuant); mm.SetTensorA(gm_a); mm.SetTensorB(gm_b); mm.SetBias(gm_bias); mm.IterateAll(gm_c);