← 返回资讯

量化模型趋势:INT4、GGUF、AWQ 你需要知道什么

2026-08-05

量化是本地跑大模型的”必修课”:同一个 7B 模型,FP16 格式需要 14GB VRAM,INT4 量化后只需约 4.5GB,普通消费级显卡就能跑。理解量化的原理和格式差异,能帮你在成本、速度、精度之间做出有把握的权衡。

一、量化是什么

神经网络的权重(参数)默认用 32 位浮点数(FP32)或 16 位(FP16/BF16)存储。量化就是把每个参数的数值精度降低,用更少的 bit 表示:

格式Bit 数每参数存储7B 模型内存估算
FP3232bit4 字节~28 GB
FP16 / BF1616bit2 字节~14 GB
INT88bit1 字节~7 GB
INT44bit0.5 字节~3.5-4.5 GB
INT22bit0.25 字节~2 GB(精度损失大)

以上为理论估算,实际还需加上 KV Cache、激活值等运行时内存。

二、主流量化方法对比

量化方法全称核心思路适用场景
GPTQGenerative Pre-trained Transformer Quantization逐层最小化量化误差,需校准数据GPU 推理,精度最优
AWQActivation-aware Weight Quantization根据激活值分布保护重要权重精度与速度均衡
GGUFGPT-Generated Unified Format(llama.cpp 格式)CPU/GPU 混合推理,高度灵活个人 PC 本地部署
bitsandbytes动态量化,集成简单微调/训练场景
SmoothQuant激活值平滑后再量化服务端 INT8 部署

GGUF:个人开发者最友好的格式

GGUF 是 llama.cpp 的原生格式,可以同时利用 CPU 内存和 GPU VRAM(部分层卸载到 CPU),让没有高端 GPU 的开发者也能跑 70B 模型(虽然很慢)。Hugging Face 上几乎所有主流开源模型都有 GGUF 格式的社区版本。

常见 GGUF 量化层级:Q4_K_M(推荐,精度/速度均衡)、Q5_K_M(精度更好,更大)、Q8_0(接近原精度,内存需求约为 INT8)。

量化到底在对权重做什么

把这几个格式当黑盒用没问题,但你至少要知道量化误差是从哪来的,不然遇到”同样是 INT4,为什么这个模型输出比那个模型正常”这种问题你会摸不着头脑。

权重量化的本质,是把一段连续的浮点数值映射到有限个离散的整数格子里。最简单的做法是per-tensor 量化:整个权重矩阵共用一个缩放系数(scale)和零点(zero-point),公式大致是 int_value = round(float_value / scale) + zero_point。这个做法实现简单,但问题也很直接——一个权重矩阵里如果有个别数值特别大(离群值,outlier),为了照顾这几个离群值,scale 就要拉大,结果是绝大多数正常范围的权重都被挤到很窄的几个格子里,精度损失集中爆发。

所以主流方法基本都在做同一件事:把量化粒度切细,让离群值只影响局部

  • per-channel / per-group 量化:不再是整个矩阵共用一个 scale,而是按输出通道或者按 128/64 个权重一组,各自算各自的 scale。GGUF 里的 Q4_K_M 这个 “K” 后缀,指的就是这种分组量化(k-quant),相比早期的 Q4_0 精度明显更稳。
  • GPTQ 的校准思路:GPTQ 不是简单地对每个权重做四舍五入,而是用一批校准数据(几百条文本)跑一遍前向传播,通过 Hessian 矩阵近似估计每个权重对最终输出误差的敏感度,量化时优先保证敏感权重的精度,误差会被”补偿”到不那么敏感的权重上。这也是为什么 GPTQ 量化一个 7B 模型在消费级显卡上要跑十几到几十分钟——它在做真实的误差最小化优化,不是简单的数值映射。
  • AWQ 的思路更取巧:它观察到少数几个激活值(activation)特别大的通道,对应的权重通道也格外重要,干脆直接保护这一小撮”显著权重”不做量化(或用更高精度),代价是多存一点点数据,换来的是不需要跑复杂的校准优化,量化速度比 GPTQ 快很多,精度也接近。

理解这层原理你就知道:同样标着 INT4,GPTQ、AWQ、GGUF 的 Q4_K_M 精度表现会有差异,本质是分组粒度和误差补偿策略不同,不是简单的”位数一样精度就一样”。

三、精度损失有多大

不同量化方法和任务类型的精度损失差异较大,以下为通用规律(具体以官方评测为准):

