一文讲透模型量化(大白话版)
昨天讲的MoE,可以让模型每次只用一小部分参数,算得更少、更快。但它省不了内存,所有参数还是得一直装着待命。量化,就是专门用来省内存的办法。
昨天讲的MoE,可以让模型每次只用一小部分参数,算得更少、更快。但它省不了内存,所有参数还是得一直装着待命。量化,就是专门用来省内存的办法。
一、什么是量化?
模型学到的知识,最后都存成了数字,这些数字就叫参数。
存数字要占地方,记得越精确,占的地方越大。就像记账,3.1415926 要写 9 个字符,记成 3.14 只要写 4 个。
量化,就是把模型里的这些数字也这样记粗一点,让它们占的地方变小。
那「记粗一点」,在电脑里具体是怎么做的?
电脑记一个数,用的是一排开关。每个开关只有开和关两种状态,一排开关开开关关,排出不同的样子,每种样子代表一个数。这一个个开关,就叫「位」。
大模型发布时,每个参数通常用 16 位来存,也就是用 16 个开关记一个数。量化的做法,就是把开关砍少:砍到 8 个,地方省一半;砍到 4 个,只剩四分之一。
开关少了,能记的数就少了。1 个开关能排出 2 种样子,2 个开关 4 种,每多一个开关就翻一倍。16 个开关能排出 6 万 5 千多种,8 个开关只有 256 种,4 个开关只有 16 种。原来记得很精确的数字,现在就从这几个里挑一个最接近的来代替。
去年日课打过一个比方:一张照片本来有上千万种颜色,现在只准用 256 种(这就是 8 位;4 位就是只准用 16 种),每个像素就换成这 256 种里最接近的那个颜色。文件小了很多,但看上去还是那张照片。
量化也是一样:把数字记粗、把模型压小,模型还是那个模型。
二、压了还能用吗?
很多人第一反应是:数字都记粗了,模型不会变笨吗?
会变笨一点,但比想象中少得多。
美国软件公司Red Hat 团队,拿 Meta 开源的大模型 Llama 3.1,三个大小不同的版本,做了 50 多万次测评。结果显示,8 位量化的版本,平均保留了原版 99.75% 的成绩;4 位的版本,也保留了 99.36%。
量化之所以掉分少,有三个原因。