模型量化推理加速 可视化实验室
用交互式 SVG 呈现 INT4/INT8 量化、GPTQ、AWQ、GGUF、KV-Cache 量化等大模型部署核心技术。八个模块,纯原生实现。
量化基础 · FP32 → INT8 映射
FP32 浮点张量如何映射到 INT8 整数。对称量化以零为中心,非对称量化引入 zero-point 偏移。拖动滑块改变真实值,观察 scale、zero-point 与量化误差。
量化公式
对称量化:q = round(x / scale),范围 [-127, 127]。非对称量化:q = round(x / scale + zero_point),范围 [0, 255]。拖动滑块或切换模式查看映射。
GPTQ · 二阶 Hessian 逐层量化
GPTQ 利用 Hessian 矩阵的逆,逐列量化权重并补偿误差到剩余列。OBITS 控制目标位宽。播放动画观察误差补偿的层层传递过程。
GPTQ 算法步骤
GPTQ 基于 OBQ(Optimal Brain Quantization),将二阶信息压缩为逐列更新:量化第 j 列后,把量化误差 Δ = ŵ_j − w_j 按 H⁻¹ 反向补偿到未量化列,从而最小化整体输出误差。
AWQ · 激活感知权重保护
AWQ 发现仅约 1% 的“显著通道”对激活影响最大。通过对这些通道的权重等比缩放,降低其量化误差。调节保护比例,观察显著通道与缩放因子的变化。
AWQ 缩放原理
对显著权重通道乘以缩放因子 s(s>1),使量化前的有效幅度增大,从而相对降低量化误差;推理时对应激活除以 s 还原。等比例缩放保持了原模型的数值关系。
GGUF 格式 · llama.cpp 量化块
GGUF 采用分块量化策略:Q4_K_M / Q5_K_S / Q8_0 等使用不同位宽与分组结构。切换格式观察块结构与内存占用的差异。
GGUF 量化格式对比
Q4_K_M:32 权重共用一组 scale,部分用 6-bit 提升关键层;Q5_K_S:5-bit 主块 + 4-bit 备份;Q8_0:8-bit 块量化,几乎无损。K-quant 通过混合位宽在精度与体积间取得平衡。
K-V Cache 量化 · 注意力压缩
长上下文推理中 K-V Cache 是显存瓶颈。INT8/INT4 量化可大幅压缩,但会引入注意力分数误差。调节位宽观察显存节省与精度损失。
K-V Cache 量化影响
K-V Cache 按 head 分组量化通常优于整体量化;Key 对量化更敏感(因 softmax 放大),常保留更高精度。INT8 cache 几乎无损,INT4 长序列注意力分数会出现偏差。
混合精度 · 敏感层检测
不同层对量化敏感度不同。通过逐层 PPL 扰动检测,对敏感层保留高精度,对不敏感层激进量化。调节阈值观察逐层量化策略的变化。
敏感度检测策略
对每层在固定种子下做 INT4 量化,测量验证集 PPL 变化 Δ。Δ 超过阈值则判定为敏感层。常见规律:首尾层、attention 投影层更敏感;FFN 中间层不敏感。
量化误差 · PPL 曲线对比
不同位宽与量化方法对困惑度(PPL)的影响。RTN 简单截断误差大;GPTQ/AWQ 通过补偿显著降低误差。拖动 bits 滑块查看 PPL 演化。
PPL 与位宽关系
PPL 随 bit 数下降而上升。4-bit 是关键拐点:RTN 在 4-bit 以下 PPL 急剧恶化;GPTQ 与 AWQ 在 3-bit 仍能保持接近 FP16 的 PPL。2-bit 几乎所有方法都崩溃。
端侧部署 · 推理延迟对比
移动端、TFLite、ONNX Runtime 在不同量化策略下的推理延迟。调节模型规模,对比 INT8 量化带来的加速比与内存下降。
端侧推理加速
移动 NPU 对 INT8 有专门加速单元,INT8 量化可获得 2-4× 加速。INT4 在多数移动硬件上无原生支持,需 dequantize 后计算,加速有限。ONNX Runtime 提供跨平台 INT8 算子。