大语言模型是指能够处理大规模文本数据的深度学习模型,例如GPT-3、BERT等。这些模型通常有数十亿甚至数百亿个参数,占用大量的存储空间和计算资源。为了提高这些模型的效率和可移植性,一种常用的方法是模型量化。
1:什么是模型量化?
模型量化是指将模型中的参数或者激活值从高精度(例如32位浮点数)转换为低精度(例如4位或者8位整数)的过程。这样可以减少模型的大小和运算复杂度,同时保持模型的性能。
2:模型量化有什么好处?
模型量化有以下几个好处:
-
减少存储空间:低精度的参数或者激活值占用更少的比特数,因此可以节省存储空间。例如,将32位浮点数转换为8位整数,可以将存储空间压缩为原来的1/4。
-
加速计算:低精度的运算通常比高精度的运算更快,因为需要处理的比特数更少。例如,使用8位整数进行矩阵乘法,可以比使用32位浮点数进行矩阵乘法快4倍。
-
降低能耗:低精度的运算也可以降低硬件设备的能耗,因为需要消耗的电力更少。例如,使用8位整数进行矩阵乘法,可以比使用32位浮点数进行矩阵乘法节省75%的能耗。
-
增加可移植性:低精度的模型可以更容易地部署到不同的硬件平台上,例如移动设备、边缘设备等,因为它们对存储空间和计算资源的要求更低。
3:量化的对象是什么?
模型量化主要针对两种对象:参数和激活值。
-
参数是指模型中的权重和偏置,它们在训练过程中被优化,在推理过程中保持不变。参数决定了模型的结构和功能。
-
激活值是指模型中各层之间传递的数据,它们在推理过程中根据输入和参数动态变化。激活值决定了模型的输出和性能。
4:量化的位数
量化的位数是指用多少比特来表示一个参数或者一个激活值。通常,量化的位数越低,表示范围越小,精度越低;量化的位数越高,表示范围越大,精度越高。
-
int4或者int8是指用4位或者8位整数来表示一个参数或者一个激活值。例如,int4可以表示从-8到7之间的16个整数;int8可以表示从-128到127之间的256个整数。
-
float32是指用32位浮点数来表示一个参数或者一个激活值。例如,float32可以表示从-3.4e38到3.4e38之间的约4.3e9个实数。
5:量化的分类
根据量化发生在训练过程还是推理过程,以及量化是否影响反向传播,可以将量化分为以下几类:
-
训练时量化:指在训练过程中就将参数或者激活值量化为低精度,同时在反向传播中也使用低精度的梯度。这种量化可以最大程度地减少模型的大小和运算复杂度,但是也可能导致模型的性能下降。
-
推理时量化:指在训练过程中使用高精度的参数或者激活值,然后在推理过程中将它们量化为低精度。这种量化可以保持模型的训练质量,但是也需要额外的转换步骤和校准方法。
-
伪量化:指在训练过程中使用高精度的参数或者激活值,但是在反向传播中使用低精度的梯度。这种量化可以模拟低精度的效果,但是不会真正改变模型的大小和运算复杂度。
6:模型的量化粒度
根据量化的范围和方式,可以将模型的量化粒度分为以下几类:
-
全局量化:指对整个模型中的所有参数或者激活值使用相同的位数和缩放因子进行量化。这种量化可以简化量化过程,但是也可能忽略了不同层之间的差异。
-
层级量化:指对每一层中的所有参数或者激活值使用相同的位数和缩放因子进行量化。这种量化可以适应不同层之间的分布,但是也需要更多的缩放因子和索引。
-
通道级量化:指对每一层中的每一个通道(或者神经元)使用相同的位数和缩放因子进行量化。这种量化可以进一步提高精度,但是也增加了计算复杂度和内存消耗。
所以在开源大模型中经常看到int4或int8,例如ChatGLM6B int4,或者Baichuan-13B-Chat及其INT4/INT8两个量化版本等,这里的int4或者int8都是指量化的版本。
往期精彩内容(直接点击阅读):
ChatGPT最强竞品Claude2来了:代码、GRE成绩超越GPT-4,免费可用
AI炒股回报超500%?ChatGPT能否成为韭菜们的最强股市"外挂"?
两天百万关注,北大法律大模型ChatLaw火了:直接告诉你张三怎么判
AutoGPT太火了,无需人类插手自主完成任务,大步迈向自主人工智能时代
从本质看ChatGPT:当知识、人性、价值观皆可训练时,AI是什么?
欢迎关注"AI演进"并加入AI演进社群