首页 > 基础资料 博客日记
本地模型为什么能跑起来?从 llama.cpp 量化说起
2026-06-10 15:00:05基础资料围观1次
上周,Google 发布了 Gemma 4 12B。这个模型最大的亮点是,官方说它可以在 16GB VRAM 或 unified memory 的消费级笔记本上本地运行。
这个产品发布之所以引起关注,是因为它正好踩中了很多开发者这两年对本地模型的真实感受:大模型不再只存在于云端,也开始进入普通电脑。你打开 Ollama、LM Studio,或者直接用 llama.cpp,下载一个量化版本,就有机会在本地跑起一个还不错的大模型。
但问题也来了:
-
为什么一个大模型可以在本地跑起来?
-
为什么同一个模型会有 Q4、Q5、Q8 这么多版本?
-
为什么模型能加载,不代表它一定跑得快?
-
为什么有些量化版本体积小了,回答质量也会下降?
今天我们来读一篇本地推理相关的论文《Which Quantization Should I Use? A Unified Evaluation of llama.cpp Quantization on Llama-3.1-8B-Instruct》了解下为什么本地能跑起来模型。
它研究的不是 Gemma 4,也不是某个全新的模型架构,而是本地推理里特别常见的一件事:llama.cpp 量化。

图注:这篇论文研究的是 llama.cpp 中常见的 GGUF 量化格式,比较它们在模型大小、压缩率、CPU 推理吞吐、perplexity 和下游任务表现上的差异。
本地推理中的权重量化
先说最基本的问题:为什么本地模型能跑起来?
一个大模型的参数,本质上是一大堆数字,也就是我们常说的模型权重。如果用 FP16 或 BF16 存储数据,一个参数大约要 2 个字节。以 8B 模型为例,用 FP16 存储的话,光模型权重就大概需要 16GB 左右。这里还没算推理框架、运行时开销、上下文里的 KV Cache,以及操作系统和其他程序占用的内存。
这也是为什么以前大家一听到“大模型本地运行”,第一反应就是:显存够不够、内存够不够、普通电脑跑得动么?
而模型量化要解决的,就是这个问题。它会用更低精度的格式来存储模型权重,把原本用 FP16 / BF16 这类 16-bit 格式存储的权重,转换成更低 bit 的表示方式,比如 8-bit、6-bit、5-bit、4-bit。这样,模型文件和运行时权重占用会变小,本地设备更容易装下模型;但代价是,模型权重不再完整保留原来的精细数值,而是用更粗的数字来表示。压得越狠,回答质量、推理稳定性和复杂任务表现就越可能受到影响。
你在 Hugging Face、Ollama、LM Studio 里看到的那些 Q4、Q5、Q8,本质上就是不同量化等级和不同实现方式的模型版本。
-
Q4 会更省内存,模型文件更小;
-
Q8 更接近原始精度,但体积也更大;
-
Q5、Q6 则处在中间区域。
这就是本地模型能跑起来的第一个关键:不是把原始模型完整塞进你的电脑,而是通过量化,把模型压到普通设备可以承受的范围里。

图注:论文中的表 1 列出了 llama.cpp 常见 GGUF 量化格式。Q3、Q4、Q5、Q6、Q8 不只是数字大小差异,不同格式对应不同的压缩和质量取舍。
量化规模的抉择
看到这里,可能会有人产生一个想法:那是不是直接选最小的量化版本就好了?Q3 最小,Q4 也很省,那我是不是永远选 Q4 或 Q3?
这是这篇论文想回答的问题之一。论文作者选择 Llama-3.1-8B-Instruct 作为测试对象,围绕 llama.cpp 的 GGUF 量化格式,做了一次统一评估。
它比较的不是一两个版本,而是覆盖了 3-bit 到 8-bit 的多种 K-quant 和 legacy quantization 格式。
这篇论文不仅看模型文件大小,还看了下面这些更贴近实际使用的指标:
-
模型压缩率,看的是量化之后,模型文件相比原始版本缩小了多少。以论文中的 F16 为例,它的模型文件是 15,317.02 MiB,而 Q4_K_S 量化后是 4,467.80 MiB,文件大小减少了大约 70.8%。压缩率越高,模型越容易装进普通电脑的内存或显存里;
-
量化耗时,看的是把原始模型转换成某个量化格式需要多长时间。这个指标对普通用户感知可能没那么强,因为很多人直接下载别人已经量化好的 GGUF 文件;但对需要自己转换模型、批量发布模型的人来说,量化耗时会影响整个处理流程;
-
困惑度(perplexity / PPL),是语言模型常用的评估指标。它衡量的是模型预测文本的能力。数值越低,通常说明模型越能顺畅地预测下一个 token。量化之后,如果 perplexity 明显升高,往往意味着模型的语言建模能力受到了影响;
-
下游任务表现,看的是模型在具体任务上的得分,比如数学题、知识问答、指令遵循、常识推理等。它比 perplexity 更贴近实际使用,因为我们最终关心的不是模型在抽象指标上多好看,而是它回答问题、执行指令、处理任务时有没有变差;
-
CPU prefill 吞吐,看的是模型读入 prompt 的速度。你给模型塞一大段上下文、文章或代码,模型在开始生成回答之前,需要先把这部分输入读进去并完成计算。这个阶段越快,长文本输入时的等待时间就越短;
-
CPU decoding 吞吐,看的是模型生成回答的速度,也就是它每秒能生成多少 token。我们平时感受到模型“打字快不快”,主要看的就是这个指标。
把这些指标放在一起看,这篇论文关注的就不只是“哪个版本最小”。它真正比较的是:在本地推理里,不同量化格式会怎样影响模型体积、运行速度和任务效果。
这也为后面的结论做了铺垫:低 bit 版本确实更省空间,但省下来的内存,往往需要用一部分质量损失或速度变化来交换。

