llama.cpp 量化模型

模型与算力

讲清 llama.cpp 常见量化格式的差别与选型顺序,按显存、任务和输出稳定性定档,不打无准备的量化包。

本地拉了个模型,目录里一堆名字相近的量化文件,不知道该下哪个;下完发现显存不够或者中文答得发飘,又得重来一遍。这篇按 llama.cpp 实际会碰到的格式讲清各自取舍,给一套从「先量显存」到「小样本验收」的操作顺序,以及什么情况下干脆别用量化。

本地拉了个模型,目录里一堆名字相近的量化文件,不知道该下哪个;下完发现显存不够或者中文答得发飘,又得重来一遍。这篇按 llama.cpp 实际会碰到的格式讲清各自取舍,给一套从「先量显存」到「小样本验收」的操作顺序,以及什么情况下干脆别用量化。不追求把每种缩写都背下来,重点是让你下次打开文件列表时,能在几分钟内做出不后悔的选择。

先说个前提:量化不是免费的午餐,它换的是体积和速度,付出的是精度。所以选型不是「越小越好」,而是「够用就行」。下面的顺序是先算预算、再定档位、最后比方法,别反过来先挑文件名里看着顺眼的。有任何数字类的问题,比如现在各家卡什么价、什么配置能跑多大,都去站内对应页面看当时的数字,这篇不写死。

先认清 llama.cpp 吃哪几种量化文件

llama.cpp 走的是 GGUF 这一支容器格式,一个文件里打包权重、词表和元信息。其它常见的量化容器不是不能转,但要多一道转换工序,别指望直接把别的格式喂进去就能跑。文件名里那串字母数字是量化方法加档位的缩写,同一个方法会分若干个粗细不同的档,看懂命名规律比背清单有用,因为方法一直在加。

GGUF
llama.cpp 直接加载的容器格式,权重、词表、元信息都在一个文件里
K 类混合量化
对部分敏感层保留更高精度,同参数下体积略大但质量更稳
纯低比特量化
体积最小,适合塞进紧张显存,但精度损失也更明显
只压激活的路线
权重基本保持原样,占用降不了多少,可视为轻量化而非小体积方案
  • 先确认手上的文件是不是 GGUF,别的格式要先转,转完再谈选档
  • 看文件名里的方法前缀,判断属于混合量化还是纯低比特
  • 看档位后缀,同一个方法下档位越细体积越大
  • 留意有没有附带参数说明或校验值,对不上的别用
  • 同一模型多个来源的包,优先官方或原作者发布的那个

选档顺序:先量预算,再定档位,最后才看方法

第一步不是挑文件,是算账。把可用显存和内存算清楚,同时留出上下文缓存的空间,别把显存全给权重。能跑多大模型的粗算思路可以对照 部署测算(/models/deploy)。很多人的翻车点就在这一步:权重刚好塞进去,上下文一拉长就爆。

  1. 量预算列出显卡显存、系统内存,再减去上下文缓存和运行时开销,得到一个真实可用额度
  2. 定档位按「放得下且留有余量」挑档,够宽裕取精度较高的一档,卡在临界就降一档,宁可小一号也别贴上限
  3. 比方法同样体积下优先挑社区验证多、口碑稳的那类,新方法先拿小模型试,别一上来全量替换
  4. 看任务写代码、结构化输出、长链路 agent 对精度损失更敏感;闲聊、摘要、打标签这类任务宽容得多
任务类型精度敏感度选档倾向
代码生成、结构化输出高尽量往高精度靠,必要时降模型尺寸而不是降档
长文档问答、摘要中中等档位可用,重点验收长上下文表现
闲聊、分类打标签低低比特档位基本够用,优先换吞吐
需要对齐评测的任务很高不建议用重量化版下结论,换原版或看现成口径

下载后别急着接业务,先做三件事验收

量化包的坑大多在长尾场景里暴露,短问答看着都正常。所以验收要有针对性:拿你自己任务里的真实输入去跑,而不是拿通用示例。下面这几步加起来花不了多少时间,但能省掉后面接进业务再回滚的麻烦。

  • 挑一组真实问题,原版和量化版各跑一遍,对比关键字段有没有漏、格式有没有崩,别只看一句话顺不顺
  • 把接近上限的长文档喂进去,观察是否出现重复、跑题或提前截断,这通常比短问答更早暴露损失
  • 记录同一硬件下的吞吐和首字延迟,低比特常能换来更高速度,但收益不是线性的
  • 确认文件来源和校验值,第三方转的重量化包要多留心,参数说明对不上的直接弃用
  • 把验收结果记下来,下次换档位时有基线可比

想记录速度基线,可以借 接口测速(/tools/speed-test) 的方式先测一轮,把当时的数字存下来。这里要提醒一句:不同机器、不同上下文长度下测速结果没法直接比,自己前后对比才有意义。

这些情况不建议用量化顶上去

量化是有适用边界的。有些场景里,省下来的那点资源远不如一次错误结论的代价大。下面这几类情况,建议先想别的办法,而不是一路往最低档降。

  • 要做效果对齐、评测打分的基准任务,量化版和原版存在系统性偏差,结论不好迁移,这类活去 AI 模型评测(/benchmarks) 看现成口径更省事
  • 显存差得太多时,靠降到最低档硬塞,通常换来答非所问和频繁重跑,反而更费时间,先考虑换更小的模型或者走 算力从哪买(/compute/platforms) 的租卡路线
  • 需要微调后再量化的链路要分开验证:先确认原精度下的训练效果,再逐档量化比对,别把训练问题和量化问题混在一起排查
  • 对输出格式极其敏感的生产接口,量化后务必加一层校验与重试兜底,不要默认一次就出对的

最后补一句判断标准:如果你的验收里,量化版在真实输入上的失败率还在可接受范围内,且长上下文没有明显退化,那就可以用;一旦需要靠反复重试来兜底,说明档位压过头了,往回退一档往往比继续优化提示词更划算。

下一步把候选量化包和你的真实任务输入列成一张对照表,按上面的验收步骤跑一轮;需要看现成的模型清单和部署参考,直接从站内模型页开始。

常见问题

量化档位越低,跑得就越快吗?

不一定。体积和显存占用通常随档位下降,但速度还受内存带宽、CPU 卸载比例和上下文长度影响。低比特有时因为反量化开销在部分硬件上并不更快,建议用自己的机器和真实输入量一遍,别只看别人说的结论。

同一个模型,为什么不同人给的量化文件大小差很多?

量化方法、档位和是否保留部分层高精度都会影响体积,词表大小和上下文支持范围也会带来差异。同名文件不一定等价,下载前看清方法缩写和档位说明,必要时对照官方仓库的文件清单确认。

量化以后中文效果变差,是量化的问题还是模型的问题?

两者都可能。先用原版跑同一批问题做对照,如果原版也差,就是模型本身不适合这个任务;如果只有量化版崩,优先换高一档或换方法重测。中文、代码和长输出任务对精度损失更敏感,选档时要把这类任务单独拎出来验。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。