首页 > 其他分享 >【白话模型量化系列一】矩阵乘法量化

【白话模型量化系列一】矩阵乘法量化

时间:2022-11-28 18:00:36浏览次数:59  
标签:白话 模型 矩阵 整数 量化 int8 乘法


模型量化是模型加速方向一个很重要的方法,主要思想就是用int8数据格式来存储和进行计算。这样做有两点好处:

  1. 可以减小模型存储的体积。原本float32存储需要4个字节,现在int8存储只需要1个字节,体积是原来的1/4。
  2. 可以加快计算速度。这主要是因为int8数据的读写更快,并且int8矩阵乘法一般来说会更快一点。

以现在最常用的Transformer模型来举例,在使用CUDA推理加速库(例如LightSeq)之后,矩阵乘法的占比高达将近90%。所以优化非矩阵乘法的速度意义不是很大了,占比不高,你算得再快对整体的提速也很小,因此可以尝试优化矩阵乘法。

那么我们考虑浮点数矩阵乘法

【白话模型量化系列一】矩阵乘法量化_算法


用整数矩阵来表示浮点数矩阵

首先我们需要将一个浮点数矩阵

【白话模型量化系列一】矩阵乘法量化_机器学习_02

接着整数矩阵

【白话模型量化系列一】矩阵乘法量化_人工智能_03


这样我们就可以得到两个浮点数矩阵的整数表示,接下来就可以利用他们来进行整数矩阵乘法的转换。

转化为整数矩阵乘法

整数矩阵

【白话模型量化系列一】矩阵乘法量化_人工智能_04

【白话模型量化系列一】矩阵乘法量化_算法_05

【白话模型量化系列一】矩阵乘法量化_人工智能_06

【白话模型量化系列一】矩阵乘法量化_机器学习_07

【白话模型量化系列一】矩阵乘法量化_机器学习_08

【白话模型量化系列一】矩阵乘法量化_机器学习_09


此外为了减小量化的损失,还需要在模型结构中插入伪量化节点,然后进行量化感知训练(QAT)。接着还需要将finetune后的模型存储为int8格式。然后还需要开发加载int8模型的推理加速库代码。最后就是本文讲到的整数矩阵乘法了。整个流程比较繁琐,这部分内容今后我会慢慢给大家分享。网上关于量化的优秀教程非常多,我不会讲太多理论上的量化知识,只会从实践的角度来白话一下我们在Transformer模型量化过程中做的一些尝试。

标签:白话,模型,矩阵,整数,量化,int8,乘法
From: https://blog.51cto.com/godweiyang/5893251

相关文章