2.3 主流量化方法正面比较:GPTQ、AWQ、GGUF k-quants 怎么选 前面两节,我们把量化的数学(2.1)和校准集的作用(2.2)讲透了。现在到了你真正要动手时会卡住的那一步:面对 GPTQ、AWQ、GGUF k-quants 这三座大山,到底选哪个? 这个问题没有「标准答案」,但有「针对你的情况的最优解」。我在本地部署 DeepSeek 系列模型时反复踩坑后发现:90% 的人不是败在不会用工具,而是败在「没想清楚自己的瓶颈是显存、速度还是质量」,就盲目跟着教程抄了一条命令。 这一节就帮你把三条路线摆上手术台,逐项剖开,最后给你一张「对号入座」的决策表。 读完整节,你应该能用一句话回答「怎么选」:先看你用什么推理引擎(llama.
前面两节,我们把量化的数学(2.1)和校准集的作用(2.2)讲透了。现在到了你真正要动手时会卡住的那一步:面对 GPTQ、AWQ、GGUF k-quants 这三座大山,到底选哪个?
这个问题没有「标准答案」,但有「针对你的情况的最优解」。我在本地部署 DeepSeek 系列模型时反复踩坑后发现:90% 的人不是败在不会用工具,而是败在「没想清楚自己的瓶颈是显存、速度还是质量」,就盲目跟着教程抄了一条命令。 这一节就帮你把三条路线摆上手术台,逐项剖开,最后给你一张「对号入座」的决策表。
读完整节,你应该能用一句话回答「怎么选」:先看你用什么推理引擎(llama.cpp 系就 GGUF、Transformers 系就 GPTQ/AWQ),再看你更在意显存极限还是开箱质量,让引擎和优先级替你做减法。
先别记参数,先记它们的「世界观」差异——理解了思想,参数才有归宿。
1. GPTQ:从「最优脑量化」来的补偿派
GPTQ 脱胎于 OBQ(Optimal Brain Quantization)。它的核心信念是:量化一个权重产生的误差,会污染后续权重,所以要在量化过程中「提前补偿」。它用校准集估计权重的二阶重要性(Hessian 逆),按通道顺序逐个量化权重,并把每个权重的量化误差智能地分摊回尚未量化的权重上。结果是:在同样 INT4 下,GPTQ 通常比纯 RTN 质量高一大截。代价是量化过程慢、吃校准集、实现复杂。
2. AWQ:保护「显著权重」的缩放派
AWQ(Activation-aware Weight Quantization)的核心观察是:只有约 1% 的「显著权重」真正决定模型输出,而这些权重恰好对应大的激活值。它不去直接量化这些命门权重,而是给它们所在通道乘一个缩放系数,把数值「挪」到更易量化的区间,量化完再缩回来。优势是对校准集规模要求低、实现相对轻、质量稳;它本质上是一种「聪明的混合精度」,而不是逐权重补偿。
3. GGUF k-quants:权重级混合精度的工程派
GGUF 是 llama.cpp 的模型格式,k-quants(如 q4_k_m)是它的一套量化档位体系。它的思路不走「逐权重补偿」或「激活缩放」,而是在权重层面做混合精度 + per-group 量化:把权重按重要性拆成「重要的用高一档精度、次要的用低一档」,配合 group size 128 的细粒度 scale。它的最大卖点是和 llama.cpp 深度绑定、CPU/GPU 混合推理、显存可控、开箱即用,是本地推理圈事实上的主流格式。代价是「方法」本身不像 GPTQ/AWQ 那样有显式补偿理论,质量靠格式设计与调参经验堆出来。
光讲思想太空,下面把四条最影响你体验的维度拉出来比。注意:具体数值因模型、硬件、版本而异,下表是「定性定位」而非实测跑分,落地请以你自己的评估为准。
| 维度 | GPTQ | AWQ | GGUF k-quants |
|---|---|---|---|
| INT4 质量(同等比特) | 高(有补偿) | 高且稳(保护显著权重) | 高(靠混合精度设计) |
| 量化速度 | 慢(需前向+补偿) | 中 | 快(多为离线一键) |
| 推理引擎 | Transformers / vLLM 系 | Transformers / vLLM 系 | llama.cpp 系(生态最大) |
| 显存可控性 | 中 | 中 | 高(CPU offload 灵活) |
| 开箱即用度 | 中(需配环境) | 中 | 高(很多模型直接下载 GGUF) |
| 校准集依赖 | 高(覆盖度敏感) | 中(规模要求低) | 低(权重级统计为主) |
我个人的判断很直白:如果你要的是「在 llama.cpp 上跑得稳、显存随便调、社区资源最多」,GGUF 是默认答案;如果你在 Transformers/vLLM 框架里做、且想压榨 INT4 质量,GPTQ 和 AWQ 二选一,AWQ 通常更省心。
很多人有个误解:GGUF 是「给小白用的」,质量不如 GPTQ/AWQ。这是错的,而且这个错会让你错过本地推理最顺的一条路。
事实是:GGUF 的 k-quants 在 INT4 附近(q4_k_m 这一档)的质量,经过社区大量实测,已经能和 GPTQ/AWQ 的 INT4 正面掰手腕,差距往往小到任务上「肉眼难辨」,而它在「显存弹性 + 跨平台 + 一键部署」上的优势是 GPTQ/AWQ 比不了的。换言之——GGUF 不是「质量妥协」,而是「工程权衡」。当你显卡只有 16GB、还想跑 70B 级别的模型,GGUF 的 CPU offload 和分层加载几乎是唯一出路。
所以我的建议一向是:除非你有明确的框架绑定(必须在 vLLM 上服务),否则本地部署从 GGUF 入手最稳。 这也是第 4 章实战我们默认走 GGUF 路线的原因。
把三条路线往深处看,你会发现它们其实在干同一件事的不同形态:都在做「混合精度」——把有限的比特预算优先分配给更重要的部分。
这意味着一个深层认知:INT4 不意味着「所有东西都是 4 比特」。 真正高质量的 INT4 量化,几乎都是「主体 4 比特 + 关键部分高一档」的混合体。当你看到 q4_k_m 里那个 k_m(medium 混合)时,它就是 k-quants 在说「我在做混合精度」。理解了这点,你就不会再被「纯 INT4」这种字面说法误导。
容易让人犯迷糊的一点是:你嘴上说「我要 INT4」,但落到不同工具的参数上,名字完全不一样。这里给你一张「同义翻译表」,免得你在文档里找不着北:
q4_k_m(medium 混合精度),还有更省的 q4_k_s(small)和更狠的 q4_0 / q4_1(纯 4 比特、无混合)。带 k_ 的才是 k-quants 混合精度家族;q4_0 这类是老式均匀量化,质量通常不如 q4_k_m。int4 / w4(weight 4-bit),常配合 group_size(如 128)和 --sym 对称选项。它的「混合」体现在对重要权重的补偿,而非显式分层精度。w4a16(权重 4-bit、激活 16-bit),强调「只量化权重、激活保持高精度」,这也是它推理时显存账本和别家略不同的原因。记住这条:看到 q4_k_m、w4、w4a16 这三个名字,它们说的都是「主体 INT4」这件事,只是工程封装不同。 别被命名差异吓退,先锁定你引擎对应的那个写法即可。
如果你是从零开始、第一次给自己量化 DeepSeek V4,我给一条最省心的路径,照着走基本不会翻车:
q4_k_m。它是「质量/体积/显存」三角里最稳的甜点:体积约为 FP16 的 1/4,质量在绝大多数任务上难辨,且 llama.cpp 生态对它支持最充分,遇到问题搜得到答案。q4_k_s 或 q3_k_m。q4_k_s 比 q4_k_m 略小略省;q3_k_m 进一步压到 3 比特混合,体积更小但质量开始可见下降,仅在你卡显存极限时兜底。q5_k_m。它把关键部分升到 5 比特,质量更稳,代价是体积回升约 1/3。是否值得,请用你自己的任务评估,不要盲信「越高越好」。这条路径的核心哲学是:先用「开箱最稳」的档位跑通,再按真实需求向上或向下微调。 我见过太多人第一天就死磕 GPTQ 的校准参数,结果三天没跑起来;而先用 q4_k_m 跑通的人,当晚就已经在本地和模型对话了。
理论讲完,给一张能直接用的决策树。按顺序问自己:
一句话收口:绝大多数本地玩家,第一步就选 GGUF q4_k_m,跑通后再考虑是否上 GPTQ/AWQ 追求极限。 不要一上来就纠结「哪个方法理论最强」——能跑起来、跑得稳,比理论最优重要得多。
补几个高频误区,免得你回头踩:
方法选完、模型跑起来后,别急着庆祝,用三分钟做个快速体检,能提前发现 80% 的问题:
q4_k_m 或重做校准,别在错误模型上继续。这套体检不严谨,但足够「早发现早治疗」。记住:量化不是终点,量化后能用、好用才是终点。 第 3 章我们会把「质量怎么度量、性能怎么测、两者怎么权衡」系统讲透,这里你先建立「跑通后要验」的意识即可。
最后补一句关于「版本时效」的提醒:量化工具迭代很快,GPTQ/AWQ/GGUF 的具体参数名、默认档位、最佳实践都可能随版本变化。本文给出的档位写法(如 q4_k_m、w4a16)是截至撰写时的通用形态,落地前请以你所用工具对应版本的官方文档为准,不要因文档过期而踩参数错配的坑。
回到开头那句话——三条路线本质都是「混合精度」:GPTQ 靠补偿、AWQ 靠缩放保护、GGUF 靠分层分配比特;选型先盯推理引擎和你的真实瓶颈(显存/速度/质量),让优先级替你做减法,绝大多数人第一步选 GGUF q4_k_m 最稳。 至此,第 2 章「INT4 量化原理与方法」三节(数学 → 校准集 → 主流方法比较)全部就位。下一章(第 3 章)我们进入更硬核也最实用的话题:量化之后,精度到底掉了多少、性能到底快了多少,又该怎么权衡。