量化
又称:模型量化、4位、8位
更新于
定义
量化是用更少的位数存储模型中的每个数值,例如原本用16位或32位,现在用4位或8位。它让模型更小、占用的内存更少,通常只损失少量准确度。
模型主要是一长串数字,称为权重。训练完成时,每个权重通常是32位或16位浮点数。量化把它们改写成更粗略的形式。Apple的文档把它定义为减少表示一个数字所用的位数。
这就是同一个模型会以多个不同大小的下载版本出现的原因,标签有4bit、8bit或Q4等。它们是同一个模型,只是压缩程度不同。
能小多少
大小几乎与位数成正比。每个权重的位数减半,文件大约也减半。
一个公开的例子能说明这一点。对于一个80亿参数的语言模型,16位文件约为15 GiB,8位文件约为8 GiB,常见的4位版本约为4.6 GiB。4位版本实际约为每个权重4.9位,而不是正好4位,因为有些部分保留了更高的精度。
你会失去什么
会损失一点准确度。数字更粗略,意味着模型的运算处处都会稍有偏差,而且误差会累积。影响有多明显,取决于模型以及压缩的程度。
Apple的指导意见是,压缩到8位,对某些模型压缩到6位或4位,准确度只会略微下降。
除了大小,你还能得到什么
Apple列出的模型压缩可能带来的好处是:更小的内存占用、更低的延迟和更低的功耗,可能是其中一项,也可能兼而有之。在笔记本电脑上,内存往往是最重要的:一个能轻松装下的模型,会给你打开的其他一切留出空间。
看懂标签
标签告诉你权重的精度。
- fp32或float32:全精度,大多数模型都以此精度训练。
- fp16、bf16或float16:半精度。模型常以这种形式发布。
- 8bit或int8:全精度的四分之一。
- 4bit或int4:全精度的八分之一。在笔记本电脑上运行大模型时的常见选择。
- Q4、Q5、Q8后面跟着字母:同一思路在一种常见文件格式中的写法,字母表示所用的方法。
量化与调色板化
Apple的工具提供两种用更少位数存储权重的方式。线性量化把原始数值的范围映射到一个较小的整数范围。调色板化也称为权重聚类,它把权重分成若干簇,并把每个权重存储为一个简短查找表中的索引。
Apple的指导意见是,调色板化通常在神经网络引擎上效果最好,而对于在Mac图形芯片上运行的模型,4位量化的效果也可以很好。
大家常问的问题。
模型上的4位是什么意思?
意思是它的每个权重大约用4位存储,而原始模型用16位或32位。文件小得多,模型的准确度略低。
量化会让模型变差吗?
会略微变差。它用一些准确度换取更小的体积和更低的内存占用。Apple的指导意见是,8位,以及对某些模型而言的6位或4位,准确度只会略微下降。
4位模型和8位模型哪个更好?
8位模型更接近原始模型,4位模型的大小约为它的一半。如果内存够用就选8位,不够就选4位。
量化会让模型更快吗?
可能会。Apple列出的可能好处中包括更低的延迟,此外还有更小的内存占用和更低的功耗。
任何模型都能量化吗?
大多数都可以,借助转换已发布权重的工具即可。量化后效果保持得如何,因模型而异。
量化和压缩是一回事吗?
量化是模型压缩的一种。其他方式包括剪枝(移除部分权重)和调色板化(把权重存储为查找表中的条目)。