模型格式与量化
模型文件到底是什么
当你下载一个 LLM 时,你下载的其实是一堆权重参数——数十亿个浮点数,存储了模型从训练数据中学到的所有"知识"。
这些参数需要用某种格式保存到文件中。不同的格式有不同的特性,了解它们能帮你做出更好的选择。
主流模型格式
GGUF
GGUF(GPT-Generated Unified Format)是目前本地推理最主流的格式,由 llama.cpp 项目定义。
核心特点:
- 单文件:模型的所有信息(权重、分词器、元数据)打包在一个文件里
- 支持量化:内置多种量化方案
- 跨平台:CPU、GPU、Metal 都能用
- Ollama 的底层格式:当你
ollama pull一个模型时,背后就是 GGUF
GGUF 文件名通常包含量化信息,比如 llama-3-8b-Q4_K_M.gguf,一眼就能看出模型大小和量化级别。
SafeTensors
SafeTensors 是 Hugging Face 推出的格式,主要用于 GPU 推理和训练。
核心特点:
- 安全:不使用 pickle,避免了序列化攻击风险
- 快速加载:支持内存映射,加载速度快
- GPU 训练和推理的标准格式
- 通常保存为多个分片文件
如果你用 transformers 库或 vLLM 做推理,用的就是 SafeTensors 格式。
PyTorch (.bin) 和 GGML
- PyTorch .bin:老格式,用 pickle 序列化,有安全风险,正在被 SafeTensors 替代
- GGML:GGUF 的前身,已经过时,不建议使用
量化:用精度换空间
一个 7B 参数的模型,如果每个参数用 16 位浮点数(FP16)存储,需要大约 14GB 内存。70B 的模型就需要 140GB——远超普通消费级显卡的容量。
量化(Quantization)是解决这个问题的关键技术:用更少的比特位来表示每个参数,换取更小的内存占用和更快的推理速度。
原理很简单。FP16 用 16 bit 存一个参数,但很多参数的精度其实不需要那么高。如果我们用 4 bit 来存,内存占用直接降到原来的 1/4。
量化级别详解
| 量化级别 | 每参数比特 | 7B 模型大小 | 质量损失 | 适用场景 |
|---|---|---|---|---|
| F16 | 16 bit | ~14 GB | 无 | 有足够显存时的最佳选择 |
| Q8_0 | 8 bit | ~7 GB | 极小 | 质量优先,空间充足 |
| Q6_K | 6 bit | ~5.5 GB | 很小 | 质量和空间的良好平衡 |
| Q5_K_M | 5 bit | ~4.8 GB | 小 | 推荐的通用选择 |
| Q4_K_M | 4 bit | ~4.0 GB | 轻微 | 最流行的选择,性价比最高 |
| Q3_K_M | 3 bit | ~3.3 GB | 明显 | 内存紧张时的选择 |
| Q2_K | 2 bit | ~2.5 GB | 严重 | 不推荐,质量下降太大 |
命名中的 K 表示使用了 k-quant 方法(更智能的量化),M 表示中等(Medium)精度,还有 S(Small,更小但质量更低)和 L(Large,更大但质量更好)。
如何选择量化级别
实用决策流程:
- 显存够用 → F16 或 Q8:质量最好,不用纠结
- 想要性价比 → Q4_K_M:这是社区最推荐的"甜点"级别,质量损失很小,内存占用大幅降低
- 内存紧张 → Q5_K_M 或 Q4_K_M:在质量和空间之间取得平衡
- 极度紧张 → Q3_K_M:能跑,但质量有明显下降
- Q2 → 基本不要用:质量损失太大,不如换个更小的模型
一个常见的误区是:与其用 70B 模型的 Q2 量化,不如用 7B 模型的 Q8 量化。 过度量化带来的质量损失往往比换小模型更严重。
模型大小估算
快速估算公式:
内存需求 ≈ 参数量(十亿) × 每参数比特数 ÷ 8
例如:7B 模型 Q4 量化
7 × 4 ÷ 8 = 3.5 GB(实际还需要一些额外开销,约 4 GB)
这个估算帮你快速判断一个模型能不能在你的硬件上跑起来。
在哪里找量化模型
- Hugging Face:搜索模型名 + "GGUF",比如 "llama 3 8b GGUF"
- TheBloke:Hugging Face 上最知名的量化模型发布者(虽然现在很多模型作者自己也发布 GGUF 了)
- Ollama 模型库:
ollama list查看可用模型,已经预配置好了
要点总结
- GGUF 是本地推理的标准格式,SafeTensors 用于 GPU 训练和推理。选格式取决于你的使用场景。
- 量化是本地跑大模型的关键技术——用精度换空间。Q4_K_M 是最流行的选择,性价比最高。
- 不要过度量化。Q2 通常不可用,与其过度量化大模型,不如选个小一号但量化级别更高的模型。
- 模型大小 ≈ 参数量 × 比特数 ÷ 8。用这个公式快速判断你的硬件能否承载。