
移动端量化指南: Q4、Q5 和 Q8 在真实设备上的表现
GGUF 量化级别移动端部署实用指南。Q4、Q5 和 Q8 如何影响 iPhone 和 Android 设备上的模型大小、速度、质量和内存使用。
量化是让 LLM 能在手机上运行的关键。一个 3B 参数模型在全精度(FP16)下占 6GB。量化到 Q4 后只需 1.7GB。模型大致相同,只是存储效率更高。
但"大致相同"隐藏了重要的细微差别。不同的量化级别在大小和速度与质量之间进行权衡。为你的移动应用选择正确的级别需要了解这 些在真实硬件上的折衷。
量化做了什么
LLM 权重以数字形式存储。全精度使用每个权重 16 位(FP16)。量化减少每个权重的位数,从而缩小模型:
| 格式 | 每权重位数 | 3B 模型大小 | 相对质量 |
|---|---|---|---|
| FP16 | 16 | ~6GB | 100%(基准) |
| Q8_0 | 8 | ~3.2GB | ~99.5% |
| Q6_K | 6 | ~2.5GB | ~99% |
| Q5_K_M | 5 | ~2.1GB | ~98.5% |
| Q4_K_M | 4 | ~1.7GB | ~97.5% |
| Q4_0 | 4 | ~1.6GB | ~96% |
| Q3_K_M | 3 | ~1.4GB | ~93% |
| Q2_K | 2 | ~1.1GB | ~85% |
"_K_M" 后缀表示 k-quant 中等质量,这是 llama.cpp 中的一种量化方法,根据各层的重要性对不同层应用不同的位宽。这比均匀量化更好地保留了质量。
最佳选择: Q4_K_M
对于移动端部署, Q4_K_M 是标准选择。原因如下:
大小: 比 FP16 大约小 4 倍。3B 模型只需 1.7GB,完全在移动应用的存储预算之内。
质量: 约为 FP16 质量的 97.5%,在大多数任务上退化几乎不可测量。对于模型经过微调的领域特定任务,微调数据会补偿任何量化损失。
速度: 更小的权重意味着推理期间使用更少的内存带宽。Q4 模型通常比更高精度版本运行更快,因为内存瓶颈减小了。
兼容性: 1B 适配 4GB+ RAM 设备, 3B 适配 6GB+ RAM 设备。覆盖了绝大多数活跃智能手机。
量化级别在真实设备上的对比
3B 模型, iPhone 15 Pro (A17 Pro, 8GB RAM)
| 量化 | 大小 | Token/秒 | 内存使用 | 质量(困惑度) |
|---|---|---|---|---|
| Q8_0 | 3.2GB | 14-18 | 4.0GB | 8.12 |
| Q6_K | 2.5GB | 16-20 | 3.2GB | 8.18 |
| Q5_K_M | 2.1GB | 17-22 | 2.7GB | 8.25 |
| Q4_K_M | 1.7GB | 18-25 | 2.2GB | 8.38 |
| Q4_0 | 1.6GB | 19-26 | 2.1GB | 8.52 |
| Q3_K_M | 1.4GB | 20-27 | 1.9GB | 9.05 |
| Q2_K | 1.1GB | 22-29 | 1.5GB | 11.4 |
困惑度越低越好。Q4_K_M 到 Q8_0 之间的质量范围很窄(8.12-8.38)。Q4 以下,质量明显下降。Q3 以下,退化显著。
3B 模型, Galaxy S24 (骁龙 8 Gen 3, 8GB RAM)
| 量化 | 大小 | Token/秒 (Vulkan) | 内存使用 |
|---|---|---|---|
| Q8_0 | 3.2GB | 16-20 | 4.0GB |
| Q5_K_M | 2.1GB | 20-25 | 2.7GB |
| Q4_K_M | 1.7GB | 22-28 | 2.2GB |
| Q3_K_M | 1.4GB | 24-30 | 1.9GB |
1B 模型, iPhone 14 (A15, 6GB RAM)
| 量化 | 大小 | Token/秒 | 内存使用 |
|---|---|---|---|
| Q8_0 | 1.1GB | 20-26 | 1.4GB |
| Q5_K_M | 750MB | 23-30 | 1.0GB |
| Q4_K_M | 600MB | 25-32 | 800MB |
| Q3_K_M | 500MB | 27-34 | 700MB |
何时使用各级别
Q4_K_M(默认选择)
除非有特定理由,否则使用此级别。大小、速度和质量之间的最佳整体平衡。移动端部署的标准。
- 适用于: 所有发布 GGUF 模型的移动应用
- 设备要求: 4GB+(1B)或 6GB+(3B)
Q5_K_M(质量优先)
当质量至关重要且你的目标设备有空间容纳更大文件时使用。相比 Q4_K_M 的质量提升很小但在需要精确措辞的任务上可以测量到。
- 适用于: 医疗、法律或金融应用,词语级准确性很重要
- 设备要求: 6GB+(1B)或 8GB+(3B)
- 大小增加: 比 Q4_K_M 增加约 25%
Q8_0(最高质量)
仅在 RAM 充裕的旗舰设备上使用。质量几乎与 FP16 相同。速度较慢,内存使用较高。
- 适用于: 测试和基准测试,非典型生产部署
- 设备要求: 8GB+(1B)或 12GB+(3B)
- 大小增加: 比 Q4_K_M 增加约 90%
Q3_K_M(大小优先)
当你需要将模型挤进受限设备时使用。质量明显下降,但对于简单任务(分类、是/否、短回答),可能是可接受的。
- 适用于: 入门级设备,或在通常只能放 1B Q4 的空间放入 3B 模型
- 质量风险: 在细微任务上有明显退化
- 大小节省: 比 Q4_K_M 减少约 18%
Q2_K(不推荐)
严重的质量退化。模型经常生成不连贯或不正确的输出。不适合生产使用。
微调与量化
微调在全精度(FP16 或 BF16)下进行。量化在训练后作为导出步骤应用。工作流程:
- 在你的训练数据上使用 LoRA 微调模型(全精度)
- 将 LoRA 适配器合并到基础模型中
- 按目标级别量化为 GGUF(大多数情况下使用 Q4_K_M)
- 在你的评估集上测试量化后的模型
Ertas 等平台端到端处理此流程。你上传训练数据,选择基础模型,训练,然后直接以你选择的量化级别导出为 GGUF。
量化对微调模型影响更大吗?
略微。微调后的模型在权重中打包了更多信息(领域特定知识)。激进量化(Q3 及以下)可能会丢失部分特定知识。
实际中, Q4_K_M 很好地保留了微调后的准确性。在领域特定基准上, Q4_K_M 和 FP16 之间的质量差异通常不到 2 个百分点。Q3_K_M 可能显示 3-5 个点的退化。
实用建议
- 默认选择 Q4_K_M。 它成为标准是有原因的。先用此级别测试。
- 先微调再优化量化。 微调后的 Q4 模型在领域任务上优于未调优的 Q8 模型。
- 在你的任务上测试,而非通用基准。 困惑度是代理指标。真正重要的是你的模型在你选择的量化级别下,在你特定评估集上的准确性。
- 每个模型大小只提供一个量化级别。 不要让用户在 Q4 和 Q5 之间选择。发布 Q4_K_M 以实现广泛兼容。如果你同时支持 1B 和 3B,那就有足够的选择性了。
- 测量真实场景性能。 在量化后的模型上运行你的评估套件。如果准确率与 FP16 相差 2% 以内,就可以发布。
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.
Keep reading

Can LLMs Actually Run on iPhones? Benchmarks and Real-World Performance
Real benchmark data for running LLMs on iPhones via llama.cpp. Token generation speeds, memory usage, and thermal behavior across iPhone models from the iPhone 12 to iPhone 16 Pro.

On-Device AI Model Size Guide: 1B vs 3B vs 7B for Mobile
How to choose the right model size for your mobile app. Capability breakdown, device requirements, quality benchmarks, and the fine-tuning factor that changes the math.

Llama 3.2 for Mobile Apps: Fine-Tuning and On-Device Deployment
A complete guide to using Meta's Llama 3.2 1B and 3B models in mobile apps. Fine-tuning with LoRA, exporting to GGUF, and deploying on iOS and Android via llama.cpp.