为什么需要模型压缩

大语言模型参数量从70亿到数千亿不等,直接部署成本极高。模型压缩技术可以在保持模型能力的同时,显著降低存储、内存和计算需求,使LLM在消费级硬件上也能运行。

量化技术

量化是将模型权重和激活值从高精度浮点数(如FP16)降低到低精度表示(如INT8、INT4)的过程。

量化方法

训练后量化(PTQ): - 无需重新训练,直接在已有模型上应用 - GPTQ:基于最优量化理论的逐层量化算法 - AWQ:激活感知的权重量化,效果优于GPTQ - GGUF:llama.cpp社区标准,支持多种量化级别

量化感知训练(QAT): - 在训练过程中模拟量化效果 - 精度损失更小,但需要训练数据和时间

量化级别对比

精度 模型大小(7B) 推理速度 质量损失
FP16 ~14GB 1x
INT8 ~7GB 1.5-2x 极小
INT4 ~3.5GB 2-3x 轻微
INT2 ~1.8GB 3-4x 明显

工具推荐

  • AutoGPTQ:GPTQ量化的流行实现
  • AutoAWQ:AWQ量化工具,速度更快
  • llama.cpp:支持多种量化级别,社区活跃
  • bitsandbytes:HuggingFace生态的量化库

知识蒸馏

知识蒸馏是用一个小模型(学生)学习大模型(教师)的行为模式。

蒸馏方式

黑盒蒸馏: - 只使用教师模型的输出(logits或文本) - 不需要访问教师模型内部结构 - 适合从闭源API模型蒸馏

白盒蒸馏: - 利用教师模型的中间层表示 - 效果通常更好,但需要访问模型参数

蒸馏策略

  1. 数据生成:使用教师模型生成训练数据
  2. 分布匹配:让学生模型匹配教师模型的输出分布
  3. 任务蒸馏:针对特定任务进行蒸馏
  4. 渐进式蒸馏:逐步缩小模型尺寸

结构化剪枝

剪枝是移除模型中不重要参数的技术。

剪枝类型

  • 非结构化剪枝:移除单个权重,稀疏度高但硬件加速困难
  • 结构化剪枝:移除整个神经元或注意力头,可直接获得推理加速

SparseGPT

利用二阶优化信息进行一次性剪枝,无需微调即可在保持高稀疏度的同时控制质量损失。

Wanda

更轻量的剪枝方法,基于权重和激活值的乘积进行重要性评估。

压缩策略组合

实际部署中,通常组合使用多种压缩技术:

  1. 先蒸馏:从大模型蒸馏到中等模型
  2. 再量化:对蒸馏后的模型进行量化
  3. 可选剪枝:对特定层进行结构化剪枝

例如,将LLaMA-70B通过多轮压缩,可以部署在单张消费级显卡上。压缩后的模型质量仍能满足大多数应用场景的需求。