4.3 端侧模型压缩与推理优化 本节摘要:模型压缩与推理优化是把大模型塞进设备的工程学。核心三件套是量化、剪枝、蒸馏:量化把浮点权重压成整数,剪枝删掉冗余结构,蒸馏让大模型把知识"教"给小模型。再加上算子融合、缓存复用、低秩分解等推理侧优化,一个 70B 模型最终能变成手机里的几个 GB。本节讲清每一步的原理、顺序与精度代价,以及端侧 runtime 怎么选。 上手前先明确 阅读完本节,你应当能够: 说出量化、剪枝、蒸馏三种压缩手段各自的作用对象与适用位置。 区分 INT8 与 INT4 的收益与代价,说出 GPTQ、AWQ 两条量化路线的差异。 区分结构化剪枝与非结构化剪枝,判断哪种更适合 NPU 加速。 解释算子融合、KV 缓存复用、低秩分解在推理优化中的作用。
本节摘要:模型压缩与推理优化是把大模型塞进设备的工程学。核心三件套是量化、剪枝、蒸馏:量化把浮点权重压成整数,剪枝删掉冗余结构,蒸馏让大模型把知识"教"给小模型。再加上算子融合、缓存复用、低秩分解等推理侧优化,一个 70B 模型最终能变成手机里的几个 GB。本节讲清每一步的原理、顺序与精度代价,以及端侧 runtime 怎么选。
阅读完本节,你应当能够:
一个 70B 参数的模型,FP16 精度下要占 140GB 存储——这比一台旗舰手机的全部内存还大十几倍。而 2026 年的用户期望是:手机里跑 3B 对话模型、PC 里跑 7B 编程助手、手表里跑一个毫瓦级唤醒模型。把大象塞进冰箱不是魔术,是工程。
我们把压缩比作物流重组:云端大模型是整列货运火车,端侧设备是小区快递柜。火车不能直接开进小区,货物必须重新打包——大件拆小件(蒸馏)、多余的填充物扔掉(剪枝)、箱体换成更薄的材料(量化),最后还要优化配送路线(算子融合与缓存)。每一道工序都有代价:打包太狠,货物会碎(精度崩);路线太绕,时效反而差。
本节的核心主张:压缩的本质是用精度换体积,但精度损失不是均匀分布的——注意力层最敏感,保住了它,就保住了模型大半功力。 理解了这一点,你就掌握了压缩工程的总纲。
模型权重原本是 32 位浮点数(FP32),量化就是把它们映射到更小的取值空间:INT8 用 8 位整数表示,INT4 用 4 位。映射会产生舍入误差,但神经网络对噪声有天然的鲁棒性——就像 JPEG 压缩肉眼几乎看不出差别,量化后的模型在多数任务上依然可用。
2026 年端侧主流是两种训练后量化路线:GPTQ 按列最小化量化误差,对权重矩阵逐列做补偿;AWQ 则先看激活值的分布,把"重要通道"(激活值大的通道)保护起来,让误差集中在不重要的地方。两者的共同哲学是:误差不可避免,但可以定向投放到模型不在乎的位置。两条路线都依赖一个前置步骤——校准:拿一批有代表性的输入数据喂给模型,统计权重与激活的真实分布,量化参数(缩放因子与零点)就是从这些统计里算出来的。校准数据选得好不好,直接决定量化后模型的质量,这是压缩工程里最容易被低估的一环。
| 精度 | 相对体积 | 相对速度 | 精度损失 | 2026 年适用位置 |
|---|---|---|---|---|
| FP16 | 1 倍 | 1 倍 | 无 | 云端与 PC 训练侧 |
| INT8 | 1/2 | 2 到 3 倍 | 很小 | 端侧安全底线 |
| INT4 | 1/4 | 3 到 4 倍 | 可见 | 对话、翻译等生成任务 |
| 混合精度 | 1/4 到 1/2 | 2 到 4 倍 | 受控 | 注意力层高精度、其余低精度 |
我们的经验法则是:INT8 是端侧部署的默认起点,INT4 是 2026 年的主流冲锋位,混合精度是精打细算者的进阶玩法——把注意力层留在 INT8,把前馈层压到 INT4,往往能用一半的代价拿到八成的收益。
训练好的模型里,大量权重接近零、大量神经元对输出几乎没有贡献。剪枝就是把这些冗余删掉。它分两种:
用园艺类比:结构化剪枝是剪整根枝条,树形立刻变清爽;非结构化剪枝是摘单片叶子,树看起来秃了,但养分运输路线一点没省。2026 年行业共识是:端侧部署只做结构化剪枝,非结构化剪枝留给科研场景。
蒸馏是让一个大模型(教师)教一个小模型(学生):学生在训练时不仅学习真实答案,还要模仿教师的输出分布——教师说"这个答案 70% 可能是 A",学生就朝着这个软分布逼近,学到的是教师的理解方式,而不只是答案本身。更进阶的注意力蒸馏,连教师的注意力分布一起学,让学生的"关注点"和教师对齐。
蒸馏的效果上限取决于教师,学生的参数量可以压到教师的十分之一甚至更少。它和量化、剪枝不冲突,反而应该排在前面——先把架构缩小,再剪枝、再量化,顺序错了误差会层层放大。
压缩解决"装得下",推理优化解决"跑得快、不烫手":
此外还有一类偏工程的手段值得提:内存分页与流式加载。大模型权重不一次性全部驻留内存,而是按需分页调入、用后即弃,配合操作系统级的页面管理,可以让 7B 模型在 4GB 内存的设备上勉强跑起来——代价是首次加载慢、偶发卡顿。它是"装得下"的最后一道保险,不是首选方案。
| 引擎 | 定位 | 优势 | 劣势 |
|---|---|---|---|
| TFLite | 移动端视觉与语音 | 生态成熟、算子覆盖全 | 大模型生成支持弱 |
| ONNX Runtime | 跨框架转换桥 | 格式统一、硬件适配广 | 体积与启动开销偏大 |
| LLM 专用引擎 | 大模型生成推理 | 内存占用低、INT4 高效 | 算子范围窄、通用性差 |
选型原则很简单:跑感知类小模型用 TFLite 一类移动端框架,跨框架迁移用 ONNX 桥接,跑生成式大模型用 LLM 专用引擎——它们按内存映射与分块加载设计,INT4 量化推理效率是通用框架的数倍。
这个流程的每一步都有回头路:设备实测发现精度崩了,就退回上一级调整参数;线上监控发现某个任务类型掉点,就针对性补蒸馏数据。压缩不是一次性工程,而是一条需要持续维护的产线。
顺序是硬约束:先蒸馏、再剪枝、最后量化。蒸馏先定架构规模,剪枝在架构内删冗余,量化最后压体积。如果先量化再剪枝,量化误差会被剪枝放大;先剪枝再蒸馏,学生学到的就是一个残缺教师的输出。顺序错了,同样的压缩比例,精度损失可能差一倍。
| 组合方案 | 体积压缩 | 精度损失 | 部署难度 | 典型场景 |
|---|---|---|---|---|
| 仅 INT8 量化 | 50% | 极小 | 低 | 语音唤醒、OCR |
| 蒸馏 + INT4 | 90% | 小 | 中 | 手机 3B 对话 |
| 剪枝 + 量化 | 60% | 中 | 高 | 结构冗余大的 CNN |
| 全链路组合 | 95% 以上 | 中高 | 高 | 极简 IoT 模型 |
一段伪代码可以概括整个管线:
def build_edge_model(teacher, data): student = distill(teacher, architecture="3B", data=data) pruned = prune(student, method="structured", ratio=0.3) quantized = quantize(pruned, precision="int4", algorithm="gptq", calibration=data) return optimize_graph(quantized, target="npu", fuse_ops=True, enable_kv_cache=True)
⚠️ 常见坑:压缩完只跑测试集就上线。量化模型对输入分布漂移比原模型敏感得多——测试集是标准普通话,用户说的是方言夹英文,掉点可能从 1% 变成 15%。必须用设备端真实输入做校准,再上线灰度监控精度回落。
⚠️ 常见坑:INT4 无脑上。数学推理、代码生成这类任务对低比特极其敏感,压缩后错误率可能翻倍。先跑任务级评测,掉点超过业务阈值就退回 INT8,或者只对非关键层用 INT4。
💡 关键直觉:注意力层是模型的"大脑皮层",对量化误差最敏感。混合精度策略——注意力层保持 INT8、前馈层压到 INT4——是 2026 年性价比最高的压缩方案,能用一半的压缩收益拿到八成以上的质量。
💡 关键直觉:端侧推理的隐形开销在内存搬运,不在计算本身。算子融合和 KV 缓存优化的收益往往大于继续压缩模型体积——先把带宽用好,再纠结那几个百分点的体积,方向才正确。
压缩质量的验证要分三层:任务级评测(翻译看 BLEU、摘要看 ROUGE、对话靠人工评分与胜率对比)、设备级实测(推理帧率、温升曲线、续航损耗、内存峰值)、线上级监控(分任务类型、分输入分布的精度回落告警)。我们的建议是三层都过才发布,其中设备级实测最容易被人跳过——纸上精度再漂亮,设备上烫手、卡顿、杀后台,用户一句话就卸载了。另外要建立"压缩基线档案":每一次压缩的参数组合、评测分数、设备实测数据都归档留痕,线上掉点时能快速定位是哪个环节的改动惹的祸。压缩工程做久了,这套档案就是团队的资产,比任何论文都值钱。
压缩与优化解决了"装得下、跑得快",但"值不值得这么折腾"取决于场景与生意——下一节我们把端侧 AI 的市场场景、成本模型与选型决策讲透。