
1. 为什么模型量化是本地部署的第一课1.1 显存与带宽才是真正的瓶颈最近一段时间身边聊大模型部署的朋友几乎没有一个绕得开“模型量化”四个字。不管你是想在单张消费级显卡上跑开源模型还是想把视觉模型塞进边缘设备或者干脆只是想在公司内网搭一个私有推理服务第一步要面对的都是同一个问题模型太大硬件不够。这里先算一笔最简单的账。一个7B参数的模型如果用FP16半精度存储光权重文件就要14GB左右显存。到了30B、70B这个量级单卡24GB的RTX 3090/4090就只能干瞪眼。而量化的思路很简单——把模型参数从16bit压到8bit、4bit甚至更低。同样是7B模型INT8大约7GBINT4大约3.5GB一下子就能塞进消费级显卡。但很多人容易忽略另一件事推理速度的真正瓶颈往往不是算力而是显存带宽。GPU每生成一个token都要把全部权重从显存搬到计算单元这个搬运过程极其吃带宽。权重变小了搬运量线性下降吞吐自然上去了。所以量化不只是“塞得下”的问题它还直接决定你每秒能跑几个token。1.2 量化的本质是一次精度换资源交换把量化想得太玄学也没必要。我自己的理解是模型权重里有很多“不敏感的冗余信息”量化做的就是把这些信息用更少的bit存下来。打个比方一张高分辨率照片压成高质量JPEG肉眼看几乎没区别但文件体积小了好几倍量化干的事类似只是压缩对象是神经网络的参数和中间计算值。具体到实现量化通常分对称量化和非对称量化。对称量化把数值范围映射到[-127, 127]非对称量化则额外引入一个zero-point偏移能更好地适配分布不对称的权重。还有per-tensor、per-channel、per-group几种粒度粒度越细精度损失越小但计算复杂度越高。当前开源模型里最流行的做法是per-group量化比如以128个权重为一组单独计算缩放因子在精度和效率之间取一个平衡点。也就是说选模型量化策略本质上是做一道资源交换题你要用多少精度损失去换显存、速度和部署成本。搞懂这个前提后面所有的方法选型和档位对比才谈得上有方向。2. 量化方法的流派与核心选择逻辑2.1 PTQ 与 QAT先分清训练时量化和训练后量化量化方法先得分两大类训练后量化PTQ和量化感知训练QAT。PTQ是模型训练完了之后直接拿权重做转换不需要重新训练速度快、成本低现在开源社区里能下载到的量化模型绝大多数都是PTQ产物。但PTQ也不是无脑压它需要一个“校准”过程——用一小批有代表性的样本跑一遍统计激活值的分布范围从而确定量化缩放参数。QAT则是在训练过程中就模拟低精度误差让模型自己去适应“被压扁”的数值范围。效果通常比PTQ好尤其是低比特场景但它要重训模型成本高得普通团队根本玩不动。所以我的原则是95%的场景用PTQ只有当模型被压到3bit以下、并且任务又是数学代码这种高精度场景时才认真考虑QAT。2.2 GPTQ、AWQ、GGUF都叫量化生态完全不同很多人第一次接触量化会被GPTQ、AWQ、GGUF这几个名字搞得一头雾水。它们其实不是同一层的东西GPTQ和AWQ是具体的量化算法/工具GGUF是llama.cpp生态里的模型封装格式附带了一整套K-quant量化方案。先说GPTQ。它基于二阶信息做逐层量化通俗讲就是量化完一层后会根据误差去微调剩余权重尽量把精度损失摊薄。AutoGPTQ是这个路线的代表实现GPU推理效果好过去两年一直是4bit量化的主流方案。AWQ则换了个思路不去硬刚权重误差而是观察激活值找出那些“哪怕只差一点也会严重影响输出”的权重通道给它们更高精度保护。AutoAWQ量化速度比GPTQ快很多而且4bit下实测质量往往更稳。现在新出的模型如果服务端要上批量推理我基本优先焊死AWQ。GGUF又是另一套玩法它来自llama.cpp生态主打CPU、GPU混合推理Ollama后端默认就是它。GGUF文件里的Q4_K_M、Q5_K_M这些怪异名字指的是不同的量化策略细节我后面专门用一节来说。简单可以先记住要跟Ollama/llama.cpp打交道选GGUF要在vLLM/TGI这类服务框架里跑高吞吐选AWQ/GPTQ在Apple Silicon上优先考虑MLX格式。2.3 三元量化模型1.58bit的特殊物种热词里“三元量化模型”值得单独拎出来聊聊因为它跟常规量化不在一个维度上。普通量化是把FP16小数映射成一堆整数三元量化更极端直接把权重限制成三个值-1、0、1。因为每个权重理论上只需要log2(3)≈1.58bit所以叫1.58bit量化代表工作就是BitNet b1.58这条技术路线。三元量化最大的优势在于矩阵乘法大幅度退化。乘一个权重只需要做加减法遇到0直接跳过理论上推理能效极高内存占用也压到了极致。但问题在于当前主流GPU和推理框架并没有为这种极端低比特做优化标准内核跑起来反而可能比4bit还慢。所以如果你看到“三元量化模型”下载先别急着上生产更多适合端侧芯片、FPGA这类从底层就为它设计的硬件去跑。我的态度是值得持续关注生态成熟后再上车。3. 开源模型量化档位怎么排3.1 先看跑分再看任务别被单一指标带偏“开源模型量化档排名”这个热词说明了大家买量化模型前最想干的事是知道哪个档位性价比最高。社区里经常能看到各种跑分图拿MMLU、HumanEval这些指标横向对比不同量化位宽。这些分数可以参考但我建议别只看一个数字。原因有两点。第一perplexity困惑度这类指标衡量的是模型“整体发疯程度”它降一点可能感知不明显但下游任务表现可能已经崩了不少。第二不同任务对量化敏感度差异很大。闲聊、摘要这类生成式任务容忍度很高4bit都能用代码生成、数学推理这种要求精确逻辑的任务3bit基本就废了。所以正确姿势是先确定你的核心业务类型再去看公开跑分里对应的子项。3.2 各档位经验数据我按照自己这几年的实测感受和社区公认结论整理了一张表。以7B模型为例显存是粗估的实际会因量化组大小和tokenizer略有出入档位每权重大致位宽7B模型显存质量损失推荐场景FP16/BF1616bit约14GB基准旗舰卡、服务端高精度推理INT8 (W8A8)8bit约7GB几乎无感批量推理与精度敏感业务Q6_K6bit约5.5GB可忽略显存宽裕时的均衡选择Q5_K_M5bit约4.7GB很轻微本地部署综合首选Q4_K_M / AWQ 4bit4bit约3.8GB复杂任务能感知低显存卡、长上下文Q3_K_M3bit约3GB明显代码数学退化严重仅闲聊/实验场景Q2_K及以下2bit约2.5GB严重不建议生产三元(1.58bit)约1.58bit约1.7GB取决于模型与内核端侧/专用硬件探索这张表里我想特别强调Q5_K_M。从社区大量反馈和我自己的体感来看Q5_K_M是质量与体积的黄金平衡点。它比Q4_K_M只多占1GB左右显存但复杂任务上的语义完整性和稳定性都明显更好。如果你的显卡放得下优先选Q5_K_M。3.3 不同模型对量化的敏感度差异即便位宽相同不同模型家族量化后的表现也千差万别。一个比较普遍的经验是参数量越大量化鲁棒性越强小模型3B以下压到4bit之后常会出现事实性错误增多的现象。另外代码模型和数学推理模型对量化更敏感我自己实测同样的4bit位宽通用对话任务可能只掉几个点代码生成却能肉眼可见地变笨。这几年新出的模型还有个趋势因为预训练数据更充分、训练方法更稳量化鲁棒性整体变高了。所以如果你看到某篇2023年的文章说“4bit必崩”放到现在的模型上不一定成立还是要具体模型具体测。这也是为什么我一直建议在确定量化档位前把自己业务里的典型任务做成一个小评测集逐个档位跑一遍比任何公开排名都可信。4. 实战35B Compact量化模型怎么下载、怎么跑4.1 先搞清楚什么被量化了MoE模型的总参数与活跃参数热词里有个很长一串的名字“qwen3.6-35b-a3b-apex-mtp-i-compact量化模型”看着像某个社区推送的新模型。这里我拿它当案例讲讲这类大模型量化到底要关注什么。名字里的“35b”指总参数量35B“a3b”通常指激活参数只有3B也就是说这是一个MoE混合专家架构模型——每个token只会激活一小部分专家网络。很多人觉得MoE模型激活参数少所以量化需求低这是个误解。35B总参数的模型即使一次只激活3B专家权重文件依然是按35B来算的。你要把整个模型加载到显存里照样需要70GB的FP16空间。那怎么办把35B总参数量化到4bit大约17.5GB这样24GB的显卡才勉强能跑。所以MoE模型量化的重点其实应该放在那些“每个token都会用到”的共享层上embedding、attention、router、MTP多token预测头。专家层按需加载在显存里的压力没那么大。4.2 下载量化版的时候要看的几个东西现在开源社区下载量化模型主要去Hugging Face和ModelScope这类平台。搜“35b-a3b gguf”或者“35b compact quantized”就能找到对应仓库。但下载前有几个关键点必须核对。第一看量化格式。同一个模型往往同时放出GGUF、AWQ、GPTQ几种文件选错格式你的推理框架根本加载不了。第二看文件名里的档位标签Q4_K_M、Q5_K_M、Q6_K这些不是乱码具体含义前面表格已经解释过了。第三看发布分支。有些仓库默认分支只放原版权重GGUF文件放在“quantized”或“gguf”分支下不切换分支下载会扑空。第四务必核对SHA256。社区模型文件被恶意替换的事情不是没发生过下载后先跑一下校验再进推理流程。根据我的经验本地个人电脑上跑这类35B量化模型最简单的方式就是在Ollama里操作把GGUF文件按要求目录放好写一个Modelfile指定路径然后ollama create就能生成一个可用标签。如果用llama.cpp直接跑命令大致是./llama-cli -m model.gguf -ngl 99其中-ngl控制将多少层放到GPU。4.3 显存到底够不够先算KV Cache很多朋友下载完模型加载就报OOM其实不是模型权重超了而是没给KV Cache留位子。KV Cache是推理时缓存历史token注意力键值的地方它的大小公式大致是batch_size × 序列长度 × 层数 × 隐藏维度 × 2 × 字节数。单看公式有点吓人但你只要记住上下文越长、batch越大KV Cache吃得显存就越多。举例17.5GB的4bit权重放到24GB显卡上看着还剩6GB多但你把上下文拉到32KKV Cache可能就吃掉好几个GB一并发请求多就爆。解决办法有几个把上下文需求降到8K/16K、减小batch、使用量化后的KV Cache部分框架已经支持或者把权质量化档位降半档比如从Q5_K_M换到Q4_K_M。我自己遇到显存吃紧时第一反应是优先保上下文长度因为业务上上下文长度不够往往比模型变笨更致命。5. 视觉模型量化以SAM2为例5.1 SAM2各个模块的显存分配热词里还有一个“sam2量化模型”SAM2是Meta开源的第二代分割模型支持图像和视频分割。它跟大语言模型不一样不是一个纯粹的TransformerMoE结构而是由Image Encoder图像编码器、Memory Attention记忆注意力、Mask Decoder掩码解码器几个模块组成。这里面显存大头是Image Encoder它负责把每一帧图像编码成特征参数和计算量都相当可观剩下的Memory和Decoder相对轻量。所以视觉模型量化更要讲究“重点打击”。对SAM2来说把Image Encoder量化到INT8或FP8显存和延时都能降一大截而Mask Decoder保持FP16精度这样整体分割质量损失很小。如果你只是图省事把整个模型一刀切全部量化反而可能在边缘、小目标这些细节上翻车。5.2 视觉量化和大语言模型量化的差异很多人把LLM量化那套经验直接搬到视觉模型上这是个大坑。视觉分割任务属于密集预测每个像素都要精确模型对激活值量化远比语言模型敏感。语言模型量化里很流行的weight-only策略只量化权重、不量化激活到视觉模型这里通常要谨慎处理激活量化。实际操作中vison模型做INT8推理时我基本都是权重和激活一起量化W8A8再用校准数据把激活范围对齐。另外视觉模型里的LayerNorm、Softmax这类层数值范围很窄量化后误差容易爆炸。常规做法是这些层保持FP16/FP32。这跟你训练时的BatchNorm/LayerNorm计算精度密切相关不要为了省那一点点计算强行量化。5.3 量化SAM2的实操要点如果要落地SAM2量化我建议走ONNX Runtime或TensorRT这条链路。先用原始权重导出ONNX再把模型做INT8量化。校准数据集可以从COCO或者SA-1B里抽几百张覆盖不同光照、尺度效果会比随机图片好很多。量化完成后用mIoU之类的指标和原模型做对比一般掉1到3个百分点属于正常范围超过5个点就要检查是不是校准数据出了问题。视频分割场景还有一个额外坑长期依赖。因为SAM2会跨帧维护一个memory bank量化误差会在长序列里累积帧数一多掩码质量可能肉眼可见地劣化。我的建议是每处理几百帧就用短期窗口重置一下memory防止误差滚雪球。6. 避坑实录常见故障与排查思路6.1 常见问题速查表玩量化模型总会遇到一些反复出现的坑。我把这些年遇到的高频问题整理成一张表方便你照着排查症状可能原因排查/解决思路输出全是NaN或乱码量化文件损坏、校准异常重新下载/校验SHA256换量化工具重新生成简单任务也明显变笨档位太低Q2/Q3升高档位到Q4_K_M或Q5_K_M速度反而比原版慢内核与量化格式不匹配GPTQ配ExLlama、AWQ配AutoAWQ、GGUF配最新llama.cpp中文输出变成奇怪符号tokenizer或词表版本不匹配换官方GGUF版本或重新按原版转换长上下文必然OOMKV Cache占用过高缩短上下文、量化KV Cache、减少batchGPU利用率低、CPU满转层offload过多调高-ngl把关键层全部放GPU6.2 三条最值得记住的实操经验第一条同一档位下不同量化工具生成的模型质量可能差不少。AutoAWQ和AutoGPTQ虽然都是4bit但对同一个模型的量化效果并不完全相同。我会固定一套评测集切换工具后统一对比不凭感觉下结论。第二条GGUF文件名里的K_S和K_M不能随便换。K_S是小尺寸变体显存省一点但有些任务效果会明显弱于K_M。如果显存紧张程度不是特别高尽量选K_M这个主流档。第三条跑任何量化模型之前先跑一遍perplexity测试再跑业务测试。perplexity能快速暴露模型是不是已经“坏了”避免你花半天调业务提示词结果发现是量化文件本身的问题。6.3 我建议的量化模型验收流程说到底模型量化策略没有一个万能答案。我自己的固定流程是这样的先根据显卡显存和业务上下文长度用表格里的估算公式圈出两三个候选档位然后每个档位下载对应量化模型跑一个包含10到20个问题的小评测集覆盖你业务里最典型的场景最后看两样东西——语义完整性和任务完成率而不是只看跑分。这样选出来的量化版本才真正服务于你的业务。最后说一个我个人的体会我见过太多人死磕最高量化档位非要上Q3甚至Q2结果业务效果崩了又怪模型不行。其实换个思路把上下文缩短一点、batch调小一点用Q5_K_M往往就全都解决了。量化是手段跑得好才是目的。