Serving · 面试核心

大模型量化详解

把 FP16/BF16 的权重压成 INT8/INT4,是让大模型「跑得动、跑得便宜」的头号手段。面试官爱问:量化到底省了什么?精度掉了怎么办?GPTQ 和 AWQ 差在哪?

01为什么要量化

模型显存 ≈ 参数量 × 每参数字节数。精度越低,单卡能塞下的模型越大:

7B 模型在不同精度下的显存占用(仅权重,不含 KV/激活) FP3228 GB4 字节 FP16/BF1614 GB2 字节 INT87 GB1 字节 INT43.5 GB0.5 字节 结论:FP16→INT4 把权重显存降到 1/4,原本要两张 24G 卡跑的 7B,单张 8G 卡也能跑。
量化不仅省显存,还省带宽:低精度权重从显存搬到计算单元更快,间接提升 Decode 吞吐(呼应《推理部署总览》的带宽瓶颈)。

02精度格式谱系

FP32 / FP16

训练常用;FP16 易溢出的问题靠 loss scaling 或改用 BF16。

BF16

指数位与 FP32 相同,动态范围大、不易溢出,A100/H100 推理默认选。

FP8 (E4M3/E5M2)

H100 原生支持,精度损失小,是新一代推理加速主力。

INT8

典型「训练后量化」目标,精度损失较小,成熟稳定。

INT4 / NF4

4-bit,显存骤降,QLoRA 用 NF4 装下 65B;需小心精度。

INT2 / 1.58-bit

极限探索(BitNet),研究阶段,工程少见。

量化本质是用更少的 bit 表示同一个数:量化值 = round(实数 / scale) + zero_point,反量化时 实数 ≈ 量化值 × scale。核心难点是选好 scale,避免把重要的大数值「压爆」。

03PTQ vs QAT

PTQ(训练后量化)

模型训好后直接量化,只需少量校准数据(几百条)统计激活分布来定 scale。零训练、快、最常用。

QAT(量化感知训练)

训练时就插入伪量化节点,让模型「提前适应」量化误差,精度更好但要重训、成本高。

面试常问区别:PTQ 不碰梯度、上线快;QAT 精度高但贵。实际 90% 场景用 PTQ(GPTQ/AWQ/GGUF 都属 PTQ 家族)。

04量化对象:权重 / 激活 / KV

不是所有张量都该量化,三者影响不同:

W(权重)

静态、占显存大头,量化收益最大,最常被量化。

A(激活)

动态、逐 token 变化,量化难、易掉点,常用 per-token 动态量化。

KV(缓存)

长上下文下显存爆炸,KV Cache 量化(INT8/INT4)是省显存利器。

组合上常见的有 W4A16(权重 4bit、激活 16bit,QLoRA/GPTQ 常用)、W8A8(更稳)、W4A4(激进、研究向)。

05GPTQ 与 AWQ

GPTQ

逐层、逐列量化,用「最小化重构误差」的二阶信息补偿,量化慢但精度好,是 4-bit 事实标准之一。

AWQ(激活感知)

观察到「少量显著权重」对精度影响巨大,只保护这些权重不量化、其余均匀量化。快、硬件友好,效果常优于 GPTQ。

一句话区分:GPTQ 靠「误差补偿」修精度,AWQ 靠「保护重要权重」保精度。两者都是 PTQ、都做 4-bit,AWQ 更偏工程部署友好。

06GGUF 与 llama.cpp

GGUF 是 llama.cpp 生态的模型文件格式,内置量化信息、元数据、分词器,可在 CPU / Apple 芯片 / 各种卡上原地运行。配合 q4_K_M 等量化等级,是本地部署(笔记本跑 7B/13B)最流行的方案。

  • 优势:单文件、跨平台、对消费级硬件极友好。
  • 常见档位:q4_0 / q4_K_M / q5_K_M / q8_0,数字越大越准越占空间。

07量化与部署权衡

三角权衡:精度 ↔ 显存/速度 ↔ 硬件支持 精度高 省显存/快 硬件通用 越往某角,另两边越难兼顾
  • 追求质量:BF16 / FP8,上大显存卡。
  • 追求省钱/本地:INT4(AWQ/GPTQ 或 GGUF q4)。
  • 追求吞吐:FP8 在 H100 上往往比 INT4 更香(硬件原生、不掉点)。
别盲信「4-bit 不掉点」:小模型、数学/推理密集任务对量化更敏感,上线前务必在真实任务上测精度。

08面试速记卡

量化省什么?

显存(权重×字节)+ 带宽(搬得快),直接决定能上什么硬件。

PTQ / QAT

PTQ 免训练、上线快(主流);QAT 精度高、要重训。

W/A/KV

权重最该量化;激活动态量化;KV 量化救长上下文。

GPTQ vs AWQ

误差补偿 vs 保护重要权重;都是 4-bit PTQ。