量化与压缩:把大模型塞进小显存

05-推理与工程 进阶 约 20 分钟 #量化#INT8#INT4#压缩#GGUF 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),量化方法建议对照 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 纪律)。

与其他知识点的关系

  • kp-016/023:QLoRA 与 KV 量化的组合场景。
  • kp-003/030:剪枝对象与稳健性对照。
  • kp-026:量化与分布式(低精度通信)的联动。

自测题

  1. 4bit 量化为什么"几乎无损"?其物理红利是什么?

答:权重近高斯分布集中+网络函数对微扰平滑——分组缩放的 4bit 近似误差极小且被网络容错吸收。

  1. 激活异常值为什么是量化的主敌?两种治理思路?

答:巨值通道绑架缩放因子使其余通道崩坏;治理=迁移到权重侧(SmoothQuant)或按激活重要性保护权重(AWQ)。

  1. 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 档位)。