一个70B参数的大模型,FP16精度下要吃掉140GB显存。大多数开发者手里只有一张24GB的RTX 4090。量化技术把权重从16位浮点压缩到4位整数,模型体积直接砍掉75%,质量损失却小得惊人。Llama 3 70B量化后能在单张4090上跑起来,这件事在两年前根本不敢想。
量化方法选错了,轻则速度拉胯,重则模型吐垃圾。GGUF、AWQ、GPTQ三条路线各有各的战场,开发者到底该押注谁,这篇文章用实测数据把账算清楚。
量化的底层逻辑:把连续值塞进16个桶里
神经网络权重通常存成16位或32位浮点数,每个权重可能是0.0023847或者-1.7632这样的连续值。量化做的事情很朴素:把权重范围切成16个桶(4位能表示0到15),每个权重归到最近的桶里,存储桶的编号而非完整数值。
反量化时用公式 `reconstructed = quantized_value * scale + min_value` 还原近似值。误差必然存在,关键在于把误差控制在那些对输出影响最大的权重上。简单粗暴地四舍五入,7B模型量化到4位直接产出乱码。聪明的算法会区分哪些权重重要、哪些可以牺牲。
GGUF:CPU推理的事实标准
GGUF由llama.cpp项目创造,Georgi Gerganov主导开发。它是一个容器格式,支持多种量化方案,设计目标是在CPU和Apple Silicon上高效推理,同时支持部分层卸载到GPU。
GGUF用分块量化加混合精度。模型被切成权重块,每块带自己的缩放因子。命名规则直接告诉你精度档位:
- Q4_0:4位简单方案,每权重约4.34比特
- Q4_K_M:4位k-quant中等质量,每权重约4.58比特
- Q5_K_M:5位k-quant,每权重约5.69比特
- Q8_0:8位近无损,每权重约8.5比特
K系列对不同层用不同位深,注意力层拿更多比特,前馈层少一些。I系列用重要性矩阵引导哪些权重该保高精度。
质量保留方面,Q8_0达到FP16的99%,Q5_K_M约97%,Q4_K_M约92%,Q3_K_M掉到85%,Q2_K只剩70%——这个档位已经能明显感知退化。Q4_K_M是大多数用户的甜点,体积缩小3到4倍,质量损失可控。
GGUF的强项在CPU和Apple Silicon场景,配合Ollama、LM Studio或llama.cpp直接用。单文件分发也是一大优势。弱项同样明显:纯GPU推理速度不如AWQ和GPTQ;在vLLM里跑GGUF吞吐只有93 tok/s,而AWQ加Marlin能到741 tok/s。
AWQ:GPU推理的吞吐怪兽
AWQ由MIT团队开发,核心洞察是:不到1%的权重是”显著权重”,对模型输出贡献不成比例地大。AWQ通过校准数据前向传播,测量哪些权重产生最大激活值,把这些权重保护在高精度或跳过量化,剩余99%压到4位。
这种选择性策略比均匀量化更好地保留了模型行为。AWQ还引入缩放因子,在量化前压缩权重动态范围,让低比特表示更友好。
真正让AWQ起飞的是Marlin内核。JarvisLabs在Qwen2.5-32B加H200上的实测数据很能说明问题:
| 方法 | 吞吐 | 质量Pass@1 |
| — | — | — |
| FP16基线 | 461 tok/s | 56.1% |
| AWQ(无Marlin) | 67 tok/s | 51.8% |
| AWQ + Marlin | 741 tok/s | 51.8% |
| GPTQ + Marlin | 712 tok/s | 46.3% |
没有Marlin内核的AWQ只有67 tok/s,加上Marlin直接飙到741 tok/s,比FP16基线还快60%。质量保持51.8%,比FP16的56.1%低4.3个百分点。GPTQ加Marlin吞吐712 tok/s接近AWQ,但质量掉到46.3%,差距拉开。
AWQ适合GPU API服务场景,每美元吞吐是核心指标。vLLM的Marlin内核是标配,部署链路成熟。
GPTQ:老牌选手的存量价值
GPTQ用Hessian矩阵最小化逐层重建误差,4位量化保留约90%的FP16质量。Hugging Face上预量化GPTQ模型存量巨大,拿来即用。新项目里AWQ已经反超GPTQ,质量保留更好,Marlin内核支持更完善。
GPTQ的定位很清晰:手头已经有预量化GPTQ模型,不想重新量化,直接用。新项目从FP16权重出发做量化,选AWQ更划算。
bitsandbytes:唯一支持训练的选项
前面三种都是推理量化。bitsandbytes是唯一支持训练的方案,QLoRA微调就靠它。QLoRA在LoRA基础上引入4-bit NormalFloat量化,把65B参数模型的微调显存从780GB压到48GB,单张A100 80GB能完成百亿参数微调。消费级RTX 4090 24GB可以跑7B模型的QLoRA训练。
2026年量化工具链经历了一次洗牌。AutoAWQ和AutoGPTQ已废弃,pip install会静默失败。新工具链是llm-compressor和GPTQModel,开发者迁移时务必更新脚本。
开发者选型决策树
把决策逻辑压成几条规则:
硬件是CPU或Apple Silicon,用Ollama或llama.cpp,选GGUF的Q4_K_M。需要混合CPU/GPU推理、部分层卸载,同样选GGUF。模型要打包成单文件分发,GGUF是唯一答案。
硬件是NVIDIA GPU,用vLLM做API服务,选AWQ加Marlin内核。吞吐优先的场景AWQ没有对手。GPU算力要求7.5以上(Turing架构,RTX 2000系列及更新),老卡没有优化内核支持。
手头已有Hugging Face上的预量化GPTQ模型,不想折腾,直接用GPTQ。新项目从零量化,跳过GPTQ选AWQ。
要做QLoRA微调,只有bitsandbytes这一条路。推理用其他三种,训练用bitsandbytes,各司其职。
质量验证:别靠感觉,靠数据
量化完跑困惑度测试,拿留出数据集对比FP16基线。Q4档位困惑度上升5%到10%属于正常范围。超过20%,实际使用中能感知到质量下滑。
GGUF的imatrix只在激进量化(Q3及以下、IQ2、IQ3)时才需要。Q4_K_M及以上用默认量化就够了,别给自己加戏。
格式之间不能直接转换。GGUF、AWQ、GPTQ存储权重的方式不同,跨格式转换必然丢质量。永远从FP16权重出发,量化到目标格式。
一张账单算到底
以Qwen2.5-32B为例,FP16基线吞吐461 tok/s,AWQ加Marlin达到741 tok/s,速度提升60%的同时显存占用砍掉75%。GPTQ加Marlin吞吐712 tok/s,质量比AWQ低5.5个百分点。GGUF在vLLM里只有93 tok/s,放到llama.cpp里才是主场。
70B模型FP16要140GB显存,量化到Q4_K_M约40GB,单张RTX 4090 24GB靠部分层卸载也能跑。7B模型Q4_K_M约4GB,树莓派上都能跑出10 tok/s,医疗场景的边缘部署已经落地。
量化是大模型平民化的关键技术。选对格式和内核,一张消费级显卡就能干曾经只有数据中心才敢想的活。选错了,要么速度惨不忍睹,要么质量一塌糊涂。开发者手里的决策权很值钱,别浪费在错误的路线上。
苏公网安备32010502011527号
发表回复