Skip to content

模型量化

模型量化

  • 所谓“量化”,简单来说,就是降低模型大小来提高推理性能

  • 当然,大小降低的同时,精度也降低了

  • CLI中的 quantize 工具提供各种精度的量化

  • quantize

主要的量化方法

1.F16(原始浮点 16 位)

  • 这是最基础的格式,使用 16 位浮点数存储每个权重。它提供最高的精度,但也需要最大的存储空间和内存。想象成这是一张无损的高清照片,保留了所有细节,但文件较大。

2.Q4(4 位量化)系列:

  • Q4_0:最基础的 4 位量化方法。每个权重使用 4 位存储,外加一个缩放因子。这种方法内存占用最小,但可能在某些情况下影响模型性能。
  • Q4_1:在 Q4_0 的基础上增加了一个额外的偏置项,可以更好地处理权重分布的偏移。
  • Q4_K_M:使用 K-means 聚类的现代化 4 位量化方法。这种方法在保持模型性能和减小尺寸之间取得了很好的平衡,是目前最受欢迎的选择之一。
  • Q4_K_S:K-means 聚类的简化版本,牺牲一些性能来换取更快的量化速度。

3.Q5(5 位量化)系列:

  • Q5_0:基础的 5 位量化,比 Q4 系列提供更好的精度,但文件更大一些。
  • Q5_1:带偏置项的 5 位量化,适合需要较高精度但仍然要控制大小的场景。
  • Q5_K_M:使用 K-means 聚类的 5 位量化,是 Q4_K_M 的更精确版本。

4.Q2_K 和 Q3_K 系列:

  • 这些是更激进的压缩方法,分别使用 2 位和 3 位来存储权重。它们可以将模型大小压缩到极致,但可能会显著影响模型性能。
  • 这些方法适合在资源极其受限的环境中使用

实操

1.量化

./llama-quantize ./models/mymodel/ggml-model-f16.gguf ./models/mymodel/ggml-model-Q4_K_M.gguf Q4_K_M
  • 第一个路径参数: 输入文件路径

  • 第二个路径参数: 输出文件路径

  • 最后的参数:量化方法

  • Q4_K_M 是一种特定的量化方法

  • Q4:表示使用 4 位量化,这意味着每个权重值将使用 4 位来存储,而不是原来的 16 位,相比原来大大减少了内存占用

  • K:使用 K-means 聚类进行量化,这种方法可以更好地保持权重分布的特征,帮助保持数据的整体分布特征

  • M:代表"Modern",表示这是一个经过优化的现代版本的量化算法

2.更新 GGUF 版本

  • GGUF 格式偶尔会更新,可能会破坏与旧版本的兼容性。

  • 这就像是软件升级,当新版本发布时,你需要更新你的文件以保持兼容性

  • 因为新版本的运行时环境可能无法正确读取旧版本的文件
./llama-quantize ./models/mymodel/ggml-model-Q4_K_M.gguf ./models/mymodel/ggml-model-Q4_K_M-v2.gguf COPY
  • 而当你使用COPY参数时,llama-quantize 不会执行任何实际的量化操作,而是仅仅将模型文件转换为新的 GGUF 版本兼容的文件
本文阅读量  次
本站总访问量  次
Authors: wangshangjian