图解量化:大语言模型压缩核心技术详解

为什么大语言模型需要量化
随着大语言模型(LLM)参数规模的不断膨胀,从数十亿到数千亿参数,模型的存储与推理成本也水涨船高。一个拥有 700 亿参数的模型,若使用 32 位浮点数(FP32)存储,仅权重就需要约 280GB 的内存——这远远超出了绝大多数消费级乃至专业级 GPU 的显存容量。
更重要的是,大模型推理的性能瓶颈往往不在于计算能力,而在于内存带宽。自回归生成过程中,每生成一个 token 都需要从显存中加载全部模型权重,这使得推理过程严重受限于显存带宽(memory-bandwidth bound)。这一现象可以用计算机体系结构中的"屋顶线模型"(Roofline Model)来解释:当任务的"算术强度"(每字节数据对应的浮点运算次数)较低时,性能完全由内存带宽决定。自回归生成时每个 token 仅涉及矩阵-向量乘法(而非训练时的矩阵-矩阵乘法),算术强度极低,因此几乎完全受限于从 HBM(高带宽显存)读取权重的速度。以 NVIDIA A100 为例,其显存带宽为 2TB/s,加载一个 280GB 的 FP32 模型就需要约 140ms——仅权重加载就决定了每秒最多生成约 7 个 token。这也解释了为什么批处理(batching)能提升吞吐量——多个请求共享同一次权重加载,有效提高了算术强度。因此,减小模型体积不仅是省空间,更是直接提升推理速度的关键。
量化(Quantization)正是为解决这一矛盾而生的核心技术。它的基本思想非常直观:用更低精度的数值表示来存储和计算模型参数,从而在可接受的精度损失范围内,大幅降低内存占用与计算开销。可以说,量化是让大模型能够"跑起来"、"跑得起"的关键工程手段之一。