图注:表 2 比较了不同量化格式在 GSM8K、HellaSwag、IFEval、MMLU、TruthfulQA 和 WikiText-2 PPL 上的表现。可以看到,低 bit 版本压缩更多,但效果损失也更明显;中等 bit 版本往往能在压缩和效果之间取得更好平衡。
上图的数据显示,Q3_K_S 的 size reduction 达到 77.23%,但平均任务分数从 F16 的 69.47 降到 65.49,PPL 也从 7.32 升到 8.96。相比之下,Q4_K_S、Q4_K_M、Q5_0 等中间格式的平均分更接近 F16。
所以,量化不是一个单纯的压缩问题。模型变小了,内存压力确实会下降,但质量也可能跟着掉。
4–5 bit 的平衡区间
如果你研究过本地模型的下载,应该看过很多模型都会提供 Q4、Q5 这类的版本。因为它们处于一个相对平衡的位置:体积明显比 FP16 小,资源要求更低,同时效果损失也没有 3-bit 这类更低 bit 量化那么明显。
在论文中,作者给出了一个很直观的数据分析。在 Figure 1 里,作者把压缩率和 benchmark 质量损失放到一起比较。结果显示,Q5_0 更偏质量优先;Q4_K_S 是压缩需求更强时的一个平衡选择;Q3_K_S 压缩得最多,也是质量损失最大的那个。

图注:图 1 展示了压缩率和平均 benchmark 质量损失之间的关系。
上面的数据,也暗示了本地模型用户真正面对的取舍:是要更小的模型、更低的内存占用,还是更稳定的回答质量?
如果你的设备内存很紧张,只是做简单问答、摘要、轻量编程辅助,4-bit 可能就够用;如果你对回答质量更敏感,要做复杂推理、长文理解、代码生成,5-bit、6-bit 甚至 8-bit 可能会更稳。
这也是为什么同一个模型会放出那么多 GGUF 版本。它不是让用户困惑,而是在给不同设备、不同任务留出选择空间。
本地推理没有一个永远正确的量化格式。你要根据设备资源和使用场景,选择一个自己能接受的平衡点。
模型加载与推理体验
本篇论文还有一个很重要的提醒:本地模型能跑起来,只是第一步。
很多人第一次跑本地模型时,会先看模型文件多大。这个模型 Q4 只有几 GB,那是不是就能在我的电脑上流畅运行?其实答案是不一定。
因为本地推理的体验,不只取决于模型权重大小。它还和 prefill、decoding、CPU/GPU 性能、内存带宽、上下文长度、推理框架实现都有关系。可能你会遇到这些情况:
-
模型能加载,但输出很慢;
-
短对话没问题,但上下文一长就开始卡;
-
Q4 版本能跑,但复杂任务效果明显不如 Q6 或 Q8。
这就是论文同时测吞吐和任务表现的原因。

