量化与压缩:把大模型塞进小显存
本文基于模型知识整理(生成时未联网核对),量化方法建议对照 GPTQ/AWQ/QLoRA 原文复核。
一句话定义
量化把模型的 fp16 权重压到 INT8/INT4 甚至更低:用"分组缩放因子+整数"近似原权重——70B 模型从 140GB 压到 35GB(4bit)塞进单卡;现代 4bit 方法(GPTQ/AWQ)的 perplexity 损失可压到 1% 以内——"量化税"已低到几乎免费的程度上线。
为什么重要
显存是本地部署与推理成本的第一约束(kp-023 的显存账本):量化决定"哪些硬件能跑哪个模型"——消费级 4090 跑 70B(4bit)、手机跑 7B(GGUF)全靠它。理解量化的精度-显存权衡与"哪些层不能量化"的例外,是本地部署与成本优化的核心技能。
前置知识
kp-007(权重结构)、浮点表示(fp16/int8 的概念)。
核心概念
- 量化基本式:$x_q=\text{round}(x/s)$,s 为缩放因子(按组计算:per-channel/per-group 128);反量化 $x≈s·x_q$。组越小越准、元数据越多(group size 128 是常用折衷)。
- 方法谱系:
- PTQ 训练后量化:GPTQ(逐层用二阶信息最小化重建误差的校准量化)、AWQ(激活感知——按激活幅度保护重要权重通道)——不需要重训、几小时完成; - QAT 量化感知训练:训练中插入伪量化——精度最好但成本高(大模型时代用得少); - QLoRA:4bit 基座(NF4,信息论最优的 4bit 数据类型)+ bf16 LoRA——量化与微调的组合(kp-016 联动)。
- 精度的经验线(7B/70B 级 LLM):fp16 基线;int8 几乎无损;4bit(GPTQ/AWQ)损失 1% 量级;2bit 明显退化(除非 QQQL 等新法)。混合精度:敏感层(首尾层/embedding)保高精度、主体 4bit。
- GGUF/llama.cpp 生态:CPU/消费级 GPU 的量化推理标准(Q4_K_M 等混合精度档位命名);"本地跑 LLM"文化的基础设施。
- 其他压缩路线对照:剪枝(去冗余权重/头 kp-003)、蒸馏(小模型学大模型)、低秩分解(kp-030)——量化是其中"实现最简单、性价比最高"的默认第一步。
原理与机制
为什么 4bit 能几乎无损:LLM 权重分布近似高斯、且对"权重的微小扰动"天然鲁棒(训练本身就在噪声中收敛);4bit+分组缩放对高斯分布的量化误差极小,而网络的函数输出对这些小扰动有容错——"分布集中+函数平滑"是量化的物理红利。
激活异常值的挑战(int8 时代的主敌):LLM 的激活存在少数巨大异常通道(某些维度数值百倍于其他)——per-tensor 缩放会被异常值绑架导致其余通道精度崩坏;AWQ/ SmoothQuant 的思路都是"把激活的异常迁移/吸收到权重侧"再量化——异常值治理是量化方法论文的核心叙事。
KV Cache 也要量化(kp-023 联动):长上下文时 KV 是显存大头——8bit KV 几乎无损、4bit KV(KV 缓存量化)是长上下文部署的新战场。
图示
量化: x_q = round(x/s) ; 反量化 ≈ s·x_q
分组: per-group(128) 平衡精度与元数据
方法: PTQ(GPTQ二阶校准/AWQ激活感知) — 免重训
QAT(训练中伪量化) — 贵而准
QLoRA(4bit基座+bf16旁路) — 微调组合 kp-016
精度线: int8≈无损 | 4bit损失~1% | 2bit明显退化
异常值: 激活巨值绑架缩放 → SmoothQuant迁移/AWQ保护
直观类比
量化像"把高清照片转成高压缩 JPEG":好的压缩算法(分组+感知度)让人眼(下游任务)几乎看不出差别;异常值像"画面里的一盏强光灯"——不特殊处理会把整个对比度曲线拉爆(SmoothQuant 是"把强光灯的亮度匀到全图")。
实例或案例
- 4090 跑 70B:AWQ 4bit 约 35GB → 单卡 48GB 可跑——"消费级硬件跑旗舰模型"的标志事件。
- llama.cpp 生态:GGUF Q4_K_M 成为"本地模型"的默认交付格式——量化标准化的社区胜利。
- 手机端 3B 模型:4bit 约 2GB——端侧助手(kp-027 解码配合)。
常见误区
- 误区一:"量化只影响精度不影响速度"。int8/4bit 的算子实现(反量化开销、kernel 支持)决定是否真提速——包装层多的量化可能更慢(需对齐硬件内核)。
- 误区二:"所有层统一 4bit"。首尾层/embedding/注意力敏感位保高精度的混合策略才是实践标准;一刀切的损失超出预期。
- 误区三:"量化后模型能力不变,只是数值糙了"。长尾任务(代码/推理)对量化更敏感;基准 loss 掩盖任务级退化——上线前必须跑任务评测(kp-032 纪律)。
与其他知识点的关系
自测题
- 4bit 量化为什么"几乎无损"?其物理红利是什么?
答:权重近高斯分布集中+网络函数对微扰平滑——分组缩放的 4bit 近似误差极小且被网络容错吸收。
- 激活异常值为什么是量化的主敌?两种治理思路?
答:巨值通道绑架缩放因子使其余通道崩坏;治理=迁移到权重侧(SmoothQuant)或按激活重要性保护权重(AWQ)。
- QLoRA 的"4bit 基座+bf16 旁路"为什么能训练?
答:前向经量化基座(省显存),梯度经 bf16 LoRA 旁路精确更新——量化只省存储/前向,不污染旁路梯度。
延伸阅读
- Frantar 等, "GPTQ: Accurate Post-Training Quantization"(ICLR 2023)。
- Lin 等, "AWQ: Activation-aware Weight Quantization"(MLSys 2024)。
- Dettmers 等, "QLoRA"(2023)与 llama.cpp 文档(GGUF 档位)。