任务类型INT8 损失INT4 损失
通用对话 / 中文生成< 1%1-3%
代码生成< 1%2-5%
复杂数学推理1-2%5-15%
极长上下文推理1-3%5-20%

规律:越是需要精确计算和长程依赖的任务,量化损失越明显。

四、部署选型建议

部署场景推荐量化方案
消费级 GPU(RTX 4090/3090)跑 7B-13BINT4 GPTQ 或 Q4_K_M GGUF
消费级 GPU 跑 70BGGUF Q4_K_M,CPU+GPU 混合
服务端 A100/H100 高吞吐推理FP16 或 INT8 AWQ/GPTQ
纯 CPU 推理(无 GPU)GGUF Q4_K_M(速度慢,勉强可用)
手机/边缘 NPU厂商定制 INT4,需用专用框架(MLC LLM 等)

五、真实踩坑:这些报错你迟早会碰到

量化模型不是下载下来就一定能顺利跑起来,下面是几个高频问题和对应的排查方法,都是本地部署时会实际撞到的。

报错一:error loading model: unsupported model architectureunknown model architecture 这个基本是 llama.cpp 版本和 GGUF 文件的元数据版本对不上。GGUF 格式本身也在迭代(llama.cpp 团队改过好几次量化算法细节),老版本的 llama.cpp 读不懂新导出的 GGUF 文件。排查方法:先看模型页面标注的量化工具版本,然后把本地 llama.cpp 更新到对应或更新的 commit,而不是死磕旧版本。反过来,如果你用很新的 llama.cpp 加载一个很老的 GGUF 文件报格式错误,通常是官方已经废弃了旧的量化算法,需要重新下载用新工具量化过的版本。

报错二:输出重复、乱码,或者跑着跑着变成一堆无意义字符 先看是不是上下文长度设置超过了模型实际支持的窗口——llama.cpp 里 -c 参数如果设得比模型训练时的上下文窗口大很多,又没有配对 RoPE scaling 参数,模型会在超出原生窗口后迅速退化。其次看量化位数,INT2、INT3 这种极端量化在长文本生成时特别容易出现”复读机”现象,这不是 bug,是量化精度不够导致的模型能力退化,遇到这种情况直接换 INT4 起步的量化版本,不要在 INT2/INT3 上纠结调参。

报错三:transformers + bitsandbytes 4bit 加载报 ValueError: some modules are dispatched on the CPU or the disk 这是 accelerate 的 device_map 没配好,模型某些层被自动分配到了 CPU 或者磁盘(说明显存不够放下整个模型的量化版本)。先用 nvidia-smi 确认显存到底还剩多少,再决定是加 device_map="auto" 让它自动分层,还是干脆换更激进的量化等级腾出空间。这个报错本质是提醒你显存预算不够,不是代码写错了。

报错四:AutoGPTQ / exllama 相关库编译失败,提示 CUDA 版本不匹配 这类量化推理库大多需要编译自定义 CUDA 算子,本地 CUDA 版本和 PyTorch 编译时依赖的 CUDA 版本不一致就会炸。最省心的做法是直接装官方发布的预编译 wheel(对应你的 CUDA 大版本号),而不是本地从源码编译;如果必须本地编译,先用 nvcc --versionpython -c "import torch;print(torch.version.cuda)" 对一下版本号,不一致就先解决环境问题再谈量化。

显存不够用时怎么判断是权重撑爆还是 KV Cache 撑爆 很多人一遇到 OOM 就直接换更小的量化等级,其实应该先分清楚是谁在吃显存。权重占用在模型加载完成、还没开始推理时就基本固定了;KV Cache 是随对话轮数和上下文长度线性增长的。用 nvidia-smi 盯着显存曲线看:如果是刚加载完模型显存就快满了,说明是权重问题,该换更低的量化位数;如果是加载完显存还很宽裕,跑到长对话中途才 OOM,说明是 KV Cache 撑爆的,应该限制最大上下文长度或者减小 batch size,而不是牺牲权重精度。

六、量化对吞吐和并发的影响,不只是省显存这么简单

很多人对量化的认知停留在”省显存”,但它对推理速度和并发能力的影响同样值得计较,而且不总是”量化越低越快”这么简单。