什么是量化:从高精度到低精度的映射
数值精度的本质
在深度学习中,模型的权重通常以浮点数形式存储。要理解量化,首先需要理解这些数值格式的内部结构。根据 IEEE 754 标准(制定于1985年,是浮点数运算的国际标准),浮点数由三部分组成:符号位(正负)、指数位(决定数值范围)和尾数位(决定精度)。常见的精度格式包括:
- FP32(32位浮点):1位符号 + 8位指数 + 23位尾数,标准精度,每个参数占用 4 字节。拥有极高的数值精度和约 ±3.4×10³⁸ 的动态范围。
- FP16(16位浮点):1位符号 + 5位指数 + 10位尾数,半精度,每个参数占用 2 字节。动态范围较小(约 ±65504),在训练大模型时容易出现数值溢出。
- BF16(Brain Floating Point 16):1位符号 + 8位指数 + 7位尾数,由 Google Brain 团队于2018年为 TPU 设计提出。它保留了与 FP32 相同的指数位宽(因此动态范围一致),但牺牲了尾数精度。这使得 BF16 特别适合深度学习训练,因为神经网络对动态范围的需求远大于对精度的需求。其核心洞察在于训练中梯度的量级变化极大,需要大动态范围来避免溢出和下溢,但对尾数精度有较高容忍度。
- FP8(8位浮点):NVIDIA 在 H100 GPU 中引入的新格式,包括 E4M3(4位指数+3位尾数,适合前向传播)和 E5M2(5位指数+2位尾数,适合反向传播)两种变体,代表了硬件与算法协同设计的最新趋势。
- INT8(8位整数):每个参数仅占用 1 字节,可表示 256 个离散值
- INT4(4位整数):每个参数仅占用 0.5 字节,可表示 16 个离散值
量化的核心,就是将高精度的浮点数值"映射"到低精度的表示空间。例如从 FP32 降到 INT8,理论上可以将模型体积压缩到原来的四分之一,而降到 INT4 则可压缩到八分之一。
量化映射的数学原理
量化的关键在于如何把连续的浮点数范围映射到离散的整数范围。这一过程通常依赖两个参数:缩放因子(scale) 和 零点(zero-point)。
以对称量化为例,我们首先确定权重的取值范围(最大绝对值),然后计算一个缩放因子,将浮点值线性映射到整数区间(如 INT8 的 -127 到 127)。具体公式为:
q = round(x / s)
其中 x 是原始浮点值,s 是缩放因子(s = max(|x|) / 127),q 是量化后的整数值。反量化时通过 x̂ = q × s 还原近似的浮点值。
这种映射不可避免地带来精度损失——本质上是一种量化噪声。从信号处理的角度看,均匀量化引入的误差近似服从均匀分布,其方差为 Δ²/12(Δ为量化步长)。量化步长越大(即比特数越低),噪声越大。
在实际应用中,量化的粒度对精度有显著影响。常见的粒度选择包括:
- 逐张量量化(per-tensor):整个权重矩阵共享一个 scale,实现最简单但精度最差
- 逐通道量化(per-channel):每个输出通道使用独立的 scale,大幅提升精度
- 分组量化(per-group):将通道进一步细分为固定大小的组(如 128 个元素一组),每组独立量化,是当前 INT4 量化的主流选择
粒度越细,scale 能够更好地适应局部数值分布,量化误差越小,但额外存储 scale 参数的开销也越大。当前主流的 4-bit 量化方案(如 GPTQ、AWQ)普遍采用 group size=128 的分组量化策略。
主流量化方法全面解析
对称量化与非对称量化的区别
对称量化假设数值分布以零为中心对称,映射时零点固定为 0。它计算简单、效率高,但当数据分布不对称时会浪费部分表示空间。例如,如果权重分布在 [-1, 10] 之间,对称量化会以 [-10, 10] 为映射范围,导致负数区间大量浪费。
非对称量化则允许零点偏移,能够更精确地覆盖实际的数值分布范围,代价是计算稍复杂(矩阵乘法中需要额外处理零点偏移项)。在实践中,权重往往近似对称分布、适合对称量化,而激活值(activations)由于经过 ReLU 等非线性函数后分布偏移(往往集中在正数区域),更适合非对称量化。
训练后量化(PTQ):低成本快速部署
训练后量化是目前最常用的量化方式,它在模型训练完成后直接对权重进行量化,无需重新训练。PTQ 的优势在于成本低、实施快,适合快速部署。代表性方法包括:
GPTQ:基于二阶信息的高效逐层量化
GPTQ(2022年)是当前最具影响力的 PTQ 方法之一。它的技术渊源可以追溯到经典的神经网络剪枝理论:最优脑损伤(Optimal Brain Damage, OBD, 1989)由 Yann LeCun 提出,首次将海森矩阵引入网络压缩领域,利用海森矩阵对角线近似来评估权重重要性;最优脑手术(Optimal Brain Surgeon, OBS, 1993)进一步考虑了权重之间的相关性,使用完整的海森矩阵逆来在剪枝后最优地调整剩余权重。海森矩阵描述了损失函数关于权重的二阶导数,直观上反映了每个权重对模型输出的"敏感度"——二阶导数越大的权重,被扰动时对输出的影响越剧烈。
GPTQ 将 OBS 的框架从剪枝扩展到量化:当一个权重被量化(引入误差)后,利用海森矩阵的逆来最优地调整同一行中尚未量化的权重,从而补偿量化误差。其突破性贡献在于将这个原本 O(n³) 复杂度的问题通过巧妙的分块 Cholesky 分解降低到实际可行的水平,并发现按任意固定顺序(而非贪心选择最优顺序)处理权重列对最终精度影响极小——这一发现使得算法可以高度并行化,在单张 GPU 上数小时内完成百亿参数模型的量化。
AWQ:激活感知的权重量化
AWQ(Activation-aware Weight Quantization, 2023)提出了一个看似反直觉但极为有效的洞察:保护权重中 1% 的显著通道不被量化,就能大幅降低整体量化损失。这里的"显著"不是看权重本身的绝对值大小,而是看对应输入激活值的大小——如果某个输入通道的激活值很大,那么该通道对应的权重即使数值很小,量化误差也会被放大传播。
然而,直接保留部分权重为高精度会造成硬件上的混合精度低效。AWQ 的精妙之处在于找到了一种等效变换:通过对显著通道的权重乘以一个大于 1 的缩放因子(同时对输入除以相同因子以保持数学等价),使得这些权重的相对量化误差显著降低。这种方法在不引入任何混合精度开销的前提下,实现了接近混合精度保护的效果。
这些方法通过巧妙的校准策略,在 INT4 精度下仍能保持较好的模型表现。
量化感知训练(QAT):高精度保障
量化感知训练在训练过程中就模拟量化带来的误差,让模型"提前适应"低精度环境。具体实现中,前向传播时插入"伪量化"节点(fake quantization),模拟量化-反量化过程引入的噪声;反向传播时由于取整操作不可微分,通常使用直通估计器(Straight-Through Estimator, STE)来近似梯度,即将量化节点的梯度直接传递给前一层。
STE 最早由 Hinton 在2012年的课程讲义中提出,后由 Bengio 等人在2013年正式分析其理论性质。量化中的取整函数在数学上几乎处处导数为零(在整数点处不可微),标准反向传播完全失效。STE 的做法本质上是在反向传播时"假装"量化操作不存在,虽然理论上这是一种有偏估计,但实践证明在适当的学习率下网络仍能有效收敛。近年来也涌现了更精确的替代方案,如可学习量化步长(Learned Step Size Quantization, LSQ)允许梯度同时优化量化步长本身,进一步提升了 QAT 的效果。
相比 PTQ,QAT 通常能获得更高的精度,尤其在极低比特(如 INT4 甚至更低)场景下优势明显。但它需要重新训练模型,计算成本高昂(通常需要原始训练 1-10% 的计算量),因此更多用于对精度要求苛刻的场景。近期,Meta 发布的 SpinQuant 和 Qualcomm 的 QuIP# 等方法尝试结合旋转变换与 QAT 思想,在极低比特下取得了令人瞩目的效果。
量化面临的核心挑战
异常值问题及解决方案
大模型量化中一个棘手的问题是异常值(outliers)。研究发现,LLM 的激活值中存在少量数值极大的"异常特征",它们会显著拉大数值范围,导致量化精度急剧下降。
这些异常值并非随机出现,而是有其结构性成因。研究表明(Dettmers et al., 2022),在 Transformer 模型中,特定的隐藏维度会在所有 token 和所有层中持续出现异常大的激活值,且模型规模越大(超过 6.7B 参数),这种现象越显著。其根本原因与 Transformer 的残差连接结构密切相关:在标准 Transformer 中,每一层的输出通过残差连接与输入相加(x_{l+1} = x_l + f_l(x_l)),经过数十层的累积,某些隐藏维度的数值会持续增长。进一步研究发现,这些异常维度与 LayerNorm 的学习偏置有关——模型学会利用少数几个维度来编码"全局信息"(如序列长度、注意力分布的锐度等),这些维度承担了类似"记忆寄存器"的功能。在 OPT-175B 等大模型中,异常值可达正常值的 100 倍以上,仅占维度的 0.1% 却对模型输出有决定性影响。
为此,业界提出了多种解决方案:
-
LLM.int8()(Dettmers et al., 2022):采用混合精度分解策略——通过阈值检测识别异常维度(通常仅占 0.1%),对这些维度保留 FP16 精度计算,其余使用 INT8 量化。虽然引入了额外的分支逻辑,但在 175B 参数模型上实现了几乎无损的 INT8 推理。
-
SmoothQuant(Xiao et al., 2023):提出了一种更优雅的思路——既然异常值出现在激活中而非权重中,那就通过一个数学等价的缩放变换,将激活中的量化难度"迁移"到权重上。具体做法是引入一个逐通道的平滑因子,除以激活的逐通道最大值、乘以权重的对应值,使得变换后的激活分布更平滑,更易于量化。这种方法避免了混合精度的硬件低效问题。
-
QuaRot(2024):通过对权重和激活施加随机正交旋转变换,将异常值的能量"分散"到所有维度上,从根本上消除异常值问题。其数学依据是:正交变换保持向量的 L2 范数不变,但会将集中在少数维度上的大数值均匀分散到所有维度,使得量化后的最大误差大幅降低。
精度与效率的权衡取舍
量化本质上是一场精度与效率的博弈。比特数越低,模型越小、推理越快,但精度损失也越大。当前的研究趋势表明:
- INT8 量化:几乎可以做到无损,是最稳妥的选择。即使使用简单的逐通道对称量化,精度下降也通常在 0.1% 以内。
- INT4 量化:配合 GPTQ、AWQ 等先进算法后能保持可用性,困惑度(perplexity)增加通常在 0.5-1.0 之间。这是当前社区最主流的部署精度。
- INT3 量化:处于可用性边界,需要配合分组量化和先进算法,在某些任务上可能出现明显退化。
- INT2 / INT1(二值化):仍处于探索阶段,精度损失往往难以接受。近期 BitNet(微软,2024)等工作代表了一种根本性的思路转变:与其将训练好的高精度模型量化到低比特(不可避免引入误差),不如从一开始就在低比特约束下训练模型。BitNet b1.58 使用三值权重 {-1, 0, 1},将矩阵乘法简化为加减法,理论上完全消除了乘法器的需求。实验表明,从头训练的 1.58-bit 模型在 3B 参数规模上能匹配 FP16 模型的困惑度,同时将能耗降低 71 倍、推理速度提升 8 倍。然而,这种方法需要完整的预训练过程,无法直接应用于已有模型,且目前尚缺乏针对性的硬件支持,展示了一条全新但尚需基础设施配合的路径。
量化的实际应用价值
量化技术的意义远不止于"省显存"。它让原本只能在数据中心运行的大模型,能够部署到消费级显卡、边缘设备乃至手机上,极大地拓展了大模型的应用边界。同时,更小的模型体积也意味着更低的推理延迟、更少的能耗和更低的运营成本。
当前,量化技术已经形成了相当成熟的工具链和生态系统:
- llama.cpp:由 Georgi Gerganov 开发的纯 C/C++ 推理框架,支持在 CPU 上高效运行量化后的 LLM。它定义了 GGUF 格式(GPT-Generated Unified Format),这是2023年推出的自包含模型存储格式,单个文件包含了模型权重、分词器、超参数等所有推理所需信息,并通过键值对元数据系统支持未来扩展。GGUF 支持从 Q2 到 Q8 的多种量化精度,包括传统的对称量化(Q4_0、Q8_0)和使用超级块(super-block)结构的高级量化方案(Q4_K_M、Q5_K_S 等),后者通过多级缩放因子在同等比特数下实现更高精度。llama.cpp 生态还催生了 Ollama、LM Studio 等用户友好的桌面应用,使非技术用户也能一键运行本地大模型,已成为本地部署大模型的事实标准。
- vLLM:专注于高吞吐量 GPU 推理的框架,支持 GPTQ、AWQ 等量化模型的高效服务化部署,配合 PagedAttention 等技术实现了极高的并发性能。
- TensorRT-LLM(NVIDIA):深度优化的 GPU 推理引擎,支持 INT8/INT4/FP8 量化,并通过算子融合和 CUDA kernel 优化实现最优硬件利用率。
- Hugging Face Transformers:通过
bitsandbytes、auto-gptq、autoawq等库的集成,用户仅需一行代码(如load_in_4bit=True)即可加载量化模型。
在模型分发层面,Hugging Face 上 TheBloke(Tom Jobbins)等社区贡献者已为数千个模型提供了预量化版本,涵盖 GPTQ、AWQ、GGUF 等多种格式,极大降低了普通用户的使用门槛。
可以预见,随着量化算法的持续演进,未来的大模型将在保持强大能力的同时变得越来越"轻量"。特别是 FP8 格式已被 NVIDIA H100/H200 GPU 原生支持,有望成为下一代训练和推理的标准精度;而在端侧部署方面,苹果、高通等芯片厂商也在 NPU 中加入了 INT4 推理的硬件支持。对于开发者和研究者而言,理解量化的原理与权衡,已经成为高效应用大模型不可或缺的基础功课。
总结
量化技术看似复杂,实则遵循着清晰的逻辑:通过降低数值精度换取存储与计算效率,同时借助各种巧妙的算法策略将精度损失控制在可接受范围内。从对称量化与非对称量化的选择,到 PTQ 与 QAT 的方法对比,再到应对异常值的混合精度方案,每一步都是工程与研究智慧的结晶。对于希望在有限资源下部署大模型的人来说,掌握量化技术,就是掌握了让 AI 走向普及的钥匙。
相关推荐

机器学习研究入门:必读论文清单与研究实习申请路径
为ML初学者整理从零到研究实习的完整路径,包括必读经典论文清单(AlexNet、ResNet、Transformer等)、论文阅读方法、复现技巧及研究实习申请的实用建议。

Claude Code 入门实战教程:安装配置到自动化开发完整指南
详解Claude Code从环境搭建、权限配置、Go目标自主循环、Skills技能系统、MCP协议集成到版本控制的完整开发流程,帮助开发者快速掌握AI编程自动化工具。

Gemini 3.7 Flash发布与GPT-5.6极速模式:AI开源迈向生态时代
谷歌发布Gemini 3.7 Flash专注编程与Agent优化,OpenAI推出GPT-5.6 Ultra-Fast模式实现14倍速度提升。AI开源从开放模型转向开放生态,Agent工具链与成本监控工具密集涌现,智能体工作流进入实用化阶段。