跳到主要内容

用更少的位装同一个模型 — 每个数存多少位是可选的

这一章讲三件事: 为什么「一个模型有多大」其实是一个可选项; 把每个数压到 4 位具体是怎么压的、为什么它没把模型压坏; 以及压完之后凭什么说它还能用。

它在全书链条里的位置: 第 01 章说过,那个「关键中间层」不是天然存在的, 是被几项技法造出来的。这一章是第一项。 它同时兑现第 06 章那个欠账:那里算显存时说过「位宽这件事第 11 章正面讲」。

★ 这一章还是第 10 章那套验收方法的第一次实战: 压完之后怎么验,用的正是第 10 章那一摞。

1. 先看现象:同一个模型,文件大小能差四倍

你在模型托管站上找一个 70 亿参数的模型准备下载,列表里是这样的:

model-7b-Q8_0.gguf 7.0 GB
model-7b-Q5_K_M.gguf 4.7 GB
model-7b-Q4_K_M.gguf 3.9 GB
model-7b-IQ2_XXS.gguf 2.1 GB

← 同一个模型。参数一个不少。文件大小差三倍多。
← 而且那些后缀你多半不知道是什么意思。

这一章要回答的就是这个列表: 这些文件里到底哪里不一样、你该下哪一个、 以及下完之后怎么确认它没坏。

这件事的起点是一句很朴素的观察

书用一段前史开的头,而那段前史正好点明了这一章的性质1:

1990 年代初,主要在欧洲,出现过一个奇怪的亚文化: 他们要在只有几千字节的可执行文件里,做出精心编排的视听演示。 这些作品把「省」变成了一种创作上的美德, 并且证明了约束可以激发创新,而不是扼杀它。

而这一章的实用理由更直白1:

一个最有能力的模型,如果大到没法部署、或者慢到没法服务用户,它创造不出任何商业价值。

2. 顶层全景:一架梯子,每往下一级内存减半

float32(32 位) ── 7B 模型光参数就要 28GB
│ 能表示的取值:几十亿个
↓ 内存减半
float16 / bfloat16(16 位) ── 14GB
│ float16 能表示 65536 个不同的值(仍然远多于网络需要的)
│ bfloat16 保住了 float32 的量程,只削精细度
↓ 内存减半
int8(8 位) ── 7GB
│ 256 个不同的值
↓ 内存减半
int4(4 位) ── 3.5GB
★ 只剩 16 个不同的值。
★ 而它「好用得出人意料」——这一章要解释的就是这个「出人意料」。

图说:**每往下一级,内存大致减半;但它不是免费的。**
书的原话:在计算里,一切都有代价;**量化这门暗技就是让「简化」拿回来的,
多过「精度损失」付出去的。**

主走查(全章共用): 一个 70 亿参数模型里的一小组权重,被压成 4 位的全过程—— 每一步的具体数字;以及压完之后困惑度动了多少、什么幅度该报警。 编造的数每次出现都会标明。

3. 机制一:高精度里本来就有大量富余

这一节兑现第 06 章那笔账:那里说「同一个模型用 16 位存要 14GB、用 4 位存只要 3.5GB」, 但没说为什么可以这么干。

现象:那些位其实没在干活

书给的观察很干脆2:

标准的 32 位浮点,给「神经网络计算里真正要紧的那些权重值」提供的精度是绰绰有余的。 量程和精细度都远超网络实际会用到的范围。 大多数权重落在 0 附近一个很窄的区间里,而小数点后第五位上的微小差别,极少影响输出。

这就是全章的立足点:高精度表示里存着大量根本没在干活的位。

那架梯子上每一级各是什么

格式位数能表示多少个不同的值特点
float3232几十亿基准。7B 模型光参数 28GB
float161665536减半;仍然远多于网络需要的
bfloat1616同上量级Google Brain 提的格式:保住 float32 的量程,只削小数部分的精细度——所以它扛得住偶尔冒出来的大数值
int88256要把浮点权重的分布小心地映射到这 256 个值上
int4416极端压缩,却对许多模型好用得出人意料3

这里有一个数值上的参照物值得记住: 从 65536 个可选值降到 16 个,可选值少了四千多倍;而模型的能力(下面第 7 节会量) 通常只掉一到两个百分点。

顺带认一个会撞见的新格式名

NVIDIA 有一个把 4 位浮点做到硬件里的格式,叫 NVFP44:

它长什么样1 位符号、2 位指数、1 位小数,总共 16 个可表示的值,量程只有正负 6
量程这么小怎么用靠分组缩放——每一小组权重带一个自己的缩放系数(下一节就讲这件事)
它跑在哪Blackwell 与 Vera Rubin 这两代硬件原生支持
收益相比 8 位浮点推理最快可达 3.6 倍;而且更省电——搬更少的位、做更简单的算术

注意别把它和另一个 4 位格式搞混,书专门开了一个框来分辨5:

