L大语言模型从理论到实践
阅读 PDF ↗
CHAPTER 34

模型优化

模型优化围绕质量、容量和执行成本组织四类方法:量化调整数值表示,剪枝选择保留的结构,低秩分解用矩阵因子形成近似,蒸馏把教师行为转移给学生。每种方法都需要说明近似对象、误差目标、训练或校准条件,以及目标硬件上的执行方式。

本章先建立量化映射与低精度计算的数值基础,再推导剪枝、低秩分解和蒸馏,最后讨论组合优化与同条件比较。知识蒸馏只有在学生结构或表示更省资源时才产生压缩收益;参数高效微调中的 LoRA 学习低秩更新,低秩压缩则以因子替换原矩阵。

34.1压缩对象及误差预算

局部近似的边界

分析线性层时采用列向量约定 \(y=Wx+b\),其中 \(W\in\mathbb R^{m\times n}\)。偏置若未说明则保持不变。剪枝敏感度以可微损失的局部展开为依据,二阶结论不自动适用于大幅参数变动。低秩最优性针对明确的矩阵范数或校准输入分布。蒸馏教师在学生更新期间冻结,师生输出类别及监督位置已对齐。

符号 含义与形状
\(W,\widehat W,E\) 原矩阵、压缩后矩阵及误差 \(E=\widehat W-W\),形状 \(m\times n\)
\(x,X,C_x\) 输入 \(x\in\mathbb R^n\);校准列矩阵 \(X\in\mathbb R^{n\times N}\);二阶矩 \(C_x=\mathbb E[xx^\mathsf T]\)
\(M,k,s\) 二值剪枝掩码、保留权重数量、单权重存储字节数。
\(w,g,H\) 展平参数向量、损失梯度和 Hessian,形状分别为 \(P\)\(P\)\(P\times P\)
\(r,\sigma_i\) 近似秩与降序排列的奇异值。
\(A,B\) 低秩因子,\(A\in\mathbb R^{m\times r}\)\(B\in\mathbb R^{r\times n}\)
\(z_T,z_S,C,\tau\) 教师和学生的 \(C\) 维 logits、类别数与正温度。
\(p_T^\tau,p_S^\tau,\lambda\) 温度分布与硬软目标混合系数,\(0\leq\lambda\leq1\)
\(H_T,H_S,P_h\) 展平有效位置后的师生表示与对齐投影,形状为 \(N_t\times d_T\)\(N_t\times d_S\)\(d_S\times d_T\)

模型压缩(Model Compression)可以减少权重容量、计算次数、数据搬运或特定结构规模。这些目标不等价。知识蒸馏(Knowledge Distillation,KD)首先是一种监督转移方法,只有学生的实际结构或表示更省资源时才形成压缩。混合专家架构的稀疏激活也不等于压缩,因为它可能同时增大总参数量。

比较方案时,应固定原模型、任务、输入长度分布、批量、输出质量要求与目标设备。局部误差、任务指标和系统指标分别测量:矩阵 Frobenius 误差描述数值近似,任务正确率描述行为,峰值内存和延迟描述执行成本。不能让其中一个指标替代其他两类。

34.2量化

量化对象及基本符号

位宽对象

仅权重量化(Weight-Only Quantization)降低权重存储位宽,而输入激活可以保持浮点。记号 W4A16 通常表示四比特权重与十六比特激活,但仍未说明码本、分组、乘法指令、累加精度及输出类型。W8A8 进一步降低激活位宽,键值缓存量化(Key-Value Cache Quantization)则压缩解码历史中的键与值。这三种对象具有不同生命周期和误差传播方式。

权重通常可以离线统计并一次编码;激活随请求和位置变化;缓存随生成增长并被反复读取。只压缩权重不会按同一比例降低长上下文缓存,激活位宽也不决定累加器位宽。描述一个低精度模型时,应分别给出存储、乘法输入、累加和输出的表示。

表 34.1 主要符号。矩阵乘法采用列向量输入约定。

符号 含义
\(x,q,\widehat x\) 原始实数、整数码值、恢复实数
\(s,z\) 正尺度与整数零点
\(q_{\min},q_{\max}\) 有限整数编码范围
\(\ell,u\) 实际可恢复范围的下端与上端
\(W,X,Y\) 权重 \(d_o\times d_i\)、输入 \(d_i\times n\)、输出 \(d_o\times n\)
\(E,C,H\) 权重误差、输入二阶矩、局部重建 Hessian
\(D\) 正对角通道缩放矩阵,\(d_i\times d_i\)
\(g,b\) 每组元素数与码值位宽

量化编码及恢复

仿射量化(Affine Quantization)采用

\[ q=\operatorname{clip}\!\left(\operatorname{round}(\frac{x}{s})+z,q_{\min},q_{\max}\right), \qquad \widehat x=s(q-z),\quad s>0. \tag{34.1}\]

其中量化尺度(Quantization Scale) \(s\) 决定相邻可恢复值的间距,零点(Zero Point) \(z\) 是实数零对应的整数码。要求 \(z\) 是编码范围内的整数,就可以精确恢复零;这对于填充、稀疏值和某些算子的零语义很重要。反量化(Dequantization)返回一个近似实数,而不是恢复原始数值。整数推理的此类表示与算术关系见 Jacob 等人的研究(Jacob 等 2018)

对希望覆盖的区间 \([a,b]\),先扩展为 \(a'=\min(a,0)\)\(b'=\max(b,0)\)。若 \(a'<b'\),一种常见初始化是