图注:表 3 比较了不同量化格式在 CPU 上的推理吞吐。pp512 对应的是 prompt processing(prompt 处理),也就是处理 512 个输入 token 的速度;tg128 对应 token generation(token 生成),也就是生成 128 个 token 的速度。
从结果上来看,量化对两个阶段的影响并不完全一致。Token 生成阶段更容易从低 bit 量化中受益,但 prompt 处理的速度变化更不稳定:有些格式会变快,有些格式反而不如 F16。
这说明,本地推理不能只看模型文件大小。如果只看体积,我们很容易得出“越小越好”的结论;但把速度和效果一起看,就会发现量化其实是一个多目标取舍。
模型文件变小,一般意味着内存压力下降;但压缩得越激进,模型质量可能受到影响,推理速度也不一定在所有阶段都更好。对本地模型来说,能加载只是第一步,真正好不好用,还要看体积、速度、质量和具体任务场景。
部署建议
这篇论文不只给出了实验分数,还给了部署建议。
在表 4 中,作者把不同量化格式映射到了不同场景。这是它给出的部署建议:
-
运行在 CPU 上的一般交互聊天,优先考虑 4–5 bit 的平衡格式,包括 Q4_K_S、Q4_0、Q4_K_M,以及资源允许时的 Q5_0;
-
设备资源更紧张,像是内存/显存较小,或者只能依赖 CPU 推理,可以考虑 3-bit,但要接受更明显的质量损失;
-
偏准确率的 CPU 部署,则可以看 Q6_K 或 Q8_0;
-
数学、推理、指令遵循这类对质量更敏感的任务,论文建议避免过于激进的 3-bit,优先考虑 5-bit;如果设备资源只能支持 4-bit,也应优先选择 Q4_K_S、Q4_K_M 这类表现更稳的 4-bit 格式。

图注:Table 4 把量化格式映射到实际部署场景。
这张表想说明的一点是,量化格式没有一个统一最优解。它取决于你的设备资源、任务类型,以及你能接受多少质量损失。
如果只是做一般本地聊天,4–5 bit 通常是比较现实的起点;如果任务对推理和指令遵循要求更高,就需要优先保住模型质量;如果设备资源非常紧张,3-bit 可以作为极限压缩方案,但它更像是资源不足时的选择,而不是默认推荐。
模型大小与压缩效果
此外,论文的表 5 列出了不同量化格式的模型大小、压缩率和量化耗时。
论文里的 F16 GGUF 输入文件是 15,317.02 MiB。量化之后,模型大小会明显下降:
-
Q4_K_S 是 4,467.80 MiB;
-
Q4_K_M 是 4,685.30 MiB;
-
Q5_0 是 5,332.43 MiB;
-
Q8_0 是 8,137.64 MiB。
同一个 8B 模型,从 F16 到 4-bit / 5-bit 量化版本,模型文件大小可以降到个位数 GB 级别。像 Q4_K_S 的大小是原来的 29.2%,文件大小减少约 70.8%;Q5_0 大约只有原来的 34.8%,文件大小减少约 65.2%。
这就解释了,为什么很多本地模型可以进入普通电脑可承受的范围。

图注:Table 5 给出了不同量化格式的模型大小、压缩率和量化时间。
这里要注意:模型文件大小不是实际运行内存的全部。真实运行时还要考虑推理框架、上下文长度、KV Cache、系统内存占用等因素。
所以“能加载”和“能流畅使用”之间,还有一段距离。
回到 Gemma 4
回到开头的 Gemma 4 12B。
Google 说它可以在 16GB VRAM 或 unified memory 的消费级笔记本上本地运行,这个说法确实很吸引人。但今天这篇论文并不研究 Gemma 4,也不能直接解释 Gemma 4 12B 的全部设计。
它能解释的是本地模型运行背后的一个基础环节:量化如何降低模型权重的内存占用,以及不同量化格式会带来怎样的效果和速度差异。
16GB 能跑本地模型,不是某一个单点技巧的结果。模型尺寸控制、权重量化、推理框架优化、上下文管理,都会影响最终能不能跑起来、跑得快不快、效果稳不稳。
这也是为什么我们借 Gemma 4 的发布来读这篇论文:它讨论的不是某一个新模型,而是本地推理越来越常见之后,开发者迟早会遇到的量化选择问题。
模型能在本地跑起来之后,真正需要判断的就是:哪个版本适合自己的设备和任务。文件大小只是其中一项,速度、质量、上下文长度和任务类型都会影响最终体验。
所以,这篇论文给出的核心提醒很简单:选择量化版本时,不能只看模型文件大小。
参考资料:
-
Which Quantization Should I Use? A Unified Evaluation of llama.cpp Quantization on Llama-3.1-8B-Instruct
-
Introducing Gemma 4 12B
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:

