一个 70B 参数的大模型,FP16 半精度下要占约 140GB 显存——而最顶级的消费级显卡 RTX 4090 也只有 24GB,绝大多数人连它的零头都没有。但现实是,无数人正在自己的笔记本、旧电脑甚至树莓派上跑大模型,靠的就是 llama.cpp 和它背后的量化技术。这篇把「怎么把大模型塞进小显存」这件事讲透。
项目代码在 github.com/ggml-org/llama.cpp(MIT 协议),量化模型主要从 Hugging Face 的 GGUF 专区下载。

一、llama.cpp 是什么
llama.cpp 是开发者 Georgi Gerganov 发起的一个纯 C/C++ 实现的大模型推理项目(名字里的「GG」就是作者名字缩写,也因此有了 GGML、GGUF 这些命名)。它的特点很鲜明:
- 无 Python 依赖:编译后是一个原生可执行文件,启动快、占用小;
- 硬件通吃:CPU(x86 带 AVX2、ARM)、Apple Silicon(Metal 加速)、NVIDIA(CUDA)、AMD(ROCm)都能跑,没有 GPU 也能用;
- 量化生态:2-8 bit 各种量化档位随意选,是本地部署量化模型的事实标准。
今天大量本地工具都建立在它之上:Ollama、LM Studio、koboldcpp、text-generation-webui 等,底层推理引擎都是 llama.cpp 或它的变体。
二、GGUF:自描述的单文件格式
llama.cpp 使用的模型格式叫 GGUF(GPT-Generated Unified Format),2023 年 8 月取代了早期的 GGML 成为默认格式。GGUF 最大的特点是「自描述」:模型架构、tokenizer、量化信息全部内嵌在文件头里,运行时不需要任何外部配置就能加载,因此单文件拷贝即用,特别适合分发和部署。它在 HF 上有专门的 library 标签(gguf),bartowski、mradermacher 等社区量化组会为每个主流模型发布全套量化版本。
三、量化原理:精度换体积
量化本质是降低权重数值的存储精度。算一笔账(以 70B 模型为例):
- FP32(32 位):约 280GB——几乎不可能消费级运行;
- FP16(16 位):约 140GB——仍需 8 张 A100;
- INT8(8 位):约 70GB;
- INT4(4 位):约 35GB——单卡 4090 24GB 配合 KV Cache 优化勉强可跑。
不过直接粗暴地把权重四舍五入会毁掉模型质量。所以出现了 K-quant 量化:不是均匀地用 4 bit 存所有权重,而是对不同张量类型按敏感度分配不同 bit 数。比如 Q4_K_M 实际平均约 4.5 bit/权重,把更高的精度留给更敏感的张量,换来接近原始模型的输出质量。更进阶的还有 imatrix(重要度矩阵)量化:用校准数据先跑一遍模型,找出激活量大的权重,给它们额外精度保护,产出 IQ2/IQ3/IQ4 等档位,同体积下质量优于朴素量化。
从整体视角看,llama.cpp 支持的量化类型其实是一条从 1.5-bit 到 8-bit 的完整光谱,可以大致分四类:
- 基础量化:F32/F16/BF16(无量化,作参考)、Q8_0、Q5_0/Q5_1、Q4_0/Q4_1——块级均匀量化,Q4_0 是最经典、性价比较好的入门档;
- K-quant:Q2_K / Q3_K / Q4_K / Q5_K / Q6_K,每种还分 Small / Medium / Large 变体,用”超块”结构实现非整数 bit/权重(如 4.5 bit),是社区最常用的系列;
- IQ-quant(重要度感知量化):IQ1_S、IQ2_XXS、IQ3_XXS、IQ4_XS 等,可低至 1.5 bit,同体积下质量最优,是最新的实验性方向;
- 三值量化:TQ1_0 / TQ2_0(1.5~2 bit),把权重量化到「-1/0/+1」三个值附近,属于极致压缩的探索。
量化带来的收益是实实在在的:官方给出的数据是,4-bit 量化通常能把模型体积减少约 70-75%,同时保留大部分能力。而 llama.cpp 纯 C/C++ 实现配合 SIMD 指令优化,在 CPU 上的推理速度往往比 Python 框架快 3-8 倍,这也是它能跑在消费级硬件上的底层原因。
四、量化档位怎么选
以下为 7B 模型的常见档位速查(文件体积与质量随模型规模等比变化):
| 档位 | 位宽 | 7B 体积 | 质量 | 建议 |
|---|---|---|---|---|
| Q2_K | 2.5 | 约 2.7GB | 较差 | 仅测试 |
| Q3_K_M | 3.3 | 约 3.3GB | 一般 | 内存紧张 |
| Q4_K_M | 4.5 | 约 4.1GB | 良好 | 推荐默认 |
| Q5_K_M | 5.5 | 约 4.8GB | 更好 | 质量优先 |
| Q6_K | 6.0 | 约 5.5GB | 优秀 | 高配机器 |
| Q8_0 | 8.0 | 约 7.2GB | 接近原始 | 追求极致质量 |
经验法则:日常用 Q4_K_M 打底、Q5_K_M 提质量,显存紧张降到 Q3,追求完美用 Q8_0;尽量别低于 Q3,质量衰减会断崖式加速。
五、显存不够怎么办:分层卸载
GGUF 相比其他格式(GPTQ/AWQ)最大的优势是支持 CPU/GPU 混合加载:用 -ngl 参数指定把多少层放进 GPU,剩下的层跑 CPU,模型超显存也能运行——只是速度会掉(CPU 层速度大约是 GPU 层的 1/10)。实战数据参考:
- RTX 4090(24GB):7B Q4_K_M 全 GPU 约 120 tok/s;
- Apple M3 Max(Metal):Llama 2 7B Q4_K_M 约 40-60 tok/s;
- 纯 CPU(32GB 内存):7B-13B Q4_K_M 约 2-6 tok/s——慢但能用;
- 70B Q4_K_M(约 40GB):24GB 显卡 + 16GB 内存卸载混跑,速度明显下降但可以跑通。
显存建议速查:3B-7B 用 Q4 需 6GB;7B-13B 用 Q4 需 8-12GB;30B-34B 用 Q4 需 16-20GB;70B 用 Q4 需 40GB+(或混合加载)。
六、自己动手:从原始模型到 GGUF 的完整转换
除了下载现成的量化模型,你也可以把任意 Hugging Face 模型自己转成 GGUF,流程分两步:
- 转成 FP16 GGUF:用项目自带的
convert_hf_to_gguf.py把 PyTorch/safetensors 权重转成 GGUF 格式,例如python convert_hf_to_gguf.py ./models/mymodel/ --outfile model-f16.gguf --outtype f16; - 量化:用
llama-quantize工具把 FP16 模型量化到目标档位,例如./llama-quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M。
追求更高质量时,可以先跑一遍 llama-imatrix 生成重要度矩阵,再带上 --imatrix 参数量化——它会根据校准数据给更重要的权重分配更多精度。这个工具还很灵活,支持 --include-weights/--exclude-weights 只对指定张量用 imatrix、--output-tensor-type/--token-embedding-type 单独指定输出层与词嵌入层的量化档位,甚至能用正则批量指定不同张量的类型。官方也提供了一个量化的体积参考表(以 Llama 3.1 为例):8B 模型原始 32.1GB、Q4_K_M 量化后 4.9GB;70B 模型原始 280.9GB、Q4_K_M 后 43.1GB;405B 模型原始 1625.1GB、Q4_K_M 后 249.1GB——量化的压缩威力一目了然。
七、上手三步
- 下载模型:到 HF 搜模型名 + gguf,选 Q4_K_M 文件下载(注意选对参数规模与上下文窗口变体);
- 安装运行:
pip install llama-cpp-python然后一行代码加载;或直接编译 llama.cpp 用./llama-cli -m 模型.gguf -p "你好"跑 CLI; - 起 API 服务:
./llama-server -m 模型.gguf --port 8080获得 OpenAI 兼容接口,或直接用 Ollama 的ollama pull 模型免编译开跑(Ollama 底层也是 llama.cpp,默认 Q4_K_M)。
八、适用场景
- 本地隐私推理(数据不出机器);
- 无 GPU 环境(笔记本、服务器 CPU 推理、边缘设备);
- Apple Silicon 用户(Metal 加速性价比极高);
- 开发调试与教学演示。
九、工具入口
vLLM 服务端高并发、llama.cpp 本地轻量跑,中间地带还有 SGLang、TGI、LMDeploy、TensorRT-LLM 等一堆引擎——它们到底有什么区别、什么场景选哪个,最后一篇用对比表和决策树讲清楚。