NF4NVFP4
为谁设计为微调场景设计(第 12 章那个只训一小块旁路的做法用的就是它)主要面向推理
它优化的是神经网络里权重的正态分布形状一个更通用的 4 位浮点格式
谁能跑一个通用的量化库只有那两代硬件

4. 机制二:压到 4 位不是粗暴取整

这是这一章的命门。 只有 16 个格点还能保住能力,靠的不是运气。

它解决什么问题

一层权重里的实际数值长这样:
0.0231 −0.0388 0.0009 0.0412 −0.0117 ……

如果粗暴地把它们四舍五入到 16 个固定格点(比如 −8, −7, …, 7)上:
★ 全部变成 0。整层报废。

怎么做:分组 + 一个缩放系数 + 就近落格

做法只有三步,书在讲那个 4 位格式时给出了它的核心4:

每一小组权重带一个自己的缩放系数,把这一组实际的数值分布, 映射进那个很窄的可表示区间里。

走查:那一组权重被压的全过程

取 7B 模型某一层里的一小组权重(为演示取 32 个一组):

第 1 步:看这一组里绝对值最大的那个
这一组最大是 0.0412

第 2 步:算这一组的缩放系数
4 位有符号能表示的格点是 −8 到 +7
缩放系数 = 0.0412 ÷ 7 ≈ 0.00589
★ 意思是:格点 1 代表 0.00589,格点 2 代表 0.01178,以此类推

第 3 步:组内每个权重各自落到最近的格点上
0.0231 ÷ 0.00589 = 3.92 → 取整到 4
−0.0388 ÷ 0.00589 = −6.59 → 取整到 −7
0.0009 ÷ 0.00589 = 0.15 → 取整到 0

第 4 步:用的时候乘回去
格点 4 × 0.00589 = 0.02356
原值 0.0231,误差 0.00046 ← 这就是量化误差

第 5 步:算这一组省了多少
原来:32 个数 × 16 位 = 512 位
现在:32 个格点 × 4 位 + 一个 16 位的缩放系数 = 144 位
★ 省了约 3.5 倍。

(32 这个组大小、以及上面所有权重数值,都是为演示编的;
「每一小组带自己的缩放系数」和「4 位共 16 个值」是书里给的。)

为什么这有效

因为缩放系数把「那 16 个格点」精准地对准了这一小组权重真实的分布范围。

这一组的值域是 ±0.04 → 格点间距 0.0059
另一组的值域是 ±0.4 → 那一组的缩放系数会自动大十倍,格点间距 0.059

★ 每一组都拿到「适合自己」的分辨率。
这就是为什么 16 个格点够用——它们不是全模型共用的 16 个刻度,
是每一小组各自的 16 个刻度。

由此得到这一节最该带走的一句:

真正决定质量的不是「几位」,是「组分多大」和「格点怎么摆」。 组分得越小,缩放系数越贴合,误差越小——但缩放系数本身也要占地方。 而格点是均匀摆还是按权重的分布形状摆(比如上一节那个 NF4),也直接决定误差。

5. 机制三:两族方法 —— 要不要先拿几百条样本试跑一遍

上面那套是所有量化方法共用的骨架。 各家的差别在于: 它们怎么决定「哪些权重该被优待」。

第一族:先试跑一遍再定(要校准数据)

做法:拿几百条样本喂进模型跑一遍,看每个权重实际起了多大作用,再据此决定怎么压。

名字它的主意
GPTQ把量化当成一个优化问题:给定一批校准样本,找出使「重建误差」最小的那组低精度权重;它逐层处理,并利用「权重扰动如何影响输出」的二阶信息,做出比简单就近取整更聪明的取整决定6
AWQ它的观察是:不是所有权重同等重要。有些权重要乘上很大的激活值、对输出贡献很大;有些乘上接近零的激活值、几乎无关。 做法是在量化前把重要的那些放大、量化后再缩回去,等于把更多精度分配到要紧的地方7

校准这件事的成本比想象中低8:

通常需要 128 到 512 条样本,在一张显卡上几分钟跑完。 作者的经验:用一小批本领域的样本效果最好, 但对很多应用来说,通用文本样本也够用。 而且这是每个模型、每个位深只花一次的一次性开销

第二族:不用试跑,直接换表示(免校准)

做法:拿到模型立刻就能压,不需要任何数据。

名字它的主意
LLM.int8专门处理那些会把 8 位精度拖垮的离群特征
NF4上一节那个:格点按「神经网络权重的正态分布」来摆,不均匀摆
HQQ用一种数学求解方法在没有校准数据的情况下找到好的量化参数;适合要快速压很多个模型、或者压根拿不到校准数据的时候

两族的差价,以及它随位深变化

这是这一节最该记住的一条9:

免校准的方法在基准上通常比校准方法落后 1 到 2 个百分点,而且位深越低,差距越大。

位深两族的差距
8 位可以忽略
4 位校准派明显更好,值得为它付那笔一次性的校准成本

