重要提示:如需以 Markdown 形式查看本页,请在 URL 后追加 `.md`。 完整文档索引见 llms.txt
跳到主要内容
完整文档索引见 llms.txt。 在任意 URL 后追加 `.md` 即可查看该页面的 Markdown 版本。

LLM 量化

量化(quantization)是一种通过把模型权重和激活从高精度格式(如 FP32)转换成 低精度格式(如 INT8、INT4,甚至 INT2)来降低模型内存和计算需求的技术。

比特数越少,模型占用的内存就越低。例如:

  • 一个 7B 模型如果使用 FP32 格式,精度很高,但仅权重就需要 28 GB 内存。
  • 同一个模型如果使用 FP16,内存占用会减半。
  • 使用 INT8 或 INT4 这样的低精度格式,则可以进一步压缩模型,大幅缩小体积。

这些数字只计算了模型权重。运行时元素,如 attention cache、activations 和框架 开销,还需要额外内存。

为什么要使用量化

量化可以从三个主要方面帮助 LLM 推理:

  • 更小的模型占用。每个参数所使用的 bit 数,直接决定模型权重需要多少内存。 例如,一个 7B 模型的 FP16 权重大约需要 14 GB,而 INT8 权重大约只需 7 GB。 这可能决定了模型是能放进一张 GPU,还是必须分布到多张 GPU 或多个节点上。
  • 更少的数据搬运。LLM 的 decode 往往受限于 GPU 内存带宽,因为运行时在生成 token 时会反复读取模型权重。低精度权重意味着需要从 GPU memory 传送到计算单元的数据字节数更少, 因而可以降低单 token 延迟。
  • 更快的计算。GPU 和其他加速器通常能以比 FP32 或 FP16 更高的吞吐率处理所 支持的低精度格式。以 H100 SXM 为例, BF16/FP16 tensor cores 可达到 1,979 TFLOPS,而 FP8 和 INT8 可翻倍到 3,958 TFLOPS/TOPS,这正是位宽减半带来的干净 2 倍提升。实际加速效果仍取决于 硬件和推理运行时是否为所选格式提供了优化内核。

更小的权重占用还会给 KV cache 留出更多 GPU 内存,以支持更大的 batch 和更高的并发请求数。单独进行权重量化并不 会自动降低每个 token 的 KV cache 大小;如果想降低 KV cache,还需要单独对它做 量化。

这种精度与体积之间的权衡会带来一定的准确率下降。对于很多应用,上述收益只有 在生成结果仍然足够可靠、可用于生产时才有意义。例如,如果一个更快的模型明显生成更 差的回答,那么这种权衡通常并不值得。

好消息是,现代量化方法已经大幅缓和了这种权衡。像 GPTQ W4A16、AWQ,以及同时对 权重和激活进行 FP8 量化等技术,通常都能 几乎保持与原始模型相同的准确率, 同时显著提升推理效率。因此,很多生产部署都可以采用量化,而对模型质量几乎没有可感 知影响,甚至完全没有影响。

量化格式

不同量化格式在体积节省和准确率之间提供不同平衡。下面是一个快速指南:

格式相比 FP32 的大小精度下降用途内存占用备注
FP32100%训练全精度,但速度慢
FP1650%极小训练与推理大多数 LLM 的标准选择
FP825%训练与推理仍在发展中
INT825%推理综合权衡较好
INT412.5%中等推理很低需要 GPTQ/AWQ 等方法
INT26.25%少见/实验性极低准确率通常较差

使用下面的可视化工具可以查看这些权衡在你的模型规模下会如何体现。注意,对于 MoE 模型,这个计算器使用的是总存储参数量,而不是每个 token 实际激活的参数量。

量化对内存的影响(仅权重)
对比不同量化格式下的模型权重内存
快速预设:
模型参数
参数量(P)
说明:
这里显示的内存仅包含模型权重。实际占用通常会因为 KV 缓存、激活值 和框架额外开销而高得多。
不同格式下的权重内存
内存质量影响
FP32
32 GB
FP16 / BF16
16 GB极小
FP8 / INT8
8 GB
INT4
4 GB中等
INT2
2 GB

这个计算器估算的仅是权重内存。如果要估算总体需求,请使用 GPU memory calculator

应该量化什么

通常,你应该优先关注那些最占内存、同时又不会过度伤害性能的部分。

  • 模型权重是最常见的量化对象。它们比较稳定,并且对内存使用贡献最大。
  • Activations 也可以量化,但这更棘手,而且可能带来更多准确率损失。
  • KV cache 可以在运行时量化,以降低长上下文 serving 中的内存压力。这与权重量化 不同,因为 cache 是在推理过程中生成的,并且在 decode 时会被反复读取。主要 挑战在于如何保持注意力质量:在 key 和 value 向量以更少 bit 存储之后,模型仍 然需要准确的 key/query 相似度分数。

量化 vs 剪枝

量化并不是缩小模型的唯一方法。另一个相关技术是模型剪枝(pruning)。

剪枝会移除那些对模型输出贡献很小的参数。它们可以是单个权重、神经元、attention head,甚至整层。通过去除冗余组件,剪枝会得到一个更小、更稀疏的模型,从而降低计 算需求并加速推理。

在部署流水线中,剪枝和量化经常一起使用:

  1. 训练模型
  2. 剪去不那么重要的权重
  3. 对模型进行微调
  4. 对权重进行量化
  5. 部署推理

简单来说:

  • 量化减少的是表示每个权重所需的 bit 数。
  • 剪枝减少的是模型中的权重数量。

这两种技术的目标都是降低推理时的内存使用和计算成本。不过,在生产系统中,量化通常 更容易落地,因为现代硬件对低精度算术提供了很强的支持。

什么时候使用量化

如果满足以下情况,量化通常是一个好选择:

  • 你要部署到 GPU 内存有限的硬件上(例如 24GB 或更少)。
  • 你希望降低推理延迟。
  • 你需要降低服务成本。
  • 你希望支持更高并发。量化会降低每个 token 的 KV cache 大小,从而让更多 token (也因此让更多并行请求)装进同样的 GPU 内存。
  • 你可以接受小幅准确率权衡。

如果满足以下情况,量化可能不是一个好选择:

  • 你需要尽可能高的准确率(例如敏感或安全关键任务)。
  • 你的模型本来就很小(此时量化收益有限)。
  • 你的部署硬件不支持量化格式。

量化方法

为了在几乎不损失性能的前提下提高 LLM 效率,人们已经开发出多种高级量化技术。

下面介绍几种被广泛采用的量化方法:

AWQ

Activation-aware Weight Quantization (AWQ) 是专门为在边缘设备或资源受限设备上运行 LLM 而设计的。它的核心洞见是:并不是所 有权重对性能的贡献都一样。其开发者认为,只有大约 1% 的权重是“salient”的,量化 时需要额外照顾。因此,这种方法不是只看权重本身,而是基于激活分布,有选择地保护 最有影响力的权重。

从高层看,AWQ 会利用离线收集到的激活统计量,对重要权重通道施加一个等价变换并进 行缩放。

它非常适合用于部署在边缘场景或延迟敏感环境中的模型进行低比特量化。

SmoothQuant

SmoothQuant 是一种通用、无需训练的 post-training quantization(PTQ)方法,可实现权重和激活的高效 8-bit 量化(W8A8)。

量化权重相对直接,但量化激活要困难得多,因为其中的离群值会显著破坏准确率。 SmoothQuant 通过“平滑”这些激活离群值来解决这一问题。它会通过一个等价变换, 把量化难度从激活转移到权重。因此,它可以为 LLM 带来最高 2× 的内存缩减和最高 1.56× 的速度提升。

如果你希望获得以下特性,SmoothQuant 会是一个很好的选择:

  • 完整的 INT8 量化(权重和激活)
  • 无需重新训练即可获得较高硬件效率
  • 极小的准确率下降
  • 与大多数 transformer 模型即插即用兼容

它是一个兼顾准确率、性能和易用性的 turnkey solution,非常适合那些在规模化生产 场景中追求效率的需求。

GPTQ

GPTQ 是一种快速的 post-training quantization 方法,可在几乎不损失准确率的情况下,把大型 transformer 模型压缩 到每个权重 3–4 bit。它专门为扩展到数千亿参数模型而设计,并且无需重新训练。

亮点包括:

  • 具备大规模效率:可在约 4 个 GPU 小时内量化 OPT-175B 或 BLOOM-176B 这类模型。
  • 准确率损失很小:即便进行了激进压缩,也能保持较低 perplexity。
  • 极限量化:支持 2-bit 和 ternary 量化,并仍保有可用性能。
  • 可在单 GPU 上运行超大模型:支持在单张 A100 或两张 A6000 上推理 175B 模型。
  • 性能提升:自定义 GPU kernel 可带来约 3.25× 相比 FP16 的加速。

GPTQ 在开源模型服务流水线中被广泛采用,尤其是结合 AutoGPTQ 时。对于追求高速、 低内存的大模型推理,它是一个常见首选。


许多 现代推理框架 不仅能高效服务量化模型,还提供内置 API 或工具来执行量化。在其他场景中,模型也可 以先用专门工具离线量化,再由 serving framework 直接加载。因此,大多数用户已经 不再需要自己实现量化算法。

很多时候,你可以直接从 Hugging Face 上已经量化好的模型开始。它托管了许多预量化变体,例如 8-bit 和 4-bit 模型,这些 模型已为更低内存占用和更快部署做了优化,可直接用于推理。与此同时,如果你想采用自 己的量化策略,它也提供全精度的 base model。