int8 矩陣乘法

本文主要講述 quantized 版本的矩陣乘法的計算流程,矩陣乘如下:
C=A×BC=A\times B
其中 AA 爲 uint8 類型, BB 爲 int8 類型,C爲 uint8 類型。其詳細計算流程爲u8s8->s32. s32 需要 dequantize 成 fp32 類型, 然後再經過quantize 才能變成 uint8 類型。在 affine 量化中,s32 類型的 zero_point 爲 0.
A 矩陣採用 per tensor 量化, B 矩陣採用 per_channel 量化
Aiint8=Aifp32scaleA+zeroAA_i^{int8} = \frac{A_i^{fp32}}{scale_{A}} + zero_A

Biint8=Bifp32scaleBcolj+zeroBcoljB_i^{int8} = \frac{B_i^{fp32}}{scale_{B_{col_j}}} + zero_{B_{col_j}}
Aiint8×Biint8=(Aifp32scaleA+zeroA)×(Bifp32scaleBcolj+zeroBcolj)=(Aifp32×Bifp32scaleA×scaleBcolj)+zeroA×Biint8+     Aiint8×zeroBcoljzeroA×zeroBcolj=Aifp32×Bifp32+zeroA×Biint8+     Aiint8×zeroBcoljzeroA×zeroBcolj \begin{aligned} A_i^{int8} \times B_i^{int8} &= (\frac{A_i^{fp32}}{scale_{A}} + zero_A) \times (\frac{B_i^{fp32}}{scale_{B_{col_j}}} + zero_{B_{col_j}})\\ &=(\frac{A_i^{fp32} \times B_i^{fp32}}{scale_{A} \times scale_{B_{col_j}}} ) + zero_A \times B_i^{int8}+ \\ & \space \space \space \space \space A_i^{int8} \times zero_{B_{col_j}} - zero_A \times zero_{B_{col_j}}\\ &=A_i^{fp32} \times B_i^{fp32} + zero_A \times B_i^{int8}+ \\ & \space \space \space \space \space A_i^{int8} \times zero_{B_{col_j}} - zero_A \times zero_{B_{col_j}} \\ \end{aligned}

i=0k1Aiint8×Biint8=i=0k1Aifp32×Bifp32+zeroA×i=0k1Biint8+     zeroBcolj×i=0k1Aiint8zeroA×i=0k1Bcolj=i=0k1Aifp32×Bifp32+zeroA×(i=0k1Biint8i=0k1Bcolj)+     zeroBcolj×i=0k1Aiint8 \begin{aligned} \sum _{i=0}^{k-1}{A_i^{int8}\times B_i^{int8} } &=\sum _{i=0}^{k-1}{A_i^{fp32}\times B_i^{fp32} } + zero_A\times \sum _{i=0}^{k-1}{B_i^{int8}} + \\ & \space \space \space \space \space zero_{B_{col_j}}\times \sum _{i=0}^{k-1}{A_i^{int8}} - zero_A \times \sum _{i=0}^{k-1} B_{col_j}\\ &=\sum _{i=0}^{k-1}{A_i^{fp32}\times B_i^{fp32} } +zero_A \times(\sum _{i=0}^{k-1}{B_i^{int8}} - \sum _{i=0}^{k-1} B_{col_j} ) + \\ &\space \space \space \space \space zero_{B_{col_j}}\times \sum _{i=0}^{k-1}{A_i^{int8}} \end{aligned}

所以:
i=0k1Aifp32×Bifp32=i=0k1Aiint8×Biint8zeroBcolj×i=0k1Aiint8     zeroA×(i=0k1Biint8i=0k1Bcolj) \begin{aligned} \sum _{i=0}^{k-1}{A_i^{fp32}\times B_i^{fp32} } &=\sum _{i=0}^{k-1}{A_i^{int8}\times B_i^{int8} } - zero_{B_{col_j}}\times \sum _{i=0}^{k-1}{A_i^{int8}} - \\ & \space \space \space \space \space zero_A \times(\sum _{i=0}^{k-1}{B_i^{int8}} - \sum _{i=0}^{k-1} B_{col_j} ) \end{aligned}
其中 (i=0k1Biint8i=0k1Bcolj)(\sum _{i=0}^{k-1}{B_i^{int8}} - \sum _{i=0}^{k-1} B_{col_j} ) 爲第 ii 列的col_offset, i=0k1Aiint8\sum _{i=0}^{k-1}{A_i^{int8}} 爲 A 矩陣第 ii 行的 row_offset

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章