一张选型表(书给的,7B 模型)

方法输出位深要不要校准7B 占多少内存掉多少能力最适合
16 位浮点1614GB基准开发
LLM.int887GB< 1%省事的 8 位部署
HQQ4–83.5–7GB1%–3%快速就地量化
GPTQ43.5GB1%–2%通用 4 位部署
AWQ43.5GB< 1%对精度要紧的 4 位部署
FP887GB< 0.5%Hopper 及更新的硬件
NVFP443.5GB1%–2%Blackwell 及更新的硬件

这张表最该带走的一个数10:

一个 700 亿参数的模型,16 位浮点要 140GB;压到 4 位是 35GB。 参照物:140GB 意味着要好几张数据中心级的卡; 35GB 意味着一两张高端消费级显卡就够。这就是第 01 章那个「中间层」的第一块砖。

6. 机制四:读懂文件名后缀

这一节解决第 1 节那个下载列表。看着琐碎,但读者出门第一件事就是要选一个文件下载。

先说清楚那个文件格式

那些 .gguf 文件是一个单文件打包格式11:

它的前身要把模型权重、分词器配置、结构元数据分成好几个文件; 这个格式把所有东西打包进一个自包含的二进制文件—— 一个文件就足以装载并运行一个模型。 这个设计加上它配套的高效 CPU 推理引擎,让它成了本地与边缘部署的事实标准。

命名规则:Q{位数}_{方法}_{尺寸}

位置例子意思
位数Q4 = 4 位、Q5 = 5 位位数越低,文件越小、推理越快,量化误差越大
方法见下表这里才是真正的区别所在
尺寸后缀_S / _M / _L同一位深内部的三档松紧

三族方法12:

长什么样说明
老式(Q4_0Q4_1Q8_0)每一组权重一个缩放系数,就近取整_1 那种多存一个「组内最小值」,让格点可以整体平移而不只是缩放,精度略好。Q8_0 至今好用——8 位对多数实际用途基本无损;但 4 位的老式方法已经基本被下面那族取代
K 族(Q3_KQ6_K)2023 年中出现。它不再对所有张量一视同仁,而是给不同类型的张量分配不同位深注意力那部分的权重和前馈层那部分的权重可以用不同精度;而且缩放系数本身存得更省
IQ 族(IQ2IQ3IQ4)用一批校准数据算出「哪些权重对输出贡献最大」,据此分配精度这让它在极低位深上仍然好用:IQ2 那几档能在每个权重只有 2 位时产出可用的模型——而普通量化到这个程度会输出乱码;IQ4_NL 用的是非均匀的格点

三个尺寸后缀的含义12:

后缀意思
_S(小)最激进:更多张量被压到低精度,保留的元数据更少。同位深里文件最小、质量最低
_M(中)平衡:一部分张量保持在高于名义位深的精度上。这是通用场景最常被推荐的一档
_L(大)最保守:更多张量保持高精度。同位深里文件最大、质量最好

一张对照表和一条选型启发

书给的 7B 对照表(挑要紧的几行)13:

类型位数7B 大小质量备注
Q2_K2–3~2.7GB极端压缩,劣化明显
IQ2_XXS2~2.1GB可用2 位这一档里质量最好的
Q4_K_M4~3.9GB多数人的推荐默认
Q5_K_M5~4.7GB很好大小与质量的最佳平衡
Q6_K6~5.5GB极好近乎无损,内存允许就用它
Q8_08~7.0GB几乎完美

选型启发,四条14:

① 在**装得下**的前提下选最高位深
★ 「装得下」要留出对话缓存和上下文窗口的空间——
这一点第 13 章会正面讲,它是很多人算错的地方

② 同一个位深里,选 _M

③ 内存紧 → **降到 _S**,而不是降位深

④ 内存宽裕 → **升一个位深**,而不是升到 _L
理由:多一位精度带来的质量提升,通常超过「同位深下更保守的量化」

一条不许省略的警告

网上找到的量化文件不都是被称职地量化过的。 工具太容易用了,谁都能产出这种文件,但不是每个人都用了合适的校准数据、 也不是每个人都事后验过质量。 找原模型提供方发布的,或者找那些公开自己方法和困惑度测量的知名社区量化者。 拿不准就自己验。15

7. 机制五:压完怎么验 —— 第一道防线恰恰漏掉最要紧的东西

这一节是这一章和第 10 章接上的地方,也是这一章最容易被跳过、然后出事的地方。

第一道防线:困惑度

为什么它是第一道16:

它确定、可复现,而且对量化引入的那种分布漂移敏感。 拿全精度模型和它的量化版在同一批文本上比困惑度, 能给出一个「丢了多少通用能力」的单数字度量。

书给了一条可以当场用的报警线16:

困惑度涨了多少意味着
0.1 到 0.5 点多数量化良好的 4 位模型就是这个幅度,正常
超过 1.0 点该查了:要么量化方法不好,要么这个模型结构对降精度异常敏感,要么量化过程出了岔子

但它有一个致命的盲区

这是本节最该记住的一条,而且它的机制很好懂17:

困惑度是被**常见模式主导**的:
容易预测的 token、高频的句式结构
→ 而这些东西,量化恰恰保得很好

真正把「有能力的模型」和「平庸的模型」区分开的,
是那些**罕见的、难预测的**预测
→ 而它们对困惑度这个总分的贡献相对很小

★ 后果:**困惑度可能恰好漏掉了「对要求高的应用来说最要命的那种退化」。**

书对它的定性一句话:必要,但不充分。

所以要接一道三级质量门

书把它写成了一条可以放进自动化流水线的门禁,三步依次执行18:

第 1 关:困惑度阈值
量化版的困惑度必须落在全精度基准的容差内(书给的例子:不超过 +0.5)
★ 它抓的是**灾难性的量化失败**,而且抓得快

第 2 关:基准回归幅度
一组精选基准上的分数,不得低于基准值的某个百分比(书给的例子:相对退化不超过 3%)
★ 它抓的是**广泛的能力流失**

第 3 关:任务验收
在你实际部署任务的留出样例上,表现必须达到最低门槛
★ 它抓的是**通用基准看不见的、任务特有的退化**

── 任何一关没过的模型,**转人工复核,而不是自动上线。**

★ 门槛必须由用途定,这是第 10 章那条口径的第二次出现

书把这一点说得毫不含糊18:

这些阈值应当依据部署需求来设,而不是随便定几个数。 一个服务闲聊问询的对话机器人,能容忍的退化, 比一个在急诊分诊台上给病人分级的模型要多得多。

第 10 章说过「评估必须对着你实际的用法」。这里是它在压缩场景的具体形态。

走查:那个模型压完之后的三关成绩

把 7B 模型从 16 位压到 Q4_K_M(14GB → 3.9GB)

第 1 关:困惑度 5.68 → 5.94 涨了 0.26
← 落在书给的 0.1–0.5 正常区间。过。

第 2 关:一个 57 学科的知识基准 61.2% → 60.1%
相对退化 1.8%,低于 3% 的门槛。过。

第 3 关:任务验收 —— 拿 200 封留出的拒付信考它
「正确引用第 7 条第 3 款」的比例:96% → 95%
「拒付理由代码写对」的比例: 99% → 99%
过。

★ 裁决:可以上线。而如果第 3 关掉到 80%,前两关全绿也不能上——
** 因为前两关根本测不到「引条款号」这种罕见而关键的能力。**

(除了「困惑度涨 0.1–0.5 算正常」和「相对退化 3%」这两个门槛之外,
上面所有数字都是为演示编的。)

还有一步很朴素、但只有它看得见的检查

书专门讲了「头对头比对」19:

同一批提示词分别喂给全精度版和量化版,把输出并排放着看。 并排检查会暴露指标看不见的质的差别: 量化版可能长文写得略微不连贯、复杂指令里的细微差别丢了、或者回答变得不那么多样。

这些差别未必要紧,但它们对困惑度和基准分数是隐形的。

要铺量的话,就用第 10 章那个「让强模型当裁判」的做法19:

如果裁判分不出全精度版和量化版,说明量化保住了那些主观上要紧的品质。 反过来,如果裁判在某几个维度上一致偏好全精度版,那几个维度就精确指出了退化在哪。

8. 顺带说清楚两条别的路

路一:训练的时候就为低精度打算

上面讲的全是「训完之后再压」。还有一条路是「训的时候就按低精度训」20:

直觉很直白:如果这个模型最终要在低精度下运行, 那它就该学出一组「在低精度下也管用」的权重, 而不是学出一组「碰巧四舍五入之后还行」的高精度最优解。

但这里有一个技术障碍,而它的解法很有意思20:

障碍:取整这个操作**不可求导**——
它在几乎所有地方梯度都是 0,在取整的分界点上梯度没有定义。
而第 02 章讲过,训练全靠「算出该往哪挪」。

解法(名字叫直通估计器):
前向:用量化后的权重算 ← 让模型真的体验到低精度的后果
反向:**假装量化没发生过** ← 梯度照常流过去
更新:改的是那份**全精度的主权重**,下一轮再重新量化

★ 结果:模型学出来的权重,是「它的量化版本能产出好输出」的那种,
尽管学习信号本身忽略了量化。

路二:压到 1 位 —— 以及它为什么不能事后做

书提了这条最极端的路,并且立刻给了它的限制条件21:

微软的一项工作证明:用三个取值(−1、0、+1)从头原生训练出来的模型, 在同等参数量下能匹配全精度模型的表现;它把内存降一个数量级, 还把昂贵的乘加运算换成了简单的加法。

