面对一个庞大臃肿的大模型,如果我们把它想象成一个需要“瘦身”的巨人,那么压缩技术就是从四个不同的维度,对这个巨人进行改造。这四个维度分别回答了四个核心问题:
量化:每个参数用多大的“秤”来称?(数值精度)
剪枝:能不能直接砍掉一些“肉”?(连接数量)
蒸馏:能不能用一个更小但同样聪明的“人”来代替?(模型体积)
低秩分解:构成模型的那些大矩阵,能不能用更紧凑的方式重新表达?(参数结构)
这不是四种彼此孤立的技术,而是一个相互关联、可以协同作战的工具箱。下面,我们先建立一张全景地图,看清它们各自解决的终极问题。
让我们用最直观的方式,将四种技术放在一起比较。请仔细阅读下图,它是本节乃至全章的知识索引。
| 技术 | 核心思路 | 针对目标 | 经典类比 | 技术本质 |
|---|---|---|---|---|
| 量化 | 降低数值精度FP16→INT4 | 每个参数的存储空间 | 用整数代替小数来称重 | 比特数↓ |
| 剪枝 | 移除冗余连接权重置零 | 参数的总个数 | 给树修剪多余的枝叶 | 参数量↓ |
| 蒸馏 | 以大模型教小模型 | 模型的深度与体积 | 学霸的知识浓缩成笔记 | 层数/维度↓ |
| 低秩分解 | 将大矩阵分解成两个小矩阵 | 参数矩阵的表达效率 | 压缩文件无损打包 | 矩阵大小↓ |
这张表揭示了四种技术的根本差异:它们虽然都致力于“压缩”,但动手的部位完全不同。量化不改变参数个数,只改变每个参数的存储格式;剪枝直接减少参数个数,但保留的参数精度不变;蒸馏直接训练一个全新的小模型;低秩分解则从数学结构上优化矩阵的表达效率。
理解四种技术的独立性之后,更重要的是看到它们的互补性。在实践中,这四种技术几乎从不单独使用,而是像套娃一样层层叠加,形成“组合拳”。
典型的压缩流程通常是这样的:
第一步(蒸馏):先用一个大模型当老师,教出一个结构更紧凑、层数更少的学生模型。这一步在宏观层面压缩了模型的深度和宽度。
第二步(剪枝):在这个学生模型的基础上,剪掉那些权重接近零、对输出贡献极小的连接。这一步在微观层面削减了冗余参数。
第三步(量化):最后,将剪枝后的模型参数从 FP16 精度进一步降低到 INT8 甚至 INT4。这一步在比特层面榨干了最后一点冗余空间。
你会发现,低秩分解似乎没有在这个流水线中出现。这正是因为它的角色比较特殊——它常常作为一种“隐式技术”潜伏在其他方法之中。例如,在微调阶段广泛使用的 LoRA 技术,其本质就是低秩分解思想的应用;而在一些高级的剪枝算法中,也会利用低秩近似来补偿被剪掉的权重信息。
面对一个具体的压缩任务,你该如何选择入口?这里给出一个简单的决策指南:
如果你的目标是最快的推理速度:量化是你的首选,特别是结合专用硬件(如GPU的INT8 Tensor Core)时,加速效果立竿见影。
如果你的目标是极致的模型体积:蒸馏加剪枝的组合通常能最大程度地缩小模型文件,让它能跑在手机或嵌入式设备上。
如果你不想重新训练模型:训练后量化(PTQ)和像SparseGPT这样的“一次性”剪枝方法,允许你在几分钟内完成压缩,而无需任何微调。
如果你追求压缩率的极致:那就需要将蒸馏、剪枝、量化全部用上,并接受一定程度的效果损失和更复杂的工程流程。
现在,你已经拿到了模型压缩世界的全景地图。在接下来的四个小节中,我们将逐一放大这四个维度,深入每种技术的核心原理、经典算法和实战代码。
请记住这张图,当你在后续章节中感到细节过于繁杂时,随时回到这里,重新定位你所处的坐标。