\[ s=\frac{b'-a'}{q_{\max}-q_{\min}},\qquad z=\operatorname{clip}\!\left(\operatorname{round}(q_{\min}-\frac{a'}{s}),q_{\min},q_{\max}\right). \tag{34.2}\]

由于 \(z\) 被取整,真正的恢复端点是 \(\ell=s(q_{\min}-z)\)\(u=s(q_{\max}-z)\),不一定恰好为 \(a',b'\)。端点调整和舍入规则应共同写入协议,不能一边用理想区间证明误差,一边用另一组实际端点执行。

全零张量需要显式约定,例如取任意固定正 \(s\)、合法 \(z\),全部编码为 \(z\)。不应令 \(s=0\) 后继续计算 \(\frac{x}{s}\)。非零常量在扩展区间包含零后不再是零宽区间;若采用其他常量特例,也必须保证编码与恢复一致。

对称量化及码值范围

对称量化(Symmetric Quantization)在有符号编码下令 \(z=0\)。例如选择有效码值范围 \([-127,127]\),令 \(c=\max|x|>0\),可取 \(s=\frac{c}{127}\)。八比特有符号存储本身还可表示 \(-128\),但该对称方案有意不使用它。若使用 \([-128,127]\),可恢复范围不再关于零完全对称,尺度约定也应重新说明。1

最近舍入(Round to Nearest,RTN)在等距离点需要平局规则,例如取偶数。向零截断会产生不同偏差,不能套用最近舍入的所有结论。除非特别说明,本章采用最近舍入,数值例题避免依赖未声明的平局选择。

舍入、截断及饱和误差

均匀量化的误差边界

\(s>0\)\(z\in\mathbb Z\) 固定,码值是连续整数区间,最近舍入后执行范围截断。计算暂视为精确实数运算,忽略尺度本身的浮点舍入。

两类误差的分解

\(x\in[\ell,u]\) 时,其最近格点距离至多为半个步长,因此

\[ |\widehat x-x|\le \frac{s}{2.} \tag{34.3}\]

\(x_c=\operatorname{clip}(x,\ell,u)\),则总误差可分解为

\[ \widehat x-x=(\widehat x-x_c)+(x_c-x). \tag{34.4}\]

第一项是范围内格点误差,第二项是饱和误差(Saturation Error)。若 \(x>u\),恢复值固定为 \(u\),误差绝对值为 \(x-u\);若 \(x<\ell\),则为 \(\ell-x\)。超出范围的误差不受 \(\frac{s}{2}\) 全局约束。裁剪(Clipping)缩小范围会减小多数数值的步长,也会增加尾部饱和损失。

在误差均匀分布于 \([-\frac{s}{2},\frac{s}{2}]\) 的理想模型下,均方误差为

\[ \mathbb E[e^2]=\frac1s\int_{-\frac{s}{2}}^{\frac{s}{2}}e^2\,\dif e=\frac{s^2}{12}. \tag{34.5}\]

但真实权重可能聚集于格点附近,激活可能含大量零,误差也可能与输入相关。这一噪声模型适合估计量级,不能当作所有张量的实测误差公式。

给定连续密度 \(p(x)\),实际均方误差可写为

\begin{align} \mathbb E[(\widehat X-X)^2] ={}&\int_{-\infty}^{\ell}(x-\ell)^2p(x)\,\dif x +\int_u^{\infty}(x-u)^2p(x)\,\dif x\tag{34.6}\\ &+\int_{\ell}^{u}(Q_s(x)-x)^2p(x)\,\dif x, \tag{34.7}\end{align}

其中 \(Q_s\) 为范围内最近格点映射。前两项是尾部损失,最后一项是舍入损失。这给出了选择裁剪范围的统计目标,而不是一味追求无溢出或最小尺度。

例26.1

取三比特无符号码 \(q\in\{0,\ldots,7\}\)\(s=0.5,z=2\),实际恢复范围为 \([-1,2.5]\)。对输入 \((-1.2,-0.6,0,0.7,2.8)\),编码、恢复与误差见表34.2

表 34.2 给定尺度与零点的手工编码结果,误差定义为 \(\widehat x-x\)

\(x\) \(\operatorname{round}(\frac{x}{s})+z\) \(q\) \(\widehat x\) 误差
\(-1.2\) \(0\) \(0\) \(-1\) \(0.2\)
\(-0.6\) \(1\) \(1\) \(-0.5\) \(0.1\)
\(0\) \(2\) \(2\) \(0\) \(0\)
\(0.7\) \(3\) \(3\) \(0.5\) \(-0.2\)
\(2.8\) \(8\) \(7\) \(2.5\) \(-0.3\)

均方误差为 \[\frac{0.04+0.01+0+0.04+0.09}{5}=0.036.\] 最后一个值的误差超过 \(\frac{s}{2}=0.25\),因为发生饱和。第一个值也在恢复范围之外,但舍入后码值尚未越界;因此检测饱和应依据实数可恢复范围与误差语义,不能仅计数最终整数裁剪操作是否改变码值。

范围内映射到最近格点,范围外映射到端点。端点外的误差随输入距离增长。
图 34.1 范围内映射到最近格点,范围外映射到端点。端点外的误差随输入距离增长。

粒度及校准分布

尺度共享范围

逐张量量化(Per-Tensor Quantization)为整个张量使用同一尺度。逐通道量化(Per-Channel Quantization)允许每个通道独立选择尺度。对 \(W\in\Real^{d_o\times d_i}\),若每个输出通道对应一行,则逐输出通道尺度为 \(s_i\);改变矩阵存储方向时,不能仅按数组的“第一维”推定通道含义。

分组量化(Group-Wise Quantization)在每个明确分组内共享尺度和必要零点。线性层常按每行的输入方向分组,大小为 \(g\);最后一组可能不足 \(g\),仍需元数据及布局约定。粒度越细,越容易适应局部动态范围,但尺度数量、读取成本和内核约束也随之增加。

例如

\[ W=\begin{bmatrix}0.1&0.2&-0.1\\10&20&-10\end{bmatrix}. \tag{34.8}\]

使用有效三比特对称码 \([-3,3]\),逐张量尺度 \(\frac{20}{3}\) 使第一行全部恢复为零。第二行的 \(10\) 恰在平局点,若采用取偶数则恢复为 \(\frac{40}{3}\);这个结果依赖明确舍入规则。逐行尺度分别为 \(\frac{0.2}{3}\)\(\frac{20}{3}\),第一行恢复为 \((\frac{2}{15},0.2,-\frac{2}{15})\),其平方误差均值为 \(\frac{2(\frac{1}{30})^2}{3}=\frac{1}{1350}\),而逐张量第一行误差均值为 \(0.02\)。第二行保持原量化结果。这说明异尺度通道共享步长可能损害小值通道,不证明逐通道量化总能提高任务质量。

若原始 \(P\) 个元素每个 \(16\) 位,量化码每个 \(b\) 位,每组有 \(h\) 字节元数据且忽略填充,则总存储近似为

\[ B_q=P\frac b8+\left\lceil\frac Pg\right\rceil h. \tag{34.9}\]

四比特码、\(g=64,h=4\) 时,每元素约 \(0.5625\) 字节,相对两字节基线压缩约 \(3.56\) 倍,并非恰好四倍。真实矩阵逐行分组时,应逐行求组数;对齐、索引和未量化层还会增加成本。

校准分布估计

量化校准(Quantization Calibration)用代表性输入估计激活范围、误差或通道重要性。最小最大值策略尽量覆盖观测极值,百分位策略允许一定尾部裁剪,直方图或重建误差策略显式权衡式(34.7)。这些策略使用不同目标,不存在脱离数据分布的统一最优范围。

校准应覆盖预期语言、领域、模板、长度和生成阶段。只使用短输入估计长上下文缓存范围,或只观察预填充却假设逐词解码完全相同,可能遗漏实际分布。最终测试数据应与范围、位宽和算法选择隔离,避免把评估集变成调参集。

静态量化(Static Quantization)在部署前固定激活尺度;动态量化(Dynamic Quantization)在运行时按张量、词元或组更新尺度。动态策略减少对固定范围的依赖,却需要归约、缩放与元数据处理。它也不能保证不存在异常值;只要一个组内极端值与大量普通值共存,动态最大值尺度仍会造成精度损失。

输出误差传播

\(E=\widehat W-W\),则单输入误差为 \(Ex\),满足

\[ \|Ex\|_2\le\|E\|_2\|x\|_2. \tag{34.10}\]

若输入二阶矩 \(C=\mathbb E[xx^{\mathsf T}]\) 存在,则

\[ \mathbb E\|Ex\|_2^2=\operatorname{tr}(ECE^{\mathsf T}). \tag{34.11}\]

因此同样的权重均方误差可能产生不同输出误差:高频或高幅值输入方向赋予对应列更大权重。下游非线性和残差还会重新传播误差,局部重建并不等同于端到端任务最优。这个区别构成激活感知方法与二阶补偿方法的共同出发点。

GPTQ 的二阶误差补偿

(选修)

局部重建目标

生成式模型训练后量化(GPTQ)利用层输入构建局部重建目标,并以二阶信息补偿量化误差(Frantar 等 2022)。固定校准输入 \(X\in\Real^{d_i\times n}\),希望在离散码本约束下减小 \(\|(W-\widehat W)X\|_F^2\)。每一输出行可以分别讨论。

把某行权重转为列向量 \(w\in\Real^{d_i}\),令更新为 \(\delta\)。重建损失增量为

\[ \mathcal E(\delta)=\|\delta^{\mathsf T}X\|_2^2 =\tfrac12\delta^{\mathsf T}H\delta,\qquad H=2XX^{\mathsf T}. \tag{34.12}\]

这是固定线性层重建的精确二次形式,不是整个语言模型任务损失的精确 Hessian。

单坐标量化补偿

对当前尚可调整的坐标集合,\(H\) 正定且码本已固定。将坐标 \(i\) 固定为恢复值 \(\widehat w_i\),其余坐标暂可连续调整。若校准矩阵秩不足,可加入正阻尼 \(\lambda I\),此时优化的已是正则化重建目标。

约束二次问题的解

\(d=\widehat w_i-w_i\)\(e_i\) 为第 \(i\) 个标准基向量。求解

\[ \min_\delta\;\tfrac12\delta^{\mathsf T}H\delta, \qquad e_i^{\mathsf T}\delta=d. \tag{34.13}\]

拉格朗日函数为 \(\tfrac12\delta^{\mathsf T}H\delta+\mu(e_i^{\mathsf T}\delta-d)\)。令梯度为零,有 \(H\delta+\mu e_i=0\),所以 \(\delta=-\mu H^{-1}e_i\)。代回约束得到

\[ \delta^*=\frac{d}{(H^{-1})_{ii}}H^{-1}e_i, \qquad \mathcal E(\delta^*)=\frac{d^2}{2(H^{-1})_{ii}}. \tag{34.14}\]

若用量化残差 \(w_i-\widehat w_i\) 表示,则更新前有负号。算法中的符号差异常来自残差方向,不应机械照抄。非对角项决定其他坐标如何补偿;若输入不相关且 \(H\) 对角,则没有跨坐标补偿。

固定该坐标后,剩余自由集合的逆 Hessian 可由当前逆矩阵 \(K=H^{-1}\) 消去相应行列:

\[ K_{\mathrm{new}}=K_{-i,-i}-\frac{K_{-i,i}K_{i,-i}}{K_{ii}}. \tag{34.15}\]

逐坐标直接执行代价较高。GPTQ 采用一致的处理顺序、分块延迟更新及 Cholesky 形式组织这些计算,以提高大矩阵处理效率(Frantar 等 2022)。这些组织方式不能把逐层贪心的离散选择变成全局最优保证。

(选修) 例26.2

\[ H=\begin{bmatrix}2&1\\1&2\end{bmatrix},\qquad H^{-1}=\frac13\begin{bmatrix}2&-1\\-1&2\end{bmatrix},\qquad w=\begin{bmatrix}0.3\\0.6\end{bmatrix}. \tag{34.16}\]

采用间隔 \(0.5\) 的格点,先把第一坐标量化为 \(0.5\)\(d=0.2\)。式(34.14)给出 \(\delta=(0.2,-0.1)^{\mathsf T}\),故第二坐标变为 \(0.5\),恰好已在格点上。补偿误差为 \(\tfrac12\delta^{\mathsf T}H\delta=0.03\);若只改变第一坐标,误差为 \(0.04\)。该例显示相关输入允许利用另一坐标抵消输出扰动,不意味着每一步补偿后都无需再量化其他坐标。

算法34.1 二阶补偿量化的概念流程

输入:层权重、校准输入、量化格点、坐标顺序与阻尼。输出:量化码值及元数据。状态:当前连续权重、自由坐标集合、曲率分解。

  1. 根据 \(X\) 构建重建曲率,处理不可观测方向并加入所需阻尼,得到稳定分解。

  2. 按固定顺序选择自由坐标,对其当前补偿后的值作格点选择。

  3. 根据式(34.14)将残差传播到其余自由坐标,已固定坐标不再改变;更新自由子问题。

  4. 所有坐标处理后停止,保存格点、分组、处理顺序及布局。实际高效实现使用分块与分解复用,避免重复显式求逆。

不变量:已固定权重始终位于指定格点;校准曲率只约束该重建问题,不能替代独立任务评价。

AWQ 及 SmoothQuant 的通道缩放

通道缩放恒等式

对任意正对角矩阵 \(D=\operatorname{diag}(d_1,\ldots,d_{d_i})\),有

\[ WX=(WD)(D^{-1}X). \tag{34.17}\]

\(j\) 列权重乘以 \(d_j\),对应输入通道除以 \(d_j\),未量化的函数不变。但量化不是线性算子,因此对右侧两部分量化后的误差一般不同于直接量化左侧。通道缩放的作用是重新分配表示难度,不能凭恒等式声称量化后仍完全等价。

激活感知权重量化(Activation-Aware Weight Quantization,AWQ)重点关注仅权重量化中的显著输入通道(Lin 等 2023)。用 \(\mathcal Q\) 表示量化后恢复的权重,其校准目标可以写为

\[ \min_D\;\|\mathcal Q(WD)D^{-1}X-WX\|_F^2. \tag{34.18}\]

若某一权重的组步长从 \(\Delta\) 变为 \(\Delta'\),缩放后换回原坐标的最近格点误差界为 \(\frac{\Delta'}{2d_j}\)。只有当 \(\frac{\Delta'}{d_j}\) 相对原步长更小,相关方向才获得更细分辨率。过大缩放可能提高整个组的最大值,损害其他通道;不能把所有通道无限放大。

AWQ 使用激活统计构造缩放候选并进行有限搜索,而不是根据权重幅值单独决定重要性。这里“保护显著通道”不意味着最终必须把这些通道保留为高精度;可通过尺度变换仍然输出统一低比特权重。候选范围、裁剪和校准数据影响结果,也不能从方法名称推定其不会对校准分布过拟合。

激活离群值迁移

平滑量化(SmoothQuant)利用同一恒等式缓解激活离群值,使权重与激活都更适合低精度计算(Xiao 等 2022)。令 \(a_j=\max_t|X_{jt}|\)\(b_j=\max_i|W_{ij}|\),对非零通道可取

\[ d_j=\frac{a_j^\alpha}{b_j^{1-\alpha}},\qquad 0\le\alpha\le1. \tag{34.19}\]

变换后的输入最大幅值为 \(\frac{a_j}{d_j}=(a_jb_j)^{1-\alpha}\),权重列最大幅值为 \(b_jd_j=(a_jb_j)^\alpha\)。在 \(\alpha=\frac{1}{2}\) 时,两者在该通道达到相同最大幅值。零通道、极小值以及尺度上下界需要显式处理,避免除零或异常放大。

例如 \(a=(100,1)\)\(b=(0.01,1)\)\(\alpha=\frac{1}{2}\)\(d=(100,1)\),两个变换后张量的对应通道最大幅值均为 \((1,1)\)。这个构造例子展示数值范围如何迁移,不说明任意网络都能如此平衡。选择 \(\alpha\) 仍需考虑两边实际量化粒度与误差。

AWQ 以权重量化误差及激活重要性为中心,SmoothQuant 则平衡权重和激活的量化难度。它们可共用代数视角,但目标与校准统计不同。缩放若吸收到前一归一化或线性层,必须保持所有分支一致;同一输入被多个投影共享时,不能只改其中一个消费者。跨越非线性随意移动缩放通常不保持函数不变。

通道尺度变换保持原函数,却改变低精度表示的误差分配。
图 34.2 通道尺度变换保持原函数,却改变低精度表示的误差分配。

PTQ、QAT 及低精度训练

训练后量化(Post-Training Quantization,PTQ)从已训练权重出发,利用统计校准、搜索或局部重建产生量化模型,通常不进行完整任务训练。简单最大值权重量化可以不用激活数据,GPTQ、AWQ 和 SmoothQuant 则使用输入统计;所以“PTQ 不需要数据”并非一般定义。

量化感知训练(Quantization-Aware Training,QAT)在训练前向中加入伪量化(Fake Quantization),即 \(\widehat x=D(Q(x))\),让优化过程适应部署格点(Jacob 等 2018)。浮点主参数可以保留,前向使用恢复后的近似值。因最近舍入几乎处处导数为零、跳变处不可导,常使用直通估计器(Straight-Through Estimator,STE),例如把反向近似为

\[ \frac{\partial\widehat x}{\partial x}\approx\mathbf1_{\ell\le x\le u}. \tag{34.20}\]

这是人为选择的优化代理,不是真实量化函数的导数;尺度与裁剪参数的学习也需要相应规则。前向模拟的舍入、饱和和粒度若与部署不一致,训练恢复的质量可能无法转移到实际内核。

QAT 不要求训练器本身用目标整数指令完成全部运算。低精度训练(Low-Precision Training)则进一步让某些前向、反向矩阵乘法或状态采用低精度执行,需要管理累加、主权重和更新尺度。QLoRA 的冻结量化基座加可训练适配器,是另一种参数与计算边界;它不等同于对全部量化码值做梯度更新,详见第21章《参数高效微调》

FP8 及非均匀表示

(选修)

浮点格点随指数变化

八位浮点(8-bit Floating Point,FP8)不是一种均匀整数网格。对普通规格化二进制浮点数,可以写成 \((-1)^s2^{e-\beta}(1+\frac{f}{2^m})\),其中 \(s\) 为符号位、\(e\) 为指数域、\(\beta\) 为偏置、\(m\) 为尾数字段位数。一个指数区间内间隔为 \(2^{e-\beta-m}\),随数量级变化。

在远离溢出和下溢、采用最近舍入的规格化区域,单位舍入误差量级为 \(2^{-(m+1)}\),描述的是相对误差尺度;不能套用单一全张量绝对误差界。次正规数、零附近以及饱和区域需要分别分析。

Micikevicius 等人提出的 FP8 编码包括 E4M3 与 E5M2(Micikevicius 等 2022)。二者均有一个符号位,分别分配四位指数三位尾数、五位指数两位尾数。该论文中 E4M3 最大有限值为 \(448\)、最小正规数为 \(2^{-6}\);E5M2 最大有限值为 \(57344\)、最小正规数为 \(2^{-14}\)。E4M3 通过减少特殊值编码扩展范围,不表示无穷大;E5M2 使用不同的特殊值规则。其他编码变体不能仅凭名称共享这些端点。

E4M3 在相似数值区间拥有更细尾数,E5M2 提供更大动态范围。具体训练不应机械地把全部张量转换为同一格式;梯度、权重、激活与归约具有不同数值需求。2

缩放、累加及更新

FP8 张量仍常需要外部尺度。例如令 \(\widehat x=s\,\operatorname{cast}_{\mathrm{FP8}}(\frac{x}{s})\),尺度把当前范围映射到有限编码区间。由当前张量估计尺度需要额外归约;用历史最大值延迟更新尺度会引入状态,并可能来不及覆盖分布突变。静态、动态和分块尺度必须绑定实际执行协议。

低精度乘法不意味着低精度累加。长内积可能在低位累加中丢失小贡献或溢出,因而通常需要更宽累加器、分段归约或其他受支持的数值策略。若优化器更新量小于权重所在格点间距,直接在粗格点中更新可能完全消失;高精度主参数或合适舍入方式可以缓解,但也增加状态成本。是否支持某种 FP8 乘法、累加和布局,由具体硬件与内核决定,不能由文件类型推出。

非均匀四比特码本 NF4 则面向另一种分布假设,第21章《参数高效微调》已经说明其在 QLoRA 中的职责。对非均匀码本,局部最近舍入误差由相邻码字间隔控制,不能把统一整数步长 \(\frac{s}{2}\) 直接套到所有区间。

整数计算及反量化融合

整数点积中的零点修正

设一个输出为 \(y=\sum_{j=1}^{d_i}w_jx_j\),权重与激活使用尺度 \(s_w,s_x\) 和零点 \(z_w,z_x\)。则恢复后的点积为

\begin{align} \widehat y &=s_ws_x\sum_j(q_{w,j}-z_w)(q_{x,j}-z_x)\tag{34.21}\\ &=s_ws_x\left[\sum_jq_{w,j}q_{x,j} -z_x\sum_jq_{w,j}-z_w\sum_jq_{x,j}+d_iz_wz_x\right]. \tag{34.22}\end{align}

对称权重 \(z_w=0\) 可消除其中部分修正,但激活零点仍可能存在。偏置可在兼容尺度下加入累加器,输出若还要保持整数表示,则需要再量化(Requantization):按输出尺度重新舍入并裁剪。

例如 \(q_w=(2,-1)\)\(z_w=0,s_w=0.5\)\(q_x=(5,1)\)\(z_x=2,s_x=0.25\),恢复值为 \(w=(1,-0.5)\)\(x=(0.75,-0.25)\)。整数修正和为 \(2(5-2)+(-1)(1-2)=7\),乘 \(0.125\) 得到 \(0.875\),与恢复实数点积一致。若省略激活零点修正,整数点积为 \(9\),将错误得到 \(1.125\)

累加器必须覆盖和的动态范围。即使输入均为八比特,\(d_i\) 项乘积之和也未必适合八位或十六位累加。分组尺度若随 \(j\) 变化,尺度不能直接提出整个求和号外,需要逐组累加和缩放,这正是粒度影响内核设计的原因之一。

三种运行路径

量化文件可以在加载时完整恢复成高精度权重,此时减少的是磁盘与传输体积,驻留权重可能没有减少。也可以在每次前向先恢复一个完整权重张量,再调用浮点矩阵乘法;此时额外读写高精度临时数组可能抵消带宽节省。第三种方式是融合反量化(Fused Dequantization):内核读取压缩块,在寄存器或片上工作区中恢复并立即参与计算,避免完整中间张量往返显存。

融合路径仍可能使用浮点乘法,而原生低精度矩阵乘法则直接消费硬件支持的低精度操作数。二者都可能有收益,但收益机制不同。比特打包、尺度加载、布局转置、尾块处理和线程组织共同决定性能,算法名称本身不保证某条路径被执行。

完整恢复与融合恢复的数据路径不同。必须确认实际执行路径,才能解释运行时收益。
图 34.3 完整恢复与融合恢复的数据路径不同。必须确认实际执行路径,才能解释运行时收益。

带宽、算力及端到端收益

若某层执行 \(F\) 次浮点等价操作、传输 \(B\) 字节,计算吞吐上界为 \(C\)、带宽为 \(\mathcal B\),一个简化下界是

\[ t\ge\max(\frac{F}{C},\frac{B}{\mathcal B}). \tag{34.23}\]

量化主要减小 \(B\) 时,带宽受限的解码可能受益;高批量计算受限场景则更依赖可用乘法指令与内核效率。反量化、归约和调度增加的成本还未包含在这个下界里。

若原系统时间有比例 \(f\) 可以加速为 \(a\) 倍,其他部分不变,则总体加速比为 \(\frac{1}{[(1-f)+\frac{f}{a}]}\)。例如只有 \(60\%\) 时间受益,即使该部分快四倍,整体也仅约 \(1.82\) 倍。词元化、调度、缓存、通信和采样都可能成为剩余瓶颈。因此文件压缩率、层内加速和请求时延改善应分别报告。

键值误差及发布边界

缓存误差传播

设一个查询 \(q\) 的分数为 \(z_j=\frac{q^{\mathsf T}k_j}{\sqrt{d_k}}\),量化键误差为 \(e_{k,j}\),则分数误差为 \(\delta z_j=\frac{q^{\mathsf T}e_{k,j}}{\sqrt{d_k}}\)。一阶近似下,注意力概率变化为

\[ \delta p\approx[\operatorname{diag}(p)-pp^{\mathsf T}]\delta z. \tag{34.24}\]

若值误差矩阵为 \(E_V\)、原输出 \(o=V^{\mathsf T}p\),则一阶输出误差为 \(\delta o\approx V^{\mathsf T}\delta p+E_V^{\mathsf T}p\),另有二阶交叉项。键误差改变权重分配,值误差改变被聚合内容,二者不能只用一个平均缓存误差完全概括。

缓存范围还涉及不同层、头、位置与新旧词元的分布。保留近期高精度尾部或分块校准属于明确设计选择,不是低位缓存的必要定义。发布评估应包含长上下文、不同生成长度和实际缓存格式;短序列困惑度不足以验证全部缓存行为。

制品及证据

算法34.2 量化制品的形成

输入:固定模型、校准集、目标位宽与内核约束、质量预算。输出:量化制品及版本清单。状态:校准统计、候选尺度、局部与整模型误差记录。

  1. 先明确目标后端可消费的布局、粒度、零点和累加约定,固定高精度参考与输入协议。

  2. 采集校准统计,依据所选方法计算尺度、通道变换或二阶补偿,保存异常值与零通道处理规则。

  3. 按目标布局编码权重和元数据,使用与部署一致的恢复语义评估局部及整体质量;候选不满足预算时调整指定配置,而非隐藏回退。

  4. 固定制品身份,在目标硬件上确认实际内核与负载表现。只有质量与执行证据同时成立时,才形成可发布版本;保存原始基线以支持回滚。

不变量:编码与消费协议一致;每个性能结论绑定硬件、形状、批量、长度与精度条件。该流程是发布要求,本章没有执行这些测量。

清单应记录模型与词表身份、量化对象、码本、尺度粒度、零点、舍入、裁剪、校准版本、布局、后端和必要通道重排。剪枝或适配器合并改变权重后,原尺度与校准结论未必继续成立,需要形成新的制品。对不支持的内核发生高精度回退时,应直接报告实际路径。

首词元时延(Time to First Token,TTFT)、每输出词元时间(Time per Output Token,TPOT)、吞吐和峰值内存分别描述不同负载特征。测量需要预热、设备同步和固定输入分布;驻留权重、缓存与临时工作区也应分开计量。数学误差界、给定数值算例和目标设备实测构成不同证据,不能互相替代。

低精度计算的完整契约

量化方案由可表示值、映射规则、统计分布、张量布局和执行内核共同定义。位宽只是其中一项;同样的四比特文件可以对应不同误差和完全不同的计算路径。

34.3剪枝

剪枝及敏感度

幅值剪枝的最优性范围

剪枝(Pruning)通过删除权重或结构减少模型自由度。非结构化剪枝(Unstructured Pruning)使用逐元素掩码 \(M\in\{0,1\}^{m\times n}\),得到 \(\widehat W=M\odot W\)。若仅要求保留 \(k\) 个原有权重,且保留的数值不允许调整,则

\[ \min_{M:\sum M_{ij}=k}\|W-M\odot W\|_F^2 =\min_M\sum_{M_{ij}=0}W_{ij}^2. \tag{34.25}\]

因此保留绝对值最大的 \(k\) 个元素,使被删除的平方和最小。这是幅值剪枝(Magnitude Pruning)在特定权重重建目标下的依据;阈值处出现相同幅值时,应固定并列选择规则以得到可复现掩码。

最小权重误差不等于最小任务误差。若一个较小权重连接的输入幅度很大,或者该方向对输出损失极为敏感,删除它可能比删除较大权重更危险。不同层还可以通过尺度重参数化维持近似相同函数,直接跨层比较权重幅值因此可能受到表示尺度影响。

一阶和二阶近似

设损失为 \(\mathcal L(w)\),参数变化为 \(\Delta w\)。二阶展开为

\[ \mathcal L(w+\Delta w)-\mathcal L(w) \approx g^\mathsf T\Delta w+\frac12\Delta w^\mathsf T H\Delta w, \tag{34.26}\]

其中 \(g=\nabla\mathcal L(w)\)海森矩阵(Hessian Matrix) \(H=\nabla^2\mathcal L(w)\) 描述局部二阶变化。只删除第 \(q\) 个权重时 \(\Delta w=-w_qe_q\),故

\[ \Delta\mathcal L_q\approx-g_qw_q+\frac12H_{qq}w_q^2. \tag{34.27}\]

一阶量反映当前位置沿删除方向的变化,绝对值 \(|g_qw_q|\) 可作为影响幅度的启发式;它不保留变化方向。接近驻点时 \(g\approx0\),若采用对角曲率近似,可用 \(\frac{H_{qq}w_q^2}{2}\) 比较局部损失增量。经典 Optimal Brain Damage 使用二阶敏感度研究剪枝。(LeCun, Denker, 和 Solla 1989)

例如 \(w=(0.1,1)\)\(g=0\)\(H=\operatorname{diag}(1000,1)\)。删除第一个权重的二阶代价为 \(\frac{1000\cdot0.1^2}{2}=5\),删除第二个为 \(\frac{1}{2}\)。幅值排序会优先删除第一个,曲率排序却得出相反结论。这个例子说明敏感度需要同时考虑参数幅度与局部损失几何。

多个参数一起删除时,交叉项 \(H_{ij}\Delta w_i\Delta w_j\) 不再消失。因此逐个计算的对角分数之和一般不等于联合删除代价。神经网络真实 Hessian 也未必正定,局部近似还可能在大幅剪枝时失效;常见工程方法使用正半定重建曲率、阻尼或分块近似,以控制计算和数值问题。

允许其他权重补偿

若删除一个权重时允许其他参数调整,可以求解

\[ \min_{\Delta w}\frac12\Delta w^\mathsf T H\Delta w, \qquad e_q^\mathsf T\Delta w=-w_q. \tag{34.28}\]

假设 \(g=0\)\(H\) 正定。拉格朗日函数为

\[ \mathcal F(\Delta w,\mu)=\frac12\Delta w^\mathsf T H\Delta w +\mu(e_q^\mathsf T\Delta w+w_q). \tag{34.29}\]

驻点条件 \(H\Delta w+\mu e_q=0\) 给出 \(\Delta w=-\mu H^{-1}e_q\)。代入约束,得到

\[ \mu=\frac{w_q}{(H^{-1})_{qq}},\qquad \Delta w^*=-\frac{w_q}{(H^{-1})_{qq}}H^{-1}e_q, \qquad \Delta\mathcal L^*=\frac{w_q^2}{2(H^{-1})_{qq}}. \tag{34.30}\]

这表达了利用参数耦合补偿删除误差的思想,属于 Optimal Brain Surgeon 的核心二阶框架。(Hassibi 和 Stork 1992) 它并未说明在大模型中可以廉价形成完整逆 Hessian;\(P\times P\) 的存储和求解成本通常不可接受。

\(H=\begin{bmatrix}2&1\\1&2\end{bmatrix}\)\(w=(1,2)^\mathsf T\),删除第一个权重。\(H^{-1}=\frac13\begin{bmatrix}2&-1\\-1&2\end{bmatrix}\),因而

\[ \Delta w^*=(-1,0.5)^\mathsf T,\qquad w'=(0,2.5)^\mathsf T,\qquad \Delta\mathcal L^*=\frac{1}{2(\frac{2}{3})}=0.75. \tag{34.31}\]

若只置零而不补偿,\(\Delta w=(-1,0)^\mathsf T\),代价为1。补偿利用第二个权重分担变化,但这一结论只对设定的局部二次模型成立。

对单个线性层,可在校准输入上改用重建目标

\[ \mathcal L_{\mathrm{rec}}(\widehat W) =\frac1N\|(\widehat W-W)X\|_F^2. \tag{34.32}\]

对任一输出行的参数,曲率为 \(\frac{2XX^\mathsf T}{N}\)。它可通过输入统计构造,但可能奇异,常需阻尼或稳定分解。SparseGPT 将可扩展的局部重建与补偿用于大模型剪枝,说明校准激活和执行约束可以共同进入压缩设计。(Frantar 和 Alistarh 2023) 校准目标仍不是全任务损失,分布外输入可能受到不同影响。

结构化剪枝的联动关系

结构化剪枝(Structured Pruning)删除完整通道、注意力头或层,使张量尺寸真正改变。对前馈网络

\[ f(x)=W_d\phi(W_ux+b_u)+b_d, \tag{34.33}\]

其中 \(W_u\in\mathbb R^{h\times d}\)\(W_d\in\mathbb R^{d\times h}\)。保留中间索引集合 \(S\),令选择矩阵 \(P_S\in\{0,1\}^{k\times h}\),则压缩结构为

\[ \widehat f(x)=W_dP_S^\mathsf T\phi(P_SW_ux+P_Sb_u)+b_d. \tag{34.34}\]

因此上投影删除对应行及偏置,下投影删除对应列,外部 \(d\) 维接口保持不变。门控前馈结构有两条上投影路径,两者都应保留相同中间索引,并同步缩减下投影;只调整一侧无法保持逐元素乘法的语义。

前馈中间通道剪枝必须同步改变上下投影,保持外部残差接口。
图 34.4 前馈中间通道剪枝必须同步改变上下投影,保持外部残差接口。

\(W_u=\begin{bmatrix}1&0\\0&1\\1&1\end{bmatrix}\)\(W_d=\begin{bmatrix}1&0&0.1\\0&1&0.1\end{bmatrix}\),偏置为零,\(\phi\) 为 ReLU。输入 \(x=(1,2)^\mathsf T\) 时中间激活为 \((1,2,3)^\mathsf T\),输出为 \((1.3,2.3)^\mathsf T\)。删除第三通道后,输出为 \((1,2)^\mathsf T\),误差范数为 \(\sqrt{0.3^2+0.3^2}\approx0.4243\)。权重数从 \(3\cdot2+2\cdot3=12\) 降为8,减少三分之一,但是否值得仍取决于任务与输入分布。

注意力头删除同样需要调整查询、键、值和输出投影中对应的布局,并检查分组查询的共享关系。删除整层会改变残差路径的深度;删除残差主宽度则还涉及归一化、嵌入与共享权重。结构化压缩必须输出一致的模型配置、参数形状与序列化格式,不能只修改某个参数文件。

稀疏性何时产生执行收益

稀疏率(Sparsity)为零元素比例,但稀疏矩阵仍需要存储非零值和位置。设非零数量为 \(k\),数值每个 \(s\) 字节,索引每个 \(s_i\) 字节。以按行压缩的一种简化格式为例,存储约为

\[ M_{\mathrm{sparse}}\approx k(s+s_i)+(m+1)s_i, \tag{34.35}\]

而稠密存储为 \(mns\)。忽略行指针时,只有 \(\frac{k}{mn}<\frac{s}{s+s_i}\) 才节省空间。例如两字节数值配四字节索引,需要非零比例低于三分之一,才能抵消逐元素索引开销。实际块稀疏或位图格式可改变这个阈值,因此不能把它当作所有稀疏格式的统一门槛。

半结构化稀疏(Semi-structured Sparsity)限制每个小组内的非零数量,例如常见的2:4模式在规定分组中保留两个非零值。固定模式降低索引和调度复杂度,却约束了哪些权重能够保留。同样50%的零元素,任意分布与满足2:4布局的分布,对硬件可能完全不同。专用库对数据类型、矩阵维度、布局和稀疏格式有具体要求,cuSPARSELt 就明确面向受支持的结构化稀疏矩阵运算。(NVIDIA 不详)

稠密内核通常仍按完整矩阵形状计算零元素。使用稀疏内核后,索引读取、不规则访存、负载不均与较低计算密度也可能抵消运算减少。块结构越规则,越容易形成可用执行路径,但其误差预算也更受约束。剪枝前就应确定后端可消费的形式,避免训练完任意掩码后才发现只能还原成稠密矩阵运行。

剪枝后的恢复训练必须明确掩码是否固定。如果置零后仍对完整参数自由更新,零权重可能重新生长;如果只对保留结构训练,应确保优化器状态与结构同步。恢复训练能够调整保留参数,却不能保证任何压缩率下都恢复原质量。

34.4低秩分解

低秩分解及最优近似

SVD 及谱尾误差

奇异值分解(Singular Value Decomposition,SVD)写成

\[ W=U\Sigma V^\mathsf T=\sum_{i=1}^{q}\sigma_i u_iv_i^\mathsf T, \qquad q=\min(m,n),\quad\sigma_1\geq\cdots\geq\sigma_q\geq0. \tag{34.36}\]

左右奇异向量分别正交,奇异值描述对应输入方向到输出方向的放大程度。截断为秩 \(r\) 的矩阵

\[ W_r=\sum_{i=1}^{r}\sigma_i u_iv_i^\mathsf T \tag{34.37}\]

舍弃较小奇异方向。由秩一分量在 Frobenius 内积下正交,

\[ \|W-W_r\|_F^2=\sum_{i=r+1}^{q}\sigma_i^2, \qquad\|W-W_r\|_2=\sigma_{r+1}. \tag{34.38}\]

前式给出总平方误差,后式给出最大方向放大误差;\(r=q\) 时尾项为零。截断 SVD 的最佳低秩近似性质由 Eckart–Young 定理刻画。(Eckart 和 Young 1936)

下面说明 Frobenius 最优性。对任意秩不超过 \(r\) 的候选 \(Z\),令 \(P\) 为其列空间上的正交投影,则 \((I-P)Z=0\)。投影分解使

\[ \|W-Z\|_F^2\geq\|(I-P)(W-Z)\|_F^2 =\|(I-P)W\|_F^2. \tag{34.39}\]

另一方面,

\[ \|(I-P)W\|_F^2=\operatorname{tr}(WW^\mathsf T) -\operatorname{tr}(PWW^\mathsf T). \tag{34.40}\]

\(WW^\mathsf T\) 的正交特征基中,令 \(a_i=u_i^\mathsf T P u_i\),则 \(0\leq a_i\leq1\)\(\sum_i a_i=\operatorname{rank}(P)\leq r\),补零特征值后有

\[ \operatorname{tr}(PWW^\mathsf T)=\sum_i\sigma_i^2a_i \leq\sum_{i=1}^r\sigma_i^2. \tag{34.41}\]

最后一个不等式来自把至多 \(r\) 单位权重分配给降序的最大系数。因此任意 \(Z\) 的误差至少为谱尾平方和,而 \(W_r\) 达到这一界,最优性得证。3

参数量及计算阈值

低秩分解(Low-rank Factorization)以两个较窄矩阵替换原矩阵。可将奇异值分配到两因子,例如

\[ A=U_r\Sigma_r^{\frac{1}{2}},\qquad B=\Sigma_r^{\frac{1}{2}}V_r^\mathsf T, \qquad W_r=AB. \tag{34.42}\]

于是 \(y\approx A(Bx)+b\)。两个线性层之间不能插入新的非线性,否则不再表示同一个低秩矩阵。因子分配也非唯一,\(AD\)\(D^{-1}B\) 对任意可逆 \(D\) 给出相同乘积,但它们的数值范围和后续量化误差可能不同。

原权重数为 \(mn\),因子权重数为 \(r(m+n)\),因此严格减少参数需要

\[ r<\frac{mn}{m+n}. \tag{34.43}\]

对方阵 \(m=n=d\),阈值为 \(r<\frac{d}{2}\),不是简单的 \(r<d\)。若偏置只保留一次,前后偏置数量相同;若额外引入中间偏置,则应计入并说明它如何保持或改变函数。

\(N\) 个输入,原主要操作数约为 \(2Nmn\),两因子约为 \(2Nr(m+n)\)。这个计数忽略内核启动、中间张量和形状效率。真实实现还可能需要额外写入和读取 \(N\times r\) 的中间结果,因此参数与操作数阈值只是必要分析,不能直接推出相同比例加速。

低秩因子替换原矩阵,实际执行两次投影。
图 34.5 低秩因子替换原矩阵,实际执行两次投影。

例26.1

\(W=\operatorname{diag}(4,2,1,0)\)。它的平方 Frobenius 范数为 \(16+4+1=21\)。秩1近似为 \(W_1=\operatorname{diag}(4,0,0,0)\),误差平方为5,相对误差为 \(\sqrt{\frac{5}{21}}\approx0.4880\)。可取

\[ A=(2,0,0,0)^\mathsf T,\qquad B=(2,0,0,0), \tag{34.44}\]

以8个稠密存储参数替代16个参数。输入 \(x=(1,1,1,1)^\mathsf T\) 时,原输出为 \((4,2,1,0)^\mathsf T\),近似输出为 \((4,0,0,0)^\mathsf T\),实际误差范数为 \(\sqrt5\)

秩2近似保留4和2,误差范数降为1,但因子参数为 \(2(4+4)=16\),已经没有参数节省;秩3完全恢复原矩阵,因子参数却为24。例题表明秩越大误差越小,并不意味着每个秩都属于压缩方案。实际模型若奇异值谱下降缓慢,低秩参数节省与质量预算之间可能根本没有共同可行区间。

输入加权的低秩目标

(选修) 权重范数把各输入方向视为同等重要。对真实输入,令 \(E=\widehat W-W\),则

\begin{align} \mathbb E\|Ex\|_2^2 &=\mathbb E\operatorname{tr}(Exx^\mathsf TE^\mathsf T)\tag{34.45}\\ &=\operatorname{tr}(EC_xE^\mathsf T) =\|EC_x^{\frac{1}{2}}\|_F^2. \tag{34.46}\end{align}

这里 \(C_x=\mathbb E[xx^\mathsf T]\) 是二阶矩,不一定等于协方差;若输入均值非零,仍需保留均值贡献。称为激活加权低秩近似(Activation-weighted Low-rank Approximation),是因为常见校准输入就是前一层激活。

\(C_x\) 正定时,设 \(Z=WC_x^{\frac{1}{2}}\)\(D=\widehat WC_x^{\frac{1}{2}}\)。右乘可逆矩阵不改变秩,故

\[ \min_{\operatorname{rank}(\widehat W)\leq r} \|(W-\widehat W)C_x^{\frac{1}{2}}\|_F^2 =\min_{\operatorname{rank}(D)\leq r}\|Z-D\|_F^2. \tag{34.47}\]

\(Z\) 做截断 SVD 得 \(Z_r\),再变换回去,得到

\[ \widehat W=Z_rC_x^{-\frac{1}{2}}. \tag{34.48}\]

这才是该输入分布与固定线性输出误差下的最优低秩解;一般不等于直接截断 \(W\)

\(W=\operatorname{diag}(3,2)\)\(C_x=\operatorname{diag}(1,9)\)。普通 SVD 秩1近似保留第一方向,输出误差为 \(2^2\cdot9=36\)。加权矩阵 \(Z=\operatorname{diag}(3,6)\) 则保留第二方向,回变换得到 \(\widehat W=\operatorname{diag}(0,2)\),输出误差为 \(3^2\cdot1=9\)。后者的权重 Frobenius 误差平方为9,比前者4更大,但在设定输入分布下输出误差更小。这是目标不同导致的合理差异。该二维例子用于解释加权,秩1因子不满足严格参数节省,不能作为压缩率证据。

有限校准集可估计 \(C_x\approx \frac{XX^\mathsf T}{N}\)。当样本不足或激活相关时,该矩阵可能奇异;未被样本覆盖的方向没有得到约束。可在有效支持子空间求解,或采用 \(C_x+\eta I\) 的阻尼形式,但后者相当于给未观测方向加入额外惩罚,改变了原目标。过小特征值的逆平方根还会放大数值误差,不能直接无条件求逆。

局部输出误差小也不保证最终任务误差小。后续层对不同输出方向具有不同敏感度,生成中的分布变化还会改变后续输入。恢复训练可以围绕压缩后激活重新调整,但必须使用与最终测试隔离的数据。

34.5知识蒸馏

知识蒸馏及温度

硬标签和软标签

硬标签(Hard Label)用单个类别或目标词元表示监督,软标签(Soft Label)给出完整概率分布。教师分布中不同错误类别的概率差异,可能表达相似性和不确定性;也可能包含教师偏差。蒸馏并不是宣称教师概率等于真实条件分布,而是让学生拟合一个具有额外结构的监督信号。温度软化与硬软目标组合由经典知识蒸馏工作系统阐述。(Hinton, Vinyals, 和 Dean 2015)

设教师和学生 logits 分别为 \(z_T,z_S\in\mathbb R^C\),温度 \(\tau>0\),则

\[ p_{T,j}^\tau=\frac{e^{\frac{z_{T,j}}{\tau}}}{\sum_k e^{\frac{z_{T,k}}{\tau}}},\qquad p_{S,j}^\tau=\frac{e^{\frac{z_{S,j}}{\tau}}}{\sum_k e^{\frac{z_{S,k}}{\tau}}}. \tag{34.49}\]

增大温度通常使分布更平缓,减小温度使其更集中。类别排序不因共同正温度缩放改变,但类别间的概率差和优化权重会改变。蒸馏使用的训练温度不必等于部署采样温度,二者应分别记录。

若真实类别为 \(y\),常见混合目标为

\[ \mathcal L=(1-\lambda)[-\log p_{S,y}^{1}] +\lambda\tau^2D_{\mathrm{KL}}(p_T^\tau\Vert p_S^\tau). \tag{34.50}\]

这里硬标签项使用温度1,软标签项的教师与学生使用同一温度。教师熵相对于学生参数是常数,因而 KL 与教师为目标的交叉熵具有相同学生梯度,但数值不同。反转 KL 的方向会改变目标,不能因调用接口接受两组概率就随意交换。

温度平方因子的推导

教师冻结时,记 \(p_j=p_{T,j}^\tau\)\(q_j=p_{S,j}^\tau\),则

\[ D=\sum_jp_j(\log p_j-\log q_j),\qquad \log q_j=\frac{z_{S,j}}\tau-\log\sum_k e^{\frac{z_{S,k}}{\tau}}. \tag{34.51}\]

对学生 logit \(z_{S,l}\) 求导,

\[ \frac{\partial\log q_j}{\partial z_{S,l}} =\frac1\tau(\mathbf1[j=l]-q_l). \tag{34.52}\]

代入 KL,利用 \(\sum_jp_j=1\),得到

\begin{align} \frac{\partial D}{\partial z_{S,l}} &=-\frac1\tau\sum_jp_j(\mathbf1[j=l]-q_l) =\frac{q_l-p_l}{\tau},\tag{34.53}\\ \frac{\partial(\tau^2D)}{\partial z_{S,l}} &=\tau(q_l-p_l). \tag{34.54}\end{align}

一个 \(\frac{1}{\tau}\) 来自 logits 缩放;另一个近似尺度需要进一步分析概率差,不能从链式法则中直接凭空得到。

softmax 对公共平移不变,因此分别中心化师生 logits:\(\widetilde z_j=z_j-C^{-1}\sum_k z_k\)。在 \(\tau\) 相对所有中心化 logit 幅度足够大时,

\[ e^{\frac{\widetilde z_j}{\tau}}=1+\frac{\widetilde z_j}{\tau}+O(\tau^{-2}), \qquad p_j^\tau=\frac1C+\frac{\widetilde z_j}{C\tau}+O(\tau^{-2}). \tag{34.55}\]

\[ q_j-p_j=\frac{\widetilde z_{S,j}-\widetilde z_{T,j}}{C\tau}+O(\tau^{-2}), \tag{34.56}\]

未缩放 KL 梯度主项为中心化 logit 差除以 \(C\tau^2\)。乘以 \(\tau^2\) 后,

\[ \frac{\partial(\tau^2D)}{\partial z_{S,j}} =\frac{\widetilde z_{S,j}-\widetilde z_{T,j}}C+O(\tau^{-1}). \tag{34.57}\]

因此温度平方因子补偿的是高温近均匀区域的主要梯度尺度。它不保证所有温度、所有样本的梯度范数完全相等,也不证明温度越高越好。高温下不同类别近乎均匀,小概率信息与噪声都可能被放大到更显著的监督位置。

高温极限还给出 \(\tau^2D\approx\frac{\|\widetilde z_S-\widetilde z_T\|_2^2}{2C}\)。这里必须中心化:给教师全部 logits 加一个常数不改变分布,不应改变蒸馏目标,而未经中心化的平方误差会惩罚这个无意义平移。

蒸馏损失梯度

例26.2

考虑两个类别,\(\tau=2\),教师 logits 为 \((2\log4,0)\),学生 logits 为 \((0,0)\),硬标签是第一类,\(\lambda=\frac{1}{2}\)。温度化教师分布为 \((0.8,0.2)\),学生为 \((0.5,0.5)\)。软目标 KL 为

\begin{align} D&=0.8\log(\frac{0.8}{0.5})+0.2\log(\frac{0.2}{0.5})\tag{34.58}\\ &=0.8\log1.6+0.2\log0.4\approx0.192745, \tag{34.59}\end{align}

乘以 \(\tau^2=4\) 得0.770979。硬标签损失为 \(-\log0.5\approx0.693147\),最终混合损失约为

\[ \mathcal L=\tfrac12(0.693147+0.770979)\approx0.732063. \tag{34.60}\]

软目标对学生 logits 的梯度为

\[ 2[(0.5,0.5)-(0.8,0.2)]=(-0.6,0.6), \tag{34.61}\]

硬标签梯度为 \((-0.5,0.5)\),混合后为 \((-0.55,0.55)\)。梯度下降提高第一类 logit并降低第二类 logit。若忘记温度平方,软项梯度变成 \((-0.15,0.15)\),即使混合系数未变,硬软监督的相对强度也已改变。

教师若给出错误分布,学生仍会沿教师方向更新。混入硬标签可以提供另一信号,但效果受标签质量和权重影响,不能作为所有教师错误的自动修复。比较蒸馏收益必须保留同结构学生仅使用硬标签训练的基线,而不只与更大教师比较。

输出分布蒸馏的数据与梯度边界。教师输出为固定目标,硬标签项与软标签项使用各自声明的温度。
图 34.6 输出分布蒸馏的数据与梯度边界。教师输出为固定目标,硬标签项与软标签项使用各自声明的温度。

语言模型的蒸馏契约

词元分布及数据位置

词元级蒸馏(Token-level Distillation)在给定前缀上对齐师生下一词元分布。若有效掩码为 \(m_{bt}\),总有效位置数 \(N_t=\sum_{b,t}m_{bt}\),可写为

\[ \mathcal L_{\mathrm{token}}=\frac{\tau^2}{N_t}\sum_{b,t}m_{bt} D_{\mathrm{KL}}(p_T^\tau(\cdot\mid h_{bt})\Vert p_S^\tau(\cdot\mid h_{bt})). \tag{34.62}\]

师生必须使用相同可见前缀和对应目标位置。填充、提示监督区域、因果移位和样本装箱边界若不同,分布列相同也不能得到正确监督。

词表对齐更是必要条件。两个分词器的第100列可能代表不同文本单位,不能逐列计算 KL。即使通过映射合并相近词元,也必须定义概率质量如何守恒、不同切分怎样对应位置。无法建立可靠映射时,可以选择文本级序列监督,代价是放弃完整词表分布信息。

完整 logits 缓存大小约为 \(N_tVs\) 字节,\(V\) 为词表大小、\(s\) 为每元素字节数。取最可能的若干类别可以降低存储,却会丢失尾部质量;截断后重新归一化得到的是另一个目标。缓存必须绑定样本标识、教师权重、分词器、模板、位置掩码和温度处理方式,避免内容正确但排列错位。

教师冻结包含参数不更新和目标生成方式稳定两个方面。训练模式下的随机失活仍可能改变教师分布;若有意使用随机教师集成,需要把这种随机性定义为目标的一部分。在线教师消耗额外算力,离线缓存消耗存储及版本管理成本,二者应按训练规模选择。

中间表示及注意力蒸馏

中间表示蒸馏(Intermediate Representation Distillation)对齐教师与学生的隐藏状态。设 \(H_S\in\mathbb R^{N_t\times d_S}\)\(H_T\in\mathbb R^{N_t\times d_T}\),投影 \(P_h\in\mathbb R^{d_S\times d_T}\),一种目标为

\[ \mathcal L_h=\frac1{N_t}\|H_SP_h-H_T\|_F^2. \tag{34.63}\]

\(E_h=H_SP_h-H_T\),则

\[ \frac{\partial\mathcal L_h}{\partial H_S}=\frac2{N_t}E_hP_h^\mathsf T, \qquad \frac{\partial\mathcal L_h}{\partial P_h}=\frac2{N_t}H_S^\mathsf TE_h. \tag{34.64}\]

投影只承担训练对齐时,可以在部署移除;若它被加入学生推理路径,则应计入最终成本。层数不同时需显式定义层映射,而不是比较同名层。隐藏表示还存在旋转和尺度的不唯一性,直接逐元素拟合会施加比输出一致更强的约束。

注意力蒸馏(Attention Distillation)可以比较对应层或头的注意力分布,但要求查询与键位置可对齐。教师多头与学生少头的映射、掩码与头聚合规则都会改变目标。注意力相似并不充分保证值路径和最终输出相似;因此中间目标通常作为任务或输出目标的补充。

序列级蒸馏

序列级蒸馏(Sequence-level Distillation)以教师生成的完整文本作为学生监督,早期序列到序列研究系统讨论了这一方法。(Kim 和 Rush 2016) 若教师序列分布为 \(p_T(y\mid x)\),理想交叉熵为

\[ \mathcal L_{\mathrm{seq}}=-\mathbb E_{y\sim p_T(\cdot\mid x)}\log p_S(y\mid x). \tag{34.65}\]

使用独立教师样本可以形成蒙特卡洛估计;若只保留贪心或束搜索选出的 \(y^*\),目标变成 \(-\log p_S(y^*\mid x)\),不再是整个教师分布交叉熵的无偏估计。它可能降低目标多样性,也可能让学生更容易学习集中的输出形式。

序列监督通过重新分词教师文本,可以允许师生使用不同词表,但内容质量、终止协议和数据分布仍需校验。第26章《可验证推理训练》讨论了验证器筛选与推理轨迹蒸馏;筛选会改变教师条件分布,不能把被接受文本视为无偏教师样本。

输出分布、序列与中间表示三类蒸馏可以组合,但每增加一个目标都增加对齐条件。教师的错误、偏见与不恰当置信度也可能被学生继承。蒸馏数据和教师选择应与最终测试隔离,报告学生对真实标签和任务的表现,而不只报告“与教师更相似”。

34.6组合压缩及误差传播

同一矩阵的组合误差

设第一次压缩得到 \(W^{(1)}=W+E_1\),第二次得到 \(W^{(2)}=W^{(1)}+E_2\)。总误差为 \(E_1+E_2\),因此

\[ \|E_1+E_2\|_F^2=\|E_1\|_F^2+\|E_2\|_F^2 +2\langle E_1,E_2\rangle_F. \tag{34.66}\]

两种压缩各自误差小,不意味着总误差平方等于它们之和;误差方向可能抵消,也可能加强。若剪枝改变了激活分布,原来的加权低秩或量化校准统计也不再精确对应后续输入。

对因子量化,原低秩近似为 \(AB\),量化后为 \((A+\Delta A)(B+\Delta B)\),则

\[ \widehat W-W=(AB-W)+\Delta A B+A\Delta B+\Delta A\Delta B. \tag{34.67}\]

于是谱范数上界为

\[ \|\widehat W-W\|_2\leq\|AB-W\|_2 +\|\Delta A\|_2\|B\|_2+\|A\|_2\|\Delta B\|_2 +\|\Delta A\|_2\|\Delta B\|_2. \tag{34.68}\]

这说明因子尺度分配会影响后续误差:即使乘积相同,一个因子过大也可能放大另一个因子的扰动。

组合误差传播

例26.3

对无偏置的两层网络 \(f(x)=W_2\phi(W_1x)\),压缩后为 \(\widehat f(x)=(W_2+E_2)\phi((W_1+E_1)x)\)。若 \(\phi\)\(L_\phi\)-Lipschitz 且 \(\phi(0)=0\),加减中间项得到

\begin{align} \|\widehat f(x)-f(x)\|_2 &\leq\|E_2\|_2\|\phi((W_1+E_1)x)\|_2\tag{34.69}\\ &\quad+\|W_2\|_2\|\phi((W_1+E_1)x)-\phi(W_1x)\|_2\tag{34.70}\\ &\leq L_\phi[\|E_2\|_2(\|W_1\|_2+\|E_1\|_2) +\|W_2\|_2\|E_1\|_2]\|x\|_2. \tag{34.71}\end{align}

它揭示前层误差受到后层放大的机制,但可能很保守。残差、归一化和自回归反馈需要各自分析,不能把这个两层界直接当作整书所有模型的质量界。

用标量线性链展示组合项。原模型 \(f(x)=3(2x)=6x\),第一步将内层权重2近似为1.8,第二步将外层权重3近似为2.7。两者分别相对原模型单独使用时,输出误差均为 \(-0.6x\);组合后输出为 \(2.7\cdot1.8x=4.86x\),误差为 \(-1.14x\)。展开为

\[ 3(-0.2)x+(-0.3)2x+(-0.3)(-0.2)x =(-0.6-0.6+0.06)x. \tag{34.72}\]

两个单独的相对误差均为10%,组合相对误差为19%,既不是简单相加20%,也不是平方和。真实网络中误差相关性更复杂,因此需要保留每个中间产物,才能解释后续变化。

组合顺序及恢复训练

压缩操作一般不可交换。先剪枝再分解,与先分解再剪枝因子,约束的是不同集合;先改变通道再量化,会改变每通道范围;蒸馏到另一结构则重新定义了后续可压缩对象。若目标是显著缩小架构,可先设计学生再蒸馏;若保留主体结构,可先做结构剪枝或低秩替换,再进行恢复和最终表示校准。这些是降低重复工作的策略,而不是唯一正确顺序。

恢复训练(Recovery Training)使用保留参数适应压缩结构,可结合真实标签、原模型输出或中间状态。它本身消耗数据与训练资源,也可能过拟合校准分布。每次结构变化后都应重新确认权重共享、嵌入与输出头绑定、配置形状、稀疏掩码以及优化器状态;保存完整基线与中间版本,才能定位质量损失来源。

算法34.3 按误差与执行约束构建压缩产物

输入:原模型、独立校准数据、恢复训练数据、质量预算与目标后端。输出:具有明确结构、表示及来源记录的候选压缩模型。

  1. 固定原模型和评估契约,列出各模块形状、共享关系与目标后端可执行的稀疏或低秩形式。

  2. 在校准输入上估计通道敏感度或输入二阶矩,按预算产生剪枝掩码、保留索引或低秩因子。记录目标函数与近似方法。

  3. 同步修改关联模块及配置,重建实际推理结构;不要仅把稠密参数置零后宣称结构已缩小。

  4. 按需要恢复训练或蒸馏。教师及其输出版本冻结,目标位置对齐,恢复数据与最终测试隔离。

  5. 结构稳定后按本章量化部分的方法确定量化表示和校准范围,保存每次组合前后的产物与误差证据。

  6. 在目标负载上评估最终任务质量及实际执行路径,超出预算时回退到对应中间版本。达到预定资源和质量要求后停止增加压缩操作。

不变量:每个参数形状与模型配置一致;输出接口和词表契约明确;后端实际消费所声明格式;最终测试不参与压缩阈值调优。

34.7真实硬件收益及统一比较

方法 直接改变的对象 收益必须满足的条件
非结构化剪枝 权重支持集 稀疏格式和内核能抵消索引及调度开销。
结构化剪枝 通道、头或层形状 关联结构一致,新形状仍能有效映射硬件。
低秩分解 矩阵秩与因子结构 秩满足参数阈值,双投影成本低于原运算。
知识蒸馏 学生训练目标与可选架构 学生在质量约束下确实具有更低执行成本。
量化 数值表示与位宽 格式、布局与低精度内核匹配,转换成本受控。

若可压缩部分占原端到端时间比例 \(f\),该部分加速 \(s_c\) 倍,其他部分不变,则理想加速比为

\[ S=\frac1{(1-f)+\frac{f}{s_c}}. \tag{34.73}\]

例如线性计算占60%,即便这部分加速两倍,端到端也只有 \(\frac{1}{0.4+0.3}\approx1.43\) 倍;这是时间分解的算例,并非设备测量。实际压缩还可能改变内存流量、通信和调度,需重新测量各部分,不能把此式作为固定预测。

模型制品大小、加载后权重内存、键值缓存、工作区和峰值内存应分别记录。减少权重未必同比减少长上下文 KV;增加中间低秩激活可能扩大工作区;结构化头删除可能影响缓存形状,但必须按具体结构重新计数。第28章《算力基础设施》说明了计算与带宽的约束,压缩收益应对应到这些实际路径。

同样的压缩结构在不同批量和序列长度下可能具有不同表现。小矩阵更容易受启动与带宽影响,大矩阵更可能受计算吞吐影响;稀疏布局打包的启动成本与稳态内核成本也应分开。必须记录数值精度、后端版本、实际内核、输入输出长度、冷暖状态和并发,避免用一次文件缩小或单层操作数下降宣称完整服务提速。

压缩的三个完成条件

数学近似必须在明确误差目标下成立,模型结构与制品格式必须能够恢复并执行,任务质量和系统成本必须在同一负载契约下满足要求。任何一个条件尚未建立,都不能由“参数更少”替代。


  1. “INT8”只描述存储类型,不能唯一确定使用多少有效码字、如何处理零点和采用何种舍入。不同制品即使都保存为八位整数,也可能不兼容。↩︎

  2. “尾数位”在此指不包含规格化隐含前导一的尾数字段。将隐含位计入有效精度后再比较,才不会把 E4M3 误认为只有三位总有效数字。↩︎

  3. 若截断处奇异值相同,最优子空间可能不唯一;这不改变最小误差值。矩阵的这一结论也不能直接推广为任意高阶张量分解都具有相同闭式最优解。↩︎

WORKBOOK / 习题

配套习题与解析

先独立作答,再展开参考解析。选修题保留原书标记。

习题 34.1

对目标范围 \([-0.7,1.8]\) 与无符号三比特码计算初始尺度、取整零点及实际恢复端点,说明端点为何发生偏移。

展开参考解析

三比特码0至7,\(s=\frac{1.8+0.7}{7}=\frac{5}{14}\),初始零点 \(\frac{0.7}{s}=1.96\),最近整数z=2。实际端点为 \(-2s=-\frac{5}{7}\approx-.714286\)\(5s=\frac{25}{14}\approx1.785714\)。整数零点量化使端点整体偏移;希望上界1.8必覆盖时需重新选择范围/尺度,不能称两端都精确命中。

习题 34.2

推导均匀误差模型的 \(\frac{s^2}{12}\),并构造一个全部输入恰在格点上的反例,说明其为何不是恒等式。

展开参考解析

若误差e在 \([-\frac{s}{2},\frac{s}{2}]\) 均匀,\(\mathbb Ee^2=s^{-1}\int_{-\frac{s}{2}}^{\frac{s}{2}}e^2\,de=\frac{s^2}{12}\)。若所有输入都在格点且无饱和,误差恒0而不是该值;该式是输入残差分布近似,不是量化器恒等式。

习题 34.3

比较取偶数最近舍入与向零截断在正负半格点附近的误差。为一个可复现制品写出完整舍入约定。

展开参考解析

最近取偶数时1.5\(\to\)2、2.5\(\to\)2、-1.5\(\to\)-2、-2.5\(\to\)-2;向零则1.5\(\to\)1、2.5\(\to\)2、-1.5\(\to\)-1、-2.5\(\to\)-2。向零有朝零的定向误差,最近舍入非平局时误差绝对值\(\le\)s/2。制品要固定舍入发生在加零点前还是后、平局规则、码域、饱和顺序和特殊值处理;浮点近半格点也需一致实现。

习题 34.4

对本章异尺度矩阵计算逐张量和逐行的整体均方误差,再解释为何误差改善不能直接推出任务改善。

展开参考解析

采用本章取偶数、码域[-3,3]。第二行恢复 \((\frac{40}{3},20,-\frac{40}{3})\),行MSE为\(\frac{200}{27}\);第一行逐张量为.02,逐行为\(\frac{1}{1350}\)。两行等元素数,整体逐张量为 \(\frac12(.02+\frac{200}{27})=\frac{10027}{2700}\approx3.713704\),逐行为 \(\frac12(\frac{1}{1350}+\frac{200}{27})=\frac{10001}{2700}\approx3.704074\)。改善来自小行,但大行误差主导;下游输入协方差和非线性另决定任务误差。

习题 34.5

给定 \(4096\times4096\) 权重、四比特码、每行每 \(128\) 个元素一组、每组四字节元数据,计算忽略对齐的存储与相对十六位基线压缩率。

展开参考解析

P=16777216,四比特码8388608字节;每行32组,共131072组,元数据524288字节。合计8912896字节=8.5 MiB,十六位基线32 MiB,压缩 \(\frac{32}{8.5}=\frac{64}{17}\approx3.7647\) 倍。逐行已整除,本题忽略对齐及未量化参数。

习题 34.6选修

从约束二次目标推导式34.14,说明阻尼改变了什么,以及输入完全不相关时为何不发生跨坐标补偿。

展开参考解析

最小化 \(\frac12\delta^\mathsf TH\delta\)\(e_i^\mathsf T\delta=d\)。拉格朗日式导数 \(H\delta+\lambda e_i=0\),得到 \(\delta=\frac{dH^{-1}e_i}{(H^{-1})_{ii}}\),最小代价 \(\frac{d^2}{[2(H^{-1})_{ii}]}\)。阻尼把H换H+lambda I,改变目标及不可观测方向的代价;若H对角,各非i坐标补偿为0。实际X不相关要对应零交叉二阶矩而非口头“不同特征”。

习题 34.7选修

若 GPTQ 先处理另一坐标,离散结果是否必然相同?用两维例子或明确论证说明处理顺序的作用。

展开参考解析

\(H=\begin{pmatrix}2&1\\1&2\end{pmatrix}\)\(w=(.6,.7)\),单位整数格点。先量化第一坐标到1,误差+.4令第二坐标减.2至.5;按取偶数再到0,最终(1,0)。先量化第二到1,误差+.3令第一减.15至.45,再到0,最终(0,1)。固定坐标后不再变,故顺序可改变离散结果;本例已声明半格点规则。

习题 34.8

用式34.17说明 AWQ 与 SmoothQuant 的共同基础,再分别写出二者关注的误差对象。

展开参考解析

对正对角D,\(WX=(WD)(D^{-1}X)\),保持实数函数。AWQ主要通过激活重要性选择通道缩放来降低仅权重量化后的输出重建误差;SmoothQuant平衡激活与权重动态范围,支持二者低精度。恒等式相同不代表校准目标、搜索或执行格式相同,移动变换需保持全部共享分支一致。

习题 34.9

给定激活通道范围 \((64,4)\) 与权重列范围 \((1,4)\),计算 \(\alpha=\frac{1}{2}\) 的 SmoothQuant 尺度及两侧新范围。

展开参考解析

\(s_j=\frac{a_j^{\alpha}}{b_j^{1-\alpha}}\),alpha=.5给s=(8,1)。激活新范围a/s=(8,4),权重新范围bs=(8,4)。两侧极值被平衡,乘积不变;这并未计算实际量化误差或证明该alpha最优,仍需代表性校准。

习题 34.10

证明均匀量化函数的真实导数不能直接提供一般的有效梯度,并说明 STE 的近似性质与部署匹配要求。

展开参考解析

固定尺度和零点的阶梯函数在每个格区内导数0,在跳点不可导,直接梯度几乎处处消失。STE在反向指定近似导数如范围内1、范围外0,使优化能进行;它不是原离散函数的真实导数。训练的舍入、饱和、粒度和部署整数路径应匹配,否则学到的误差补偿可能失效。

习题 34.11选修

比较 E4M3 与 E5M2 的指数和尾数预算,说明为何最大值、下溢和累加行为必须按具体格式与内核声明。

展开参考解析

E4M3为4指数3尾数,E5M2为5指数2尾数(均另有符号位);更多指数通常换更大动态范围,更多尾数通常换局部精度。具体NaN/无穷编码、指数偏置和次正规数决定最大值/下溢,乘法输入、累加和更新精度又是不同选择。不能只看FP8名称推定范围、溢出行为或优化器状态。

习题 34.12

从式34.22推导对称权重量化可省略的修正项,并讨论分组尺度为何改变累加组织。

展开参考解析

\(\sum_j s_x(q_{xj}-z_x)s_w(q_{wj}-z_w)=s_xs_w[\sum_jq_{xj}q_{wj}-z_w\sum_jq_{xj}-z_x\sum_jq_{wj}+nz_xz_w]\)。对称权重\(z_w=0\)可去第二项和常数项,但激活非对称时仍保留 \(-z_x\sum_jq_{wj}\)。分组\(s_w\)不同,要组内累加后各乘尺度再合并,不能把一个总尺度提出全部求和。

习题 34.13

构造一个模型权重减少四倍但请求时延改善很小的负载,按带宽、计算、缓存和其他时间解释原因。

展开参考解析

构造权重搬运仅占总时延10%、其他计算/KV/排队占90%的长上下文负载。即使前者理想加速4倍,总加速仅 \(\frac{1}{.9+\frac{.1}{4}}\approx1.081\);反量化开销可再抵消收益。需分测权重和KV字节、算子与排队时间,不能由文件缩小四倍推导延迟四倍。

习题 34.14

对键值量化的一阶误差式说明:为何只测值缓存的逐元素均方误差不能覆盖注意力分配变化?

展开参考解析

\(o=\mathrm{softmax}(qK^\mathsf T)V\),一阶有 \(\delta o\approx J_{\mathrm{softmax}}(s)\,\delta s\,V+p\,\delta V\),其中 \(\delta s\)含键误差与查询的内积。只测值MSE覆盖第二项,漏掉键导致的注意力重分配及两误差相关性;不同查询/上下文还可放大相同逐元素误差。

习题 34.15选修

证明在保留数值不变、仅固定非零数量的条件下,幅值剪枝最小化权重平方误差;给出不最小化任务损失的反例。

展开参考解析

保留集合S不改原数值时,平方误差为 \(\sum_{i\notin S}w_i^2\),固定集合大小k,交换论证表明应保留绝对值最大的k项。反例:w=(10,1),输入总为x=(0,1),只保留一项时幅值法删第二项造成输出误差1,而保留第二项输出误差0。权重范数目标不等于数据加权任务目标。

习题 34.16

使用式34.27分析非驻点时一阶项的作用。为什么接近训练结束也不能未经测量就认定所有 \(g_q=0\)

展开参考解析

删除\(w_q\)产生 \(\delta_q=-w_q\),Taylor项为 \(-g_qw_q+\frac12H_{qq}w_q^2\)(固定其他参数)。一阶项可正可负,并可能压过二阶项。训练接近结束不代表每坐标梯度为0,随机批次、正则、早停及非平稳分布均可使其非零;应在明确校准目标下测量。

习题 34.17选修

\(H=\begin{bmatrix}3&1\\1&2\end{bmatrix}\)\(w=(1,1)^\mathsf T\),计算分别删除两个权重时的二阶补偿与代价。

展开参考解析

\(H^{-1}=\frac15\begin{pmatrix}2&-1\\-1&3\end{pmatrix}\)。删第一坐标d=-1,补偿 \((-1,.5)\),新权重(0,1.5),代价 \(\frac{1}{[2(\frac{2}{5})]}=1.25\)。删第二坐标补偿 \((\frac{1}{3},-1)\),新权重(\(\frac{4}{3}\),0),代价 \(\frac{1}{[2(\frac{3}{5})]}=\frac{5}{6}\)。该驻点二次目标下删第二项更便宜;非零一阶梯度需重新解。

习题 34.18

写出门控前馈层删除中间通道的三个矩阵索引关系,并说明偏置和优化器状态应如何同步。

展开参考解析

列向量约定下 \(U,G\in\mathbb R^{d_f\times d}\)\(D\in\mathbb R^{d\times d_f}\)。保留中间集合S时取 \(U[S,:],G[S,:],D[:,S]\);上投影/门控偏置取S,输出偏置维度不变。梯度、Adam矩、主权重和分片索引同步裁剪,残差输出d不改;若使用行向量实现应转置对应索引。

习题 34.19

两字节数值配两字节索引时,忽略行指针求稀疏存储低于稠密存储的非零比例阈值。为什么满足它仍不保证加速?

展开参考解析

稠密2P字节,非零比例rho的数值+索引为4rho P,节省要求rho<\(\frac{1}{2}\)。行指针、对齐和稀疏元数据会收紧阈值;不规则访问、缺少匹配内核和低矩阵单元利用率仍可使稀疏计算更慢。

习题 34.20

对奇异值 \((10,4,3,1)\),计算秩1、2、3近似的绝对与相对 Frobenius 误差,讨论给定参数预算能否实现某个误差目标。

展开参考解析

总平方范数126。秩1误差 \(\sqrt{26}\)、相对 \(\sqrt{\frac{26}{126}}\approx.4543\);秩2为 \(\sqrt{10}\)、相对约.2817;秩3为1、相对 \(\frac{1}{\sqrt{126}}\approx.08909\)。若矩阵m\(\times\)n,因子预算需 \(r(m+n)\),可先找达到误差阈值的最小r,再检查预算;未给m/n和预算时无法断言哪一秩可行。

习题 34.21选修

从列空间投影出发复现截断 SVD 的最优性证明,指出截断奇异值重合时唯一性为何可能失效。

展开参考解析

任意秩\(\le\)r近似A的列空间投影P满足 \(\|W-A\|_F^2\ge\|(I-P)W\|_F^2\)。设 \(WW^\mathsf T\)特征值为 \(\sigma_i^2\),秩r正交投影最多捕获前r个特征值之和,故误差至少谱尾和;取前r奇异向量即达界。若截断处 \(\sigma_r=\sigma_{r+1}\),等特征子空间中可选择不同基/子空间而同样最优,矩阵近似可能不唯一。

习题 34.22

\(m=4096,n=11008\),求减少因子参数所需的秩阈值。分别计算 \(r=512\)\(r=2048\) 的参数比例。

展开参考解析

原参数 \(4096\times11008=45088768\),和为15104。需 \(r<\frac{45088768}{15104}\approx2985.2203\),整数r\(\le\)2985。r=512比例 \(\frac{7733248}{45088768}=\frac{59}{344}\approx17.1512\%\);r=2048比例 \(\frac{30932992}{45088768}=\frac{59}{86}\approx68.6047\%\)。这是参数节省条件,不是两次小GEMM一定更快。

习题 34.23选修

\(W=\operatorname{diag}(4,1)\)\(C_x=\operatorname{diag}(1,25)\),比较普通秩1 SVD 与输入加权近似的输出误差。

展开参考解析

普通秩1保留4、删除1,输出误差期望为 \(1^2\times25=25\)。加权问题看 \(WC_x^{\frac{1}{2}}=\operatorname{diag}(4,5)\),最优保留第二方向,映回近似为diag(0,1),误差为 \(4^2\times1=16\)。输入高方差方向可以推翻仅按权重奇异值的选择。

习题 34.24

推导温度平方缩放后的学生 logit 梯度,并说明高温近似需要中心化 logits 的原因。

展开参考解析

\(q=\mathrm{softmax}(\frac{z_S}{\tau})\)\(p\)为冻结教师,\(\frac{\partial[\tau^2\mathrm{KL}(p\|q)]}{\partial z_S}=\tau(q-p)\)。高温下 \(q_i\approx\frac{1}{K}+\frac{z_i-\bar z}{K\tau}\),故梯度近似师生中心化logit差/K。共同平移logits不改变概率,未经中心化的欧氏logit差会惩罚一个不可辨识方向。

习题 34.25

在蒸馏数例中将 \(\lambda\) 改为0.8,求损失与学生梯度;若硬标签改为第二类,两项监督如何竞争?

展开参考解析

本章定义lambda乘软项,故\(\lambda=.8\)时损失 \(.2\log2+.8(4D)\approx.755412\),梯度 \(.2(-.5,.5)+.8(-.6,.6)=(-.58,.58)\)。硬标签改第二类时硬梯度(.5,-.5),软梯度不变,总为(-.38,.38):两项竞争而此设定软项占优;硬损失仍log2,因为学生均匀。

习题 34.26

教师与学生使用不同分词器,列出逐词元 KL 不成立的两个原因,并解释序列蒸馏保留和丢失了哪些信息。

展开参考解析

第一,词表事件不同,不能直接把同索引概率当同一类别;第二,文本被分成不同位置数,条件前缀也不同。需要显式词表/跨度映射或改用序列级教师文本。序列蒸馏保留采样出的可读答案与任务结构,但丢失未采样候选的完整概率和不确定性,受教师采样偏差影响。

习题 34.27选修

对因子变换 \(A'=10A,B'=\frac{B}{10}\),说明乘积不变而量化误差可能变化的原因。

展开参考解析

实数乘积 \((10A)(\frac{B}{10})=AB\)。独立量化后含 \(10A E_{B'}+\frac{E_{A'}B}{10}+E_{A'}E_{B'}\),格点、动态范围和尺度元数据未必按反向比例等变,误差可能改变。若理想量化器和尺度恰能完全同比缩放,也可能保持同误差;题目强调可能性而非必然。

习题 34.28

某方案报告权重文件缩小四倍、单层 FLOPs减少两倍。设计能够确认端到端实际收益的最小证据集合,并明确不能从已有两个数字推出什么。

展开参考解析

固定数据/版本、质量门槛、硬件、长度/并发与采样;核对模型文件、权重/KV/工作区峰值和实际内核路径;预热同步后测首词元、逐词元、吞吐及尾延迟,并与未压缩基线比较。恢复重载和任务/安全回归也须通过。两个局部数字不能证明时延、总显存或质量达标,需报告误差范围和不支持时的回退路径。

习题 34.29

剪枝、低秩分解和量化分别作用于原始模型时均达到质量要求。说明这些结果能否证明顺序组合后的模型也达标,并设计同时覆盖累计误差、处理顺序与实际部署收益的验收方案。

展开参考解析

单项验收不能推出组合达标。各步骤会改变后续步骤的输入分布和权重结构,误差还会跨层传播,因此不能将独立测得的退化简单相加。固定原始模型为共同参考,记录每一步制品,按实际处理顺序重新校准并评估最终组合;中间制品间的比较用于定位新增误差,同时保留相对原模型的累计质量差异。对有依据的候选顺序进行受控比较,使用独立任务与失败切片评估,并核对目标设备的算子支持、峰值内存和端到端时延。只有最终制品在既定质量与资源约束下通过验证,才支持部署。

REFERENCES

参考文献

Eckart, Carl, 和 Gale Young. 1936. 《The Approximation of One Matrix by Another of Lower Rank》. Psychometrika 1 (3): 211–18. https://doi.org/10.1007/BF02288367.
Frantar, Elias, 和 Dan Alistarh. 2023. 《SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot》. 2023年1月2日. https://arxiv.org/abs/2301.00774.
Frantar, Elias, Saleh Ashkboos, Torsten Hoefler, 和 Dan Alistarh. 2022. 《GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers》. 2022年10月31日. https://arxiv.org/abs/2210.17323.
Hassibi, Babak, 和 David G. Stork. 1992. 《Second Order Derivatives for Network Pruning: Optimal Brain Surgeon》. 收入 Advances in Neural Information Processing Systems. 卷 5. https://proceedings.neurips.cc/paper/1992/hash/303ed4c69846ab36c2904d3ba8573050-Abstract.html.
Hinton, Geoffrey, Oriol Vinyals, 和 Jeff Dean. 2015. 《Distilling the Knowledge in a Neural Network》. 2015年3月9日. https://arxiv.org/abs/1503.02531.
Jacob, Benoit, Skirmantas Kligys, Bo Chen, Menglong Zhu, Matthew Tang, Andrew Howard, Hartwig Adam, 和 Dmitry Kalenichenko. 2018. 《Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference》. 收入 Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2704–13. https://openaccess.thecvf.com/content_cvpr_2018/papers/Jacob_Quantization_and_Training_CVPR_2018_paper.pdf.
Kim, Yoon, 和 Alexander M. Rush. 2016. 《Sequence-Level Knowledge Distillation》. 2016年6月25日. https://arxiv.org/abs/1606.07947.
LeCun, Yann, John S. Denker, 和 Sara A. Solla. 1989. 《Optimal Brain Damage》. 收入 Advances in Neural Information Processing Systems. 卷 2. https://proceedings.neurips.cc/paper/1989/hash/6c9882bbac1c7093bd25041881277658-Abstract.html.
Lin, Ji, Jiaming Tang, Haotian Tang, Shang Yang, Wei-Ming Chen, Wei-Chen Wang, Guangxuan Xiao, Xingyu Dang, Chuang Gan, 和 Song Han. 2023. 《AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration》. 2023年6月1日. https://arxiv.org/abs/2306.00978.
Micikevicius, Paulius, Dusan Stosic, Neil Burgess, Marius Cornea, Pradeep Dubey, Richard Grisenthwaite, Sangwon Ha, 等. 2022. 《FP8 Formats for Deep Learning》. 2022年. https://arxiv.org/abs/2209.05433.
NVIDIA. 不详. 《cuSPARSELt: A High-Performance CUDA Library for Sparse Matrix-Matrix Multiplication》. 见于 2026年9月8日. https://docs.nvidia.com/cuda/cusparselt/index.html.
Xiao, Guangxuan, Ji Lin, Mickael Seznec, Hao Wu, Julien Demouth, 和 Song Han. 2022. 《SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models》. 2022年11月18日. https://arxiv.org/abs/2211.10438.

搜索全书

搜索全书正文、习题与解析