ByteByteGo详解三种大模型压缩技术:量化、剪枝与知识蒸馏
ByteByteGo发布技术图解指南,介绍通过量化、剪枝和知识蒸馏三种技术,在不显著损失智能的情况下压缩大语言模型,使其能在消费级硬件上运行。
AI解读:大语言模型体积增长远超硬件内存发展,70B参数模型需要140GB显存,而高端消费级显卡仅48GB,这是推动模型压缩技术发展的核心矛盾。ByteByteGo这篇指南通过类比(如照片像素)解释了三种主流压缩方法:量化是把每个权重用更少的位数存储,剪枝是删除不重要的权重或结构,知识蒸馏则是让一个小模型学习大模型的行为。这些技术可以叠加使用,最终目标是让普通用户也能在本地硬件上运行高性能模型。对开发者而言,量化通常最易上手且效果明显,剪枝更适合研究团队,而蒸馏需要数据中心级资源来训练学生模型。但需要注意,压缩并非无损:极端量化、激进剪枝或蒸馏后的模型可能在复杂推理和长尾知识上有所退步。实际应用时,需根据硬件条件和任务需求平衡压缩程度与模型能力。
ByteByteGo在技术博客中发布图解指南,系统介绍在不明显降低模型智能的前提下压缩大语言模型的三种技术:量化(Quantization)、剪枝(Pruning)和知识蒸馏(Knowledge Distillation)。文章指出,大语言模型体积增长速度远超硬件显存发展——模型在几年间扩大约100倍,而消费级显卡显存仅提升约一倍,导致运行高端模型与硬件能力之间的差距越来越大。
文章解释,模型参数是智能的基础,以70B参数的模型为例,若每权重用16位(2字节)存储,则需140GB空间,而市场上一张高端显卡通常只有24GB或48GB显存。为了在成本可控的硬件上运行此类模型,研究者发展出上述三种压缩技术。
量化:用更少的位数存储权重
量化通过降低每个权重的存储精度来压缩模型,其核心思想是:大多数权重不需要高精度。文章举例,一个权重如0.02934517存储为0.029对模型输出几乎没有影响,因此可以舍去多余细节。
通常训练时权重以32位浮点存储(FP32),发布时降为16位(FP16或BF16)。更激进的量化可使用4位整数,将每个权重映射到-7到7之间的整数,并存储一个缩放因子以便恢复近似值。文章通过示例说明:将8个浮动权重按0.010步长取整后,模型仍保持相近功能,但存储量大幅减少。
- 从32位降到8位几乎不引起可感知的智能变化。
- 降到4位或更低可能会显著影响模型能力。
剪枝:移除贡献最小的权重或结构
剪枝基于“并非所有权重同等重要”的观察。文章指出,多数权重的值接近零,对输出影响微乎其微,可以删除。简单方法按权重绝对值大小排序并移除最小值;更精细的方法则通过运行样本文本监控每个权重的输入规模,再分配重要性分数。
删除方式分为两:一是将选中的权重设为0,这使矩阵中散布零值,GPU仍需执行计算,但模型损伤较小;二是移除结构性组件(如整个神经元、注意力头或完整层),能真正缩小矩阵,但可能连带删除重要权重,对模型的损伤更大。文章强调,仅剪去“空闲通道”影响不大,但过度剪枝深层通路会显著降低模型智能。
知识蒸馏:训练小模型模仿大模型行为
知识蒸馏不直接修改原始大模型(教师模型),而是从头训练一个结构相同但层数更少、矩阵更小的小模型(学生模型),例如7B参数模型替代70B。学生模型不用原始文本训练,而是通过学习教师模型对同一输入产生的完整输出分布来调整自身权重。
这种方式让学生模型学到更多信息,例如给定“the cat sat on the…”时,不仅知道答案是“mat”,还知道“floor”“couch”也是合理选择,而“purple”则不合理。文章强调,蒸馏需要数据中心级资源运行教师模型,开发者通常只下载已训练好的小模型。蒸馏后的学生模型可能缺乏原创解题能力:它能模仿教师风格,但面对全新逻辑谜题时可能无法解决。