把大模型做成更小的 GGUF 文件,llama.cpp 的量化工具怎样取舍

开源项目猫目发布于 来源:llama.cpp 官方资料
先转换高精度权重,再选择量化类型;文件变小不等于完全不损失质量,多模态组件还要另外处理。
把大模型做成更小的 GGUF 文件,llama.cpp 的量化工具怎样取舍

为什么值得关注

为本地部署准备可辨认的量化模型产物,理解文件体积、运行资源与质量之间的关系。

适合谁:希望自行准备GGUF权重、研究本地模型部署的开发者

这次有哪些亮点

  • 转换格式与量化是两个步骤
  • 多模态模型另有mmproj文件,不能只保留语言模型权重

使用前需要知道

量化可能损失质量,重复量化尤其需谨慎;构建时仍需存储高精度及中间文件,代码MIT不覆盖所用模型权重许可。

看到同一款模型有十几种 GGUF 文件,最容易只按体积挑最小的。llama.cpp 的量化工具说明提供了更有用的判断线:文件怎样从高精度权重产生,哪些部分可以压缩,以及压缩后需要付出什么代价。

这篇适合希望自己准备本地模型的开发者。要得到的成果,是一份来源、转换方式和量化类型都清楚的文件,而不是给任意模型贴上“低配电脑都能跑”的标签。

转格式与降精度,分成两步

官方工具文档先用 convert_hf_to_gguf.py 把原始模型转成高精度 GGUF,再用 llama-quantize 生成 Q4_K_M 等量化版本。输入文件、输出文件与类型在命令中分别写出。

GGUF 是文件组织形式,量化则改变权重精度。已有一个 GGUF 文件,不代表它已经是小体积版本;看到 Q4 一类名称,也不应把它当成另一款重新训练的模型。

官方示例为 Gemma 模型生成 bf16 文件,再输出 Q4_K_M。它说明流程,不是本文完成的转换。换成自己的模型时,还要确认转换脚本支持其结构,并保留具体来源版本,才有条件比较不同产物。

少一些精度,换来什么

量化能缩小权重文件,并可能改善推理资源需求,但会引入质量损失。文档用困惑度等指标讨论这种变化;真正的目标任务仍需要单独检查,不能用一种量化类型替所有模型作结论。

工具还有 allow-requantize 开关。它允许再次处理已经量化过的张量,却明确提示可能比从16位或32位来源开始明显降低质量。因此,想再小一点时,应先找高质量来源,而不是不断拿上一份小文件继续压。

构建过程也需要空间。最终文件小,不意味着转换时不必保存原始模型、高精度 GGUF 和中间结果。准备部署产物与运行最终产物,是两种资源情境。

看图模型,还可能需要第二个文件

对于多模态模型,文档另列 mmproj。它可能包含视觉、音频编码器及投影组件,负责把这些输入接到语言模型上。只留下语言模型部分,不能就此认为图片能力也已经准备好。

官方建议这部分通常保留较高精度,例如 bf16 或 q8:它体积相对小,继续压缩的收益有限,却会影响输入表示质量。这是一处值得保留的取舍,不能把整套模型所有部分都机械地用同一种最低精度。

llama.cpp代码采用 MIT,实际权重仍按原模型许可使用。读完这份材料,选择 GGUF 的依据可以更具体:从哪份权重来,怎样量化,是否还带多模态组件,以及它在你的任务上保留了多少可用能力。

原始资料:llama.cpp 官方资料

以上为编辑整理,功能、许可与使用条件以官方说明为准。

返回每日分享