极致量化代表着实现模型最大程度压缩和推理加速的前沿。这涉及使用少于4位表示模型参数,主要是权重,有时也包括激活值。这种激进的缩减显著降低了内存占用和数据传输成本,有望使LLM部署于资源受限的设备上,并在专用硬件支持下实现显著加速。然而,这种追求伴随相当大的精度下降风险,需要复杂技术和审慎评估。极致量化的动因研究子4位表示的主要驱动因素有:最大内存缩减: 从INT4到例如2位(INT2)或1位(二值)表示,可再次将权重所需的内存减半或减四分之一。这对于即使高端GPU内存也捉襟见肘的数十亿参数模型而言非常重要。潜在的极致加速: 对低位宽数据进行操作,其基础速度可以更快。特别是二值操作,可以借助位逻辑(XNOR, POPCOUNT),这在某些硬件上比浮点或甚至INT8乘法快数个数量级。能效: 减少数据移动和简化计算操作通常直接带来更低的功耗,这对于边缘设备和大规模部署很重要。然而,仅用少量离散值来表示LLM学习到的复杂分布,本身就具有挑战性。信息不可避免地会丢失,恢复模型性能需要仔细考量量化方案,并且通常涉及量化感知训练(QAT)。子4位浮点和整数格式近期研究专注于开发比标准低位整数保留更多信息的专用数据类型。NormalFloat 4 (NF4)NF4随QLoRA技术一同推出,它是一种信息论意义上的最优数据类型,适用于遵循零均值正态分布的数据,这是预训练神经网络权重中观察到的一个常见特征。与标准整数均匀间隔的量化级别不同,NF4根据标准正态分布($N(0, 1)$)的分位数定义其离散值。核心思想是,如果权重呈正态分布,根据分位数设置量化级别可确保每个级别代表基础概率质量的相等比例。这种不对称、非均匀的映射旨在最小化正态分布数据的量化误差。NF4使用4位,表示$2^4 = 16$种可能的值。这些值是精心选择的分位数,并按被量化张量的绝对最大值(absmax)进行缩放,类似于其他分块量化方案。训练通常涉及在前向传播期间将NF4权重视为量化表示,同时可能使用更高精度进行梯度更新(正如QLoRA使用FP32备份副本所展示的)。浮点4 (FP4)FP4使用4位浮点格式表示数字。与NF4侧重于正态分布不同,FP4提供了一种通用的低位浮点表示。存在不同的配置,主要是权衡指数位(范围)和尾数位(精度):E2M1: 1位符号位,2位指数位,1位尾数位。提供更宽的范围,但精度非常粗糙。E1M2: 1位符号位,1位指数位,2位尾数位。提供更窄的范围,但在此范围内精度更细致。FP4的优势在于它与为低精度浮点运算设计的未来硬件扩展具有潜在兼容性。对于相同位宽,它比INT4提供更好的动态范围,这对于具有大异常值的激活或权重可能有所帮助,尽管其精度有限。与NF4类似,它通常依赖于分块缩放(例如,absmax),并且通常需要QAT以获得可接受的性能。其他子4位整数格式 (INT3, INT2)标准整数格式如INT3(8级)和INT2(4级)也可以研究。这些格式提供更简单、均匀的量化步骤,但当激进地应用于LLM时,通常比NF4或FP4等专用格式遭受更显著的精度损失。它们的实现方式直接,将值映射到$N$位(有符号对称)的$[ -2^{N-1}, 2^{N-1}-1 ]$或(无符号)的$[0, 2^N-1]$,通常带有缩放因子。取得良好结果通常需要复杂的校准或QAT,可能将量化重心放在不太敏感的层或使用混合精度方法。二值和三值网络将量化推向其绝对极限会产生二值和三值表示。二值神经网络 (BNN)BNN将权重($w$)有时也将激活值($a$)限制为仅两个值,通常是{-1, +1}或{0, 1}。权重: $w_b = \text{sign}(w)$,其中当$x \ge 0$时$\text{sign}(x) = +1$,否则为$-1$。激活值: 通常使用阈值以类似方式进行二值化。乘法操作变为简单的XNOR操作(对于{-1, +1})接着是位计数(popcount),这在硬件上可以非常快。挑战: 主要的障碍是训练。符号函数在几乎所有地方的梯度都为零,使得标准反向传播变得不可能。**直通估计器(STE)**是常用方法:在反向传播期间,梯度会通过符号函数,如同其是恒等函数一样($\frac{\partial \text{sign}(x)}{\partial x} \approx 1$,通常裁剪到$[-1, 1]$)。尽管实用,STE引入了梯度不匹配。使用BNN技术在LLM等复杂模型中保持精度非常困难,并且仍是一个活跃的研究方向,通常需要架构修改或专用训练方案。三值权重网络 (TWN)TWN使用三个值表示权重:{-W, 0, +W}或{-1, 0, 1}。这允许通过将接近零的权重表示为恰好为零来实现显式稀疏性,这可能优于二值表示。权重($w$)通常使用阈值($ \Delta $)进行三值化: $$w_t = \begin{cases} +W & \text{如果 } w > \Delta \ 0 & \text{如果 } |w| \le \Delta \ -W & \text{如果 } w < -\Delta \end{cases} $$ 缩放因子$W$和阈值$\Delta$通常是从层或块内的权重分布中学习或推导的。类似于BNN,训练依赖于STE或相关技术来处理不可微分的量化函数。尽管TWN比BNN提供更强的表达能力,但与4位或8位方法相比,它们在大型LLM上仍面临显著的精度挑战。实现与评估考量实现极致量化需要仔细关注:数据打包: 在标准数据类型中存储多个低位值(例如,将八个1位值打包到一个INT8中)。核实现: 标准深度学习库可能缺少针对子4位、二值或三值操作的优化核。性能提升常取决于自定义核(例如,CUDA、Triton)或专用硬件。量化粒度: 分块量化(将缩放因子应用于权重组)几乎总是保持动态范围所必需的。异常值处理: 极致量化对异常值高度敏感。PTQ中讨论的技术(裁剪、平滑)变得更加重要。QAT必要性: 获得合理性能通常要求QAT,以使模型在训练期间适应严格的限制。评估指标: 除了标准的困惑度或准确率,还要评估生成质量、连贯性,以及对语言理解特别敏感的下游任务的表现,因为这些能力通常是首先下降的。以下图表说明了模型准确率与每权重位数之间的普遍权衡。转向极低位宽通常会导致准确率急剧下降,需要更复杂的技术(如QAT或专用格式)来缓解损失。{"layout": {"title": "权衡:准确率 vs. 位宽", "xaxis": {"title": "每权重位数", "autorange": "reversed", "tickvals": [1, 2, 4, 8, 16, 32]}, "yaxis": {"title": "模型准确率", "range": [0, 1]}, "legend": {"yanchor": "bottom", "y": 0.01, "xanchor": "right", "x": 0.99}}, "data": [{"x": [32, 16, 8, 4, 2, 1], "y": [0.95, 0.945, 0.93, 0.90, 0.75, 0.60], "mode": "lines+markers", "name": "基础PTQ", "line": {"color": "#ff6b6b"}}, {"x": [32, 16, 8, 4, 3, 2], "y": [0.95, 0.948, 0.94, 0.925, 0.88, 0.82], "mode": "lines+markers", "name": "高级PTQ/QAT", "line": {"color": "#228be6"}}, {"x": [4], "y": [0.92], "mode": "markers", "name": "NF4/FP4 (带QAT)", "marker": {"symbol": "star", "size": 10, "color": "#12b886"}}, {"x": [1], "y": [0.65], "mode": "markers", "name": "二值 (带QAT)", "marker": {"symbol": "diamond", "size": 10, "color": "#f76707"}}]}量化位宽与潜在模型准确率的关系。较低的位宽能大幅降低模型大小,但会增加精度损失的风险。高级技术旨在将曲线向上和向左推动。极致量化技术代表了模型压缩研究的前沿。虽然NF4和FP4等方法展现出前景,尤其是在与QLoRA等QAT框架集成时,但在大型LLM中使用二值或三值表示实现性能仍是一个重大挑战。内存、速度和能耗方面的潜在益处是可观的,这推动了对新颖低位数据格式、训练算法和硬件协同设计的持续研究,以使极致量化模型的能力得以实现。对于实践者而言,这些技术需要深厚的专业知识和审慎的、针对具体任务的评估,以了解其真实效果。