本文档涵盖了 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_K、Q3_K_S/M/L、Q4_K_S/M、Q5_K_S/M、Q6_K)使用复杂的算法在相同的位宽下实现更好的质量。
IQ 系列:重要性矩阵量化方法(IQ1_S/M、IQ2_XXS/XS/S/M、IQ3_XXS/XS/S/M、IQ4_NL/XS)以更高的精度保留重要权重。
基本系列:传统的量化格式(Q4_0/1、Q5_0/1、Q8_0)提供简单的压缩。
三元系列:极度压缩的格式(TQ1_0、TQ2_0)使用三元表示。
量化过程在模型转换期间进行,涉及多个分析和压缩阶段
量化系统根据张量的特性应用不同的规则
F32 精度FFN_GATE_INP、POS_EMBD、TOKEN_TYPES 保持 F32TQ1_0 和 TQ2_0 等超低位格式,可能使用 F16来源: convert_hf_to_gguf.py287-365
直接量化转换:
后处理量化:
质量评估:
来源: Makefile35-36 README.md296-302
| 量化类型 | 每权重比特数 | 尺寸缩减 | 质量损失 | 用例 |
|---|---|---|---|---|
F32 | 32 | 1x(基线) | 无 | 研究,最高质量 |
F16 | 16 | 2 倍 | 最小 | 高质量部署 |
BF16 | 16 | 2 倍 | 最小 | 兼容训练 |
Q8_0 | 8 | 4 倍 | 非常低 | 以质量为中心的部署 |
Q6_K | 6 | 5.3x | 低 | 平衡质量/尺寸 |
Q5_K_M | 5 | 6.4x | 低至中等 | 推荐通用使用 |
Q4_K_M | 4 | 8 倍 | 中等 | 热门部署选择 |
Q3_K_M | 3 | 10.7x | 中高 | 积极压缩 |
Q2_K | 2 | 16 倍 | 高 | 极致压缩 |
IQ1_S | 1.5 | 21.3x | 非常高 | 最大压缩 |
高质量要求:使用 Q8_0 或 Q6_K 可实现最低质量损失和显着尺寸缩减。
平衡性能:使用 Q5_K_M 或 Q4_K_M 以在模型大小和准确性之间取得最佳平衡。
资源受限:在内存极其有限的情况下,使用 Q3_K_M 或 Q2_K。
实验性超压缩:在研究极致压缩极限时,使用 IQ 系列。
来源: convert_hf_to_gguf.py326-348 README.md64
量化系统通过几个关键组件与 GGML 后端集成
量化系统包含强大的错误处理功能,并支持自动回退
QuantError 时,自动回退到 F16该系统确保量化永不完全失败,即使无法应用最优量化,也能始终生成可用的模型。
来源: convert_hf_to_gguf.py350-356 gguf-py/gguf/gguf_writer.py1-500