★ 但有一个必须说清的前提:这类模型必须从零开始、用量化感知的方法训。 你没法把一个现成的模型事后压到 1 位——那会导致灾难性的劣化。

顺带看一眼这件事在最大那一档是什么样

书开了一个专栏讲基础实验室那一档,读一眼能校准你对「中间层」的位置感22:

他们面对的具体
并行方式训练同时用三个维度的并行(数据、张量、流水线),混合专家结构下还会扩到五个维度
他们盯的指标算力利用率——因为低效会在几千张卡、几周训练上复合;5% 的差距可能意味着几百万美元的算力成本
显存怎么算精确到 GB

参照物:这一章讲的所有事,在这一档是「顺手就做的」; 而在第 01 章那个中间层里,它是「这件事能不能干成」的分界线。

9. 作者的判断与证据

说法是哪一类说明
高精度里存在大量富余有据的观察「多数权重落在 0 附近很窄的区间、第五位小数极少影响输出」是可验证的性质2
4 位「好用得出人意料」作者的措辞书自己用的就是 surprisingly well;它是一个经验现象,书没有给它一个机制解释3
那个 4 位浮点格式比 8 位快 3.6 倍他引厂商的数字书明写这是 NVIDIA 报告的数字,不是独立测量4
免校准比校准落后 1–2 个百分点有据的经验区间书给了各方法的尾注;并说明差距随位深降低而扩大9
校准要 128–512 条样本、几分钟有据 + 作者经验数量和耗时是通行做法;「本领域样本效果最好」那句作者明写是自己的经验8
那张 7B 各方法的内存与掉分表书给的汇总逐项配了尾注9
那条四步选型启发作者的经验法则书自己写的就是「a simple heuristic」14
困惑度涨 0.1–0.5 正常、超 1.0 该查经验区间书没有给出处;当报警线用,不当验收标准16
困惑度恰恰漏掉罕见能力机制论证书给了理由(它被常见模式主导),这是推理不是实测17
三级质量门的两个例子阈值(+0.5、3%)书给的示例值书明说阈值应当按部署需求定,不要用随便的数18
1 位模型必须从零训有据书给了那项工作的尾注,并明确了这个前提21
5% 的算力利用率差 = 几百万美元作者的量级示意书没有配调研出处22

10. 边界与局限

  1. 量化的数学我们只交付了「分组 + 缩放 + 落格」这个结构。 书里那些方法各自的目标函数(比如逐层最小化重建误差用的二阶信息)没有展开, 书本身也只给了一句话的描述加尾注。
  2. 每一族方法的具体软件包和调用方式不在这里。 书点了几个库的名字, 属于会随版本变的接口;这一章交付的是选型判断。
  3. 激活值的量化我们几乎没讲。 书主要讲权重量化; 激活值怎么处理(比如那个专门对付离群特征的 8 位方法)只提了一句, 我们照它的详略处理。
  4. 书没有给「哪个位深对应哪种业务」的对照表。 它给的是「按部署需求设阈值」这条口径,具体门槛必须你自己定。
  5. 训练时就为低精度打算那条路,书只给了原理。 它没讲怎么真的跑起来,也没给成本对比——这一条属于书自己的空白,我们照实说。

11. 可带走的

  1. 一个模型有多大不是天定的:每个参数用多少位存是一个可选项; 每往下一级,内存大致减半;
  2. 高精度里存着大量没在干活的位——多数权重落在 0 附近的窄区间,小数点后第五位极少影响输出;
  3. 梯子上的四级:32 位(几十亿个可选值)→ 16 位(65536 个)→ 8 位(256 个) → 4 位(只剩 16 个);而 4 位好用得出人意料;
  4. bfloat16 和 float16 都是 16 位,区别是前者保住了量程、只削精细度——所以它扛得住偶尔的大数值;
  5. 4 位不是粗暴取整:一小组权重共用一个缩放系数,组内各自落到最近的 16 个格点上; 每组各有各的刻度,这才是它够用的原因;
  6. 所以真正决定质量的是「组分多大」和「格点怎么摆」,不是「几位」;
  7. 方法分两族:先拿 128–512 条样本试跑一遍再定的(GPTQ 逐层最小化重建误差、 AWQ 保护那些会乘上大激活值的权重),和不用试跑直接换表示的;
  8. 免校准通常落后 1 到 2 个百分点,而且位深越低差得越多; 8 位差别可忽略,4 位就值得付那笔一次性校准成本;
  9. 70B 模型:16 位要 140GB,4 位是 35GB。 这是第 01 章那个「中间层」的第一块砖;
  10. 读懂文件名:Q{位数}_{方法}_{尺寸};K 族给不同张量分配不同位深; IQ 族用校准算出哪些权重最要紧,所以 2 位还能用;
  11. 四条选型启发:装得下的前提下选最高位深(要留出对话缓存的空间)· 同位深选 _M · 内存紧降 _S 而不是降位深 · 内存宽裕升位深而不是升 _L;
  12. 网上的量化文件不都可信:找原厂,或者找公开了方法和困惑度测量的量化者;
  13. 困惑度是第一道防线:4 位涨 0.1–0.5 正常,超过 1.0 该查;
  14. 但困惑度被常见模式主导,它恰恰漏掉那些罕见而关键的能力——必要但不充分;
  15. 接一道三级质量门:困惑度阈值 → 基准回归幅度 → 任务验收; 不过关的转人工,不自动上线;
  16. 门槛必须由用途定。 闲聊机器人和急诊分诊模型不是一个标准;
  17. 头对头并排读输出,是唯一能看见「长文变得不连贯、细微差别丢了」的办法;
  18. 训练时就为低精度打算是另一条路:前向用量化权重、反向假装没量化、更新全精度主权重;
  19. 1 位模型必须从零训——你没法把一个现成模型事后压到 1 位。

12. 原文地图

主题原书章原文位置
那段前史 · 效率为什么是必需的EFFICIENCY TECHNIQUES: QUANTIZATION AND COMPRESSIONtext/92-fm-squeezing-blood-from-bits.txt:5(搜「constraints could fuel innovation」) · :7(搜「creates no business value」) · :9(搜「several optimizations stacked」)
精度阶梯 · 高精度的富余Squeezing Blood from Bitstext/93-fm-squeezing-blood-from-bits.txt:7(搜「consumes 28GB of memory」) · :9(搜「everything has a price」) · :13(搜「fifth decimal place」) · :15(搜「brain floating point」) · :17(搜「works surprisingly well」)
那个 4 位浮点格式 · 分组缩放Squeezing Blood from Bitstext/93-fm-squeezing-blood-from-bits.txt:23(搜「per-block scaling factors」) · :25(搜「3.6 times faster inference」)
两个 4 位格式的区别 · 1 位那条路WARNINGtext/94-fm-warning.txt:3(搜「NF4 and NVFP4 are different」) · :5(搜「without catastrophic degradation」)
两族方法 · 校准成本 · 差价WARNINGtext/94-fm-warning.txt:19(搜「minimize reconstruction error」) · :21(搜「not all weights matter equally」) · :23(搜「128 to 512 samples」) · :29(搜「Half-quadratic quantization」) · :31(搜「with the gap widening at lower bit depths」)
那张方法对照表 · 70B 的数WARNINGtext/94-fm-warning.txt:33(搜「Quantization Methods and Output Bit Depths」) · :131(搜「would require 140GB in float16」)
训练时就为低精度打算WARNINGtext/94-fm-warning.txt:135(搜「adapt to reduced precision」) · :137(搜「straight-through estimator」)
基础实验室那一档FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALEtext/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:3(搜「Model Flops Utilization」)
单文件格式 · 命名规则 · 三族方法FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALEtext/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:11(搜「single self-contained binary」) · :19(搜「a single scale factor per block」) · :23(搜「different bit depths to different tensor types」) · :33(搜「importance-matrix」)
尺寸后缀 · 对照表 · 选型启发FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALEtext/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:27(搜「most commonly recommended variant」) · :37(搜「Common GGUF Quantization Types」) · :139(搜「the highest bit depth that fits comfortably」)
网上的文件不都可信WARNINGtext/96-fm-warning.txt:3(搜「not everyone uses appropriate calibration data」)
困惑度作为第一道防线 · 它的盲区WARNINGtext/96-fm-warning.txt:13(搜「deterministic, reproducible」) · :15(搜「0.1 to 0.5 points」) · :17(搜「necessary but insufficient check」)
任务基准 · 头对头WARNINGtext/96-fm-warning.txt:21(搜「exactly the tasks it will perform in deployment」) · :25(搜「a structured verification workflow」的同段,搜「evaluates perplexity first」) · :29(搜「Side-by-side inspection」) · :31(搜「cannot reliably distinguish」)
三级质量门 · 门槛按用途定BUILDING A QUANTIZATION QUALITY GATEtext/97-fm-building-a-quantization-quality-gate.txt:5(搜「catastrophic quantization failures」) · :7(搜「no more than 3 percent relative degradation」) · :9(搜「Task-specific acceptance」) · :11(搜「triaging patients on ER intake」)
我们真正在乎的只有百分之一二The 1 Percent That Matterstext/98-fm-the-1-percent-that-matters.txt:3(搜「rarely with more than 1 to 2 percent」)

Footnotes

  1. 出处:「EFFICIENCY TECHNIQUES: QUANTIZATION AND COMPRESSION」第 5 段(text/92-fm-squeezing-blood-from-bits.txt:5,搜「constraints could fuel innovation」)与第 7 段(text/92-fm-squeezing-blood-from-bits.txt:7,搜「creates no business value」)。第 5 段那段前史里,作者把量化本身也称作「一种把『用最少的东西凑合』做成艺术形式」的活儿,只不过我们主要欣赏它的实用价值。第 9 段(text/92-fm-squeezing-blood-from-bits.txt:9,搜「several optimizations stacked」)预告了整章的组合性:一个蒸馏过的模型上挂一个量化过的适配器,就是好几层优化叠在一起——这一点第 13 章会正面算一遍。 2

  2. 出处:「Squeezing Blood from Bits」第 13 段(text/93-fm-squeezing-blood-from-bits.txt:13,搜「fifth decimal place」)与第 9 段(text/93-fm-squeezing-blood-from-bits.txt:9,搜「everything has a price」)。第 9 段那句总纲是:每往下一级大致减半内存,但这不是免费的;量化这门暗技,就是让简化拿回来的多过精度损失付出去的。 第 7 段(text/93-fm-squeezing-blood-from-bits.txt:7,搜「consumes 28GB of memory」)给了 32 位下 7B 模型 28GB 这个基准,而且明说这还没算上激活值、梯度和优化器状态——那正是第 06 章那四笔账。 2

  3. 出处:「Squeezing Blood from Bits」第 17 段(text/93-fm-squeezing-blood-from-bits.txt:17,搜「works surprisingly well」)。原文给的四级取值数分别是:16 位浮点 65536 个、8 位整数 256 个、4 位整数 16 个。「好用得出人意料」是书的原措辞,它没有给这个现象配机制解释。 同段还列了低精度的三项收益(省内存、在为低精度优化的硬件上算得更快、更省电)和一项代价。第 15 段(text/93-fm-squeezing-blood-from-bits.txt:15,搜「brain floating point」)是 bfloat16 的定义。 2

  4. 出处:「Squeezing Blood from Bits」第 23 段(text/93-fm-squeezing-blood-from-bits.txt:23,搜「per-block scaling factors」)与第 25 段(text/93-fm-squeezing-blood-from-bits.txt:25,搜「3.6 times faster inference」)。第 23 段给了它的位布局(1 符号 2 指数 1 尾数)、16 个可表示值、正负 6 的量程,并说明正是那个很小的量程逼出了分组缩放;它还点明这个格式在某型桌面级机器上也能用。第 25 段那个 3.6 倍,书明写是 NVIDIA 报告的数字。 2 3

  5. 出处:「WARNING」第 3 段(text/94-fm-warning.txt:3,搜「NF4 and NVFP4 are different」)。这是书里一个专门的辨析框。原文:前者是为那个只训一小块旁路的微调做法设计的、属于某个量化库的生态,它的格点按神经网络里权重的分布来摆;后者是一个更通用的 4 位浮点格式,主要面向推理,且只在那两代硬件上原生支持。

  6. 出处:「WARNING」第 19 段(text/94-fm-warning.txt:19,搜「minimize reconstruction error」)。书给了这个方法的尾注。原文:它逐层处理权重,利用「权重扰动如何影响输出」的二阶信息,做出比简单的就近取整更聪明的取整决定

  7. 出处:「WARNING」第 21 段(text/94-fm-warning.txt:21,搜「not all weights matter equally」)。书给了尾注。原文的收口是:两种方法在 4 位上都能取得强的准确率,而前者常常因为它那套激活感知的做法在基准上略胜一筹

  8. 出处:「WARNING」第 23 段(text/94-fm-warning.txt:23,搜「128 to 512 samples」)。「用一小批本领域样本效果最好」这句原文明写是「In my experience」——是作者本人的经验,不是研究结论。 原文还说:即便用通用文本样本,对很多应用来说也够用;而校准是每个模型、每个位深一次性的开销 2

  9. 出处:「WARNING」第 31 段(text/94-fm-warning.txt:31,搜「with the gap widening at lower bit depths」)。原文明说 8 位上差别可以忽略、4 位上校准派通常胜出,因而那笔预先的校准成本对生产部署是值得的。那张对照表在第 33 段(text/94-fm-warning.txt:33,搜「Quantization Methods and Output Bit Depths」),各行的方法书都配了尾注。 2 3

  10. 出处:「WARNING」第 131 段(text/94-fm-warning.txt:131,搜「would require 140GB in float16」)。原文:这些方法能把模型压到 4 位而性能劣化小得惊人,让原本装不下全精度版本的消费级硬件也能部署大模型;同段还把「验证量化没有不可接受地损害能力」这件事明确指向了书的第 6 章(我们的第 10 章)

  11. 出处:「FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALE」第 11 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:11,搜「single self-contained binary」)。原文:一个这样的文件里装着量化后的权重、分词器、结构参数和量化元数据,一个文件就够装载并运行;这个自包含设计加上它配套的高效 CPU 推理引擎,让它成了本地与边缘部署的事实标准。命名规则见第 13 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:13,搜「Q{bits}{method}{size}」)。

  12. 出处:「FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALE」第 19 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:19,搜「a single scale factor per block」)、第 23 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:23,搜「different bit depths to different tensor types」)、第 27 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:27,搜「most commonly recommended variant」)与第 33 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:33,搜「importance-matrix」)。第 23 段那句「注意力权重和前馈层权重可以用不同精度」直接呼应第 02 章讲的层内分工。第 33 段那句最要紧:这套按重要性分配精度的做法,在 2 位这种「普通量化会输出乱码」的压缩程度上仍然能产出可用的模型。 2

  13. 出处:「FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALE」第 37 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:37,搜「Common GGUF Quantization Types」)。这是书里的表 7-2,共九行,我们挑了其中六行;质量栏的定性(「差」「可用」「好」「很好」「极好」「几乎完美」)是书自己给的评级。

  14. 出处:「FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALE」第 139 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:139,搜「the highest bit depth that fits comfortably」)。书自己把这四条称作「一条简单的启发」。第四条的理由原文写得很清楚:多一位精度带来的质量收益,通常超过同位深下更保守的量化带来的收益。 「要留出对话缓存和上下文窗口的空间」那句也在这一段——这正是第 13 章要正面讲的那笔账。 2

  15. 出处:「WARNING」第 3 段(text/96-fm-warning.txt:3,搜「not everyone uses appropriate calibration data」)。这是书里一个独立的警告框。

  16. 出处:「WARNING」第 13 段(text/96-fm-warning.txt:13,搜「deterministic, reproducible」)与第 15 段(text/96-fm-warning.txt:15,搜「0.1 to 0.5 points」)。第 15 段还点名了标准语料和一个现成的困惑度测量工具,并说这让这道检查很容易自动化注意:这两个阈值书没有配研究出处。 2 3

  17. 出处:「WARNING」第 17 段(text/96-fm-warning.txt:17,搜「necessary but insufficient check」)。原文的机制解释是:语言建模的困惑度被常见模式主导——容易预测的 token 和高频结构,而这些恰恰是量化保得好的部分;那些把有能力的模型和平庸模型区分开的罕见、困难的预测,对困惑度分数的贡献相对很小。 结论:它可能恰好漏掉了对要求高的应用最要命的那种退化。 2

  18. 出处:「BUILDING A QUANTIZATION QUALITY GATE」第 5 段(text/97-fm-building-a-quantization-quality-gate.txt:5,搜「catastrophic quantization failures」)、第 7 段(text/97-fm-building-a-quantization-quality-gate.txt:7,搜「no more than 3 percent relative degradation」)、第 9 段(text/97-fm-building-a-quantization-quality-gate.txt:9,搜「Task-specific acceptance」)与第 11 段(text/97-fm-building-a-quantization-quality-gate.txt:11,搜「triaging patients on ER intake」)。第 11 段还说明这道门在什么时候触发:新底座、新量化方法、或者校准数据更新时自动跑;没过的模型转人工复核而非自动部署。「+0.5」和「3%」原文都标着「for example」,是示例值不是标准 2 3

  19. 出处:「WARNING」第 29 段(text/96-fm-warning.txt:29,搜「Side-by-side inspection」)与第 31 段(text/96-fm-warning.txt:31,搜「cannot reliably distinguish」)。第 25 段(text/96-fm-warning.txt:25,搜「evaluates perplexity first」)给了那套结构化验证流程,并给了一条处置口径:如果困惑度只是小幅劣化而任务表现保住了,这次量化可以安全部署;如果任务表现掉超过可接受门槛,就换更保守的量化——升位深,或者从免校准方法换成校准方法。 第 21 段(text/96-fm-warning.txt:21,搜「exactly the tasks it will perform in deployment」)是那句判据:最可靠的验证策略,是拿它部署后要干的那些活来评它。 2

  20. 出处:「WARNING」第 135 段(text/94-fm-warning.txt:135,搜「adapt to reduced precision」)与第 137 段(text/94-fm-warning.txt:137,搜「straight-through estimator」)。第 137 段完整描述了那个绕开不可导的办法:前向用量化权重、反向假装量化没发生、更新落在全精度主权重上,下一次前向前再重新量化;结论是模型学出来的权重,其量化版本能产出好输出,尽管学习信号本身忽略了量化 2

  21. 出处:「WARNING」第 5 段(text/94-fm-warning.txt:5,搜「without catastrophic degradation」)。书给了那项工作的尾注。原文明确了两件事:原生用三值训练能在同等参数量下匹配全精度,以及必须从零开始训、不能把现成模型事后压到 1 位 2

  22. 出处:「FROM THE TRENCHES: WHAT HAPPENS AT FOUNDATION SCALE」第 3 段(text/95-fm-from-the-trenches-what-happens-at-foundation-sca.txt:3,搜「Model Flops Utilization」)。原文还提到:在十万级上下文长度时,注意力那部分的内存会成为主导——这一点第 13 章那笔对话缓存的账会接上。那句「5% 的算力利用率差可能意味着几百万美元」书没有配出处。 2