量化后权重体积变小,从显存搬到计算核心的带宽压力也变小,理论上应该更快。但实际速度还取决于反量化(dequantize)的实现效率——INT4 权重在真正参与矩阵乘法之前,要先还原成浮点数,这一步如果 kernel 写得不好,反而会成为新的瓶颈。这就是为什么同样是 GPTQ 格式,在 exllamav2 的定制 kernel 下跑得飞快,换成早期 AutoGPTQ 默认实现可能反而比 FP16 还慢——差距不在量化算法本身,在推理引擎的 kernel 优化程度。所以选量化方案的时候,不能只看格式名字,还要看你用哪个推理框架加载它,框架适配得好不好直接决定实际速度。

并发方面的收益更直接:显存占用降低意味着同样一张卡能同时塞下更多个请求的 KV Cache,服务端场景下这直接换算成更高的吞吐(QPS)。如果你是自建 API 网关对外提供推理服务,量化带来的显存节省往往比单请求的速度提升更值钱——它决定了你一张卡能同时服务多少并发用户。

七、QLoRA:量化不只是用来推理,也能用来省钱微调

量化的应用不止在推理阶段,微调场景里的 QLoRA(Quantized LoRA)值得单独说一下,因为它解决了一个很实际的痛点:全参数微调一个 7B 模型往往要几十 GB 显存,个人开发者根本碰不了。

QLoRA 的思路是:把基座模型量化到 4bit 并冻结不训练,只在旁边插入一小组低秩(LoRA)适配层用 FP16/BF16 精度参与训练和梯度更新。因为真正需要反向传播、存储优化器状态的参数只有 LoRA 那一小部分(通常是原模型参数量的百分之一量级),显存需求被压到消费级显卡也能承受的水平,同时基座模型的 4bit 权重只负责前向计算,不参与梯度计算,精度损失对训练结果的影响比你想象的要小。这也是为什么现在个人开发者在单张 24GB 显卡上微调 13B、甚至更大模型成为可能——量化在这里扮演的角色不是”压缩后直接用来推理”,而是”把基座模型的显存开销降下来,把有限的显存预算留给真正需要训练的部分”。

八、动手自检:三步验证你的量化模型能不能用

光看理论没用,量化模型能不能用在你的业务场景里,自己跑一遍最踏实。

第一步,跑一次 perplexity 对比。 llama.cpp 自带 perplexity 工具,拿同一份测试文本分别跑原始精度和量化后的模型,对比困惑度数值。数值越低说明模型对这段文本的预测越准,量化后的困惑度相对原始模型涨幅越小,说明量化损失越可控。这一步能帮你判断”这个量化等级是不是太激进了”,不用等到线上出问题才发现模型变笨了。

第二步,用你真实业务场景的 prompt 手测。 通用评测数据集测出来的精度损失和你实际场景的表现不一定一致——如果你的场景是结构化输出(比如让模型固定按 JSON 格式回复),量化模型在格式遵循上的退化往往比困惑度数值反映得更明显。挑 10-20 条你线上真实会遇到的 prompt,原始模型和量化模型各跑一遍,人工比对输出质量,这个比任何通用榜单数字都可靠。

第三步,做一次长上下文压力测试。 前面提到过,量化模型在长程依赖任务上的损失通常比短对话明显。如果你的场景涉及长文档问答或者多轮长对话,专门找几段接近你实际使用长度的上下文跑一遍,观察模型是否在上下文变长后出现明显的答非所问或者信息遗漏,而不是只用几百字的短 prompt 测试就下结论。

这三步跑完,你应该能拿到一个具体判断:这个量化等级在你的场景里是”可以直接上线”还是”精度损失太大需要换更高位数”,而不是凭感觉猜。

常见问题

GGUF 和 GPTQ 哪个好? 取决于你的硬件。有专用 GPU 做纯 GPU 推理,GPTQ/AWQ 速度更快;需要 CPU 协助或部署在普通 PC 上,GGUF 更灵活。精度上差距不大。

量化会影响模型的安全对齐吗? 有研究表明极端量化(INT2/INT3)可能弱化安全拒绝能力,但主流 INT4 量化对安全对齐的影响普遍较小。如果你的应用对安全性要求严格,建议使用 INT8 或 FP16。

私有部署的量化模型需要授权吗? 取决于原始模型的 License。Llama 3 系列允许商业使用(有条件);部分模型的 License 限制修改和分发,量化属于修改的一种,使用前务必确认 License 条款。


延伸阅读:小模型与端侧模型崛起 · 模型蒸馏科普 · 自建还是用 API:算力选型 · 显存需求计算 · 怎么追踪大模型动态 · 返回 AI 资讯中心

看完想自己上手试试?

力达云是国内可直连的兼容端点,一期提供 DeepSeek,注册送 ¥5 额度。

去试用

这个页面有问题?

提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。