菜单

模型量化

相关源文件

本文档涵盖了 llama.cpp 中的量化技术、压缩级别和性能权衡。量化通过使用较低精度的数字表示来减小模型大小并提高推理速度,同时保持可接受的准确性。

有关模型从其他格式转换的信息,请参阅 模型转换。有关存储量化模型的 GGUF 文件格式的详细信息,请参阅 GGUF 文件格式

概述

llama.cpp 中的模型量化将神经网络权重从高精度格式(如 FP32 或 FP16)压缩到低精度格式,同时保留模型准确性。该系统支持从 1.5 位到 8 位整数表示的量化级别,能够显著减少内存使用量和计算需求。

量化系统在以 GGUF 格式存储的模型上运行,并提供多种针对不同用例优化的量化方案,从最大压缩到质量保持。

来源: README.md64 include/llama.h155-196

量化类型和格式

llama.cpp 支持在 llama_ftype 枚举中定义的所有量化格式。这些格式指定了模型权重如何被压缩

量化类型层级

关键量化系列

K-Quantization 系列:高级量化方案(Q2_KQ3_K_S/M/LQ4_K_S/MQ5_K_S/MQ6_K)使用复杂的算法在相同的位宽下实现更好的质量。

IQ 系列:重要性矩阵量化方法(IQ1_S/MIQ2_XXS/XS/S/MIQ3_XXS/XS/S/MIQ4_NL/XS)以更高的精度保留重要权重。

基本系列:传统的量化格式(Q4_0/1Q5_0/1Q8_0)提供简单的压缩。

三元系列:极度压缩的格式(TQ1_0TQ2_0)使用三元表示。

来源: include/llama.h155-196

量化过程

量化过程在模型转换期间进行,涉及多个分析和压缩阶段

模型量化工作流

特定于张量的量化规则

量化系统根据张量的特性应用不同的规则

  1. 1D 张量和归一化层:始终保持 F32 精度
  2. 特殊函数张量:某些张量类型,如 FFN_GATE_INPPOS_EMBDTOKEN_TYPES 保持 F32
  3. 嵌入和输出张量:对于 TQ1_0TQ2_0 等超低位格式,可能使用 F16
  4. 常规权重张量:应用指定的量化格式

来源: convert_hf_to_gguf.py287-365

工具和实用程序

核心量化工具

命令行用法

直接量化转换:

后处理量化:

质量评估:

来源: Makefile35-36 README.md296-302

性能权衡

内存和质量特性

量化类型每权重比特数尺寸缩减质量损失用例
F32321x(基线)研究,最高质量
F16162 倍最小高质量部署
BF16162 倍最小兼容训练
Q8_084 倍非常低以质量为中心的部署
Q6_K65.3x平衡质量/尺寸
Q5_K_M56.4x低至中等推荐通用使用
Q4_K_M48 倍中等热门部署选择
Q3_K_M310.7x中高积极压缩
Q2_K216 倍极致压缩
IQ1_S1.521.3x非常高最大压缩

量化选择指南

高质量要求:使用 Q8_0Q6_K 可实现最低质量损失和显着尺寸缩减。

平衡性能:使用 Q5_K_MQ4_K_M 以在模型大小和准确性之间取得最佳平衡。

资源受限:在内存极其有限的情况下,使用 Q3_K_MQ2_K

实验性超压缩:在研究极致压缩极限时,使用 IQ 系列。

来源: convert_hf_to_gguf.py326-348 README.md64

实现细节

量化引擎集成

量化系统通过几个关键组件与 GGML 后端集成

错误处理和回退

量化系统包含强大的错误处理功能,并支持自动回退

  1. 主要量化:尝试指定的量化格式
  2. 回退至 F16:在发生 QuantError 时,自动回退到 F16
  3. 日志记录:对量化决策和回退进行全面记录

该系统确保量化永不完全失败,即使无法应用最优量化,也能始终生成可用的模型。

来源: convert_hf_to_gguf.py350-356 gguf-py/gguf/gguf_writer.py1-500