大模型阉割的几种手段

很遗憾,砂糖一年前的预言又一次印证了——力大砖飞的满血超大杯模型正在逐渐失宠。用户们逐渐认识到小型模型结合合理的优化策略(例如CoT、深度思考),能够在某种程度上以更低的算力消耗,达到全参数满血大尺寸模型同级别的输出质量。

那么,如何在不牺牲性能的前提下,精简模型以实现成本与质量的平衡呢?另外,“671B“的Deepseek-v3/r1,就一定是所谓的”满血版“吗?

认识模型

我们所谓的“模型”,其实储存的是模型各个节点的参数,包括权重和偏置。通常来说,参数量越大的模型能够存储的信息越多,理论上可以处理更加复杂的任务。每个参数也的确就是一个数,与计算机中的其他数一样,它也具有位数和精度——32位浮点(fp32),16位浮点(fp16),8位整型(int8)等等。更高的精度,以及更大的参数量,都会提升模型的性能需求,也能提升模型的输出质量,但同时也会消耗更多的计算资源。

模型的阉割技术,目的就是在可容忍的范围内,牺牲部分输出质量,换取更大的性能提升。
当然,如果一味地进行阉割,降本增效,以次充好,那么上面这句话也可以说成——模型的阉割,本质上是为了节约成本,牺牲掉输出质量。

模型阉割大法

蒸馏

将一个大型的、性能卓越的模型作为教师模型,另一个参数量较小的基底模型作为学生,让老师教学生,使基底模型学习到教师模型输出的分布特征,以及获取教师模型的部分知识。

当然,需要强调的是,蒸馏后的模型仍然是基底模型,它依赖于教师模型的知识,但仍与之有别。基底模型较小的参数量决定了其固有的上限所在。

我之前开玩笑地举了个例子,虽然不太雅观,但很形象:
把一个馒头往厕所里放两天,馒头会有一股屎味,但你不能说它就是屎——屎味的馒头说到底还是馒头。

量化

量化,就是将模型的参数由高精度缩减为低精度。就像做物理题时那样,c=299792458m/s 能让你猪脑过载,但令 c=3*10^9m/s 你就豁然开朗——当然这么做的后果就是你的计算结果并不那么准确。

当我们将FP32,或者FP16的参数修约到FP8,INT4,甚至二元量化或三元量化(三进制重出人间),能够带来数倍的模型体量缩减与性能提升——当然代价同时是损失输出质量,精度压缩得越激进,损失越明显。

好在与其他神经网络相比,多数的大型语言模型对量化具有一定的鲁棒性,即使进行一定程度量化,输出质量的损失也并不那么显著。这是因为LLM模型通常局部不变性更好,即使某一层出现偏差,也会在后续层中得到修复。

剪枝

果农为了收获品质更好的水果,会将一些发育不良的枝条减去,使有限的营养专注供给健康的果子。神经网络也是同理。偌大的神经网络中,存在着大量看起来不那么重要的神经元或者连接。由于这些连接对于模型的输出贡献极小,但实实在在地消耗了计算性能,通过重要性排序和相关性分析,删去一些”不重要“的参数,就能减小模型体积,提升运行时的性能。

剪枝是缩减模型体积,提升运行时性能的有效手段,结合微调手段重建冗余,合理利用剪枝,可以获得非常好的效果。但是过于激进的剪枝策略会删去大量非0权重,会实实在在地影响模型的泛化能力。

总结

模型的阉割大法不仅只有蒸馏一种,量化和剪枝都是重要的手段,并且都具有便捷性,可以在部署时进行。因此,“671b”参数的deepseek,未必就是满血版,它只声称了671b的参数量,但是参数的精度如何,加载模型时是否离线剪枝,又删去了多少参数,这些问题都会影响模型最终的表现。

阉割大法是双刃剑。各种事实已经证明了阉割模型是时代发展趋势,我们是时候摒弃猛堆参数量和精度的思维了。但同时也必须拒绝一种行为,那就是使用阉割的模型以次充好。下一次,当有商家再宣传自己提供671b”满血“大模型时,你就应当多留个心眼,这真的是满血的模型吗?

当然,我更希望将来能够有更加规范的行业要求——对于自部署的开源模型,商家不能仅仅公布模型的代号和原始参数规模,而应当披露具体的模型哈希、量化位数、剪枝比率和激活参数规模,以保障消费者的知情权。或者,应当允许消费者设定Temperature=0,以自行检查模型的一致性。

就当是我的下一个预言吧,不过我估计这个行业规范至少需要一年的等待时间。

看完觉得有收获,记得点点认可。虽然不知道有啥用但是搞一个玩玩(

107 个赞

认真砂糖 :heart_eyes:

3 个赞

1.58 bit :tieba_087:

3 个赞

好的蒸馏方法真的重要 :tieba_087:

1 个赞

认真看完了,非常赞同。支持了!
我一直认为“满血版”这种修辞方式有误导性,因为从来没有一个标准来定义所谓“满血”应当包含的要素,最终吃亏的还是小白们。

1 个赞

现在的确没有什么模型规范,所谓的满血或许只是商家用于夸大的噱头。

1 个赞

感谢科普

太强了!

好帖,拜读,课后笔记
大模型阉割的几种手段,蒸馏 量化 剪枝

感谢科普

确实形象 :rofl:

感谢佬分享,但是吃饭的时候看到了这段 :tieba_087:

看完了,已经

砂糖大佬的深度科普文 :clap:

感谢科普,从前GPT4时代就困扰我的问题–所谓模型阉割、满血到底是怎么回事,终于在这里得到了一个全面的解答 :joy:

话说那个精度的问题我还是在这段时间全民部署deepseek r1时才知道的,我以前一直以为这和什么服务器的“算力”供应有关系,现在终于知道主要手段还是做在模型上 :joy:

1 个赞

感谢佬友分析,btw,这应该叫压缩技术(Compression)吧,是正面的技术():

  • 剪枝(Pruning)
  • 知识蒸馏(Knowledge Distillation)
  • 量化(Quantization)
  • 低秩分解(Low-Rank Factorization)

比如:

7 个赞

有时候真难以想象人脑能和671b参数的思考模型媲美。从工具的角度来看生物还真是很有意思,比如植物排氧固氮,鸡下蛋之类的

这东西是好还是坏取决于怎么使用它,毕竟拿阉割模型以次充好目前也不鲜见 :tieba_087:

关于低秩分解,它的实现成本高,一般不会在发布后进行,并且可以认为是变动了模型结构。所以我更倾向于这是一种后处理手段 :tieba_087:

1 个赞

你太快了

2 个赞

emmm……看完这个我倒挺想知道英伟达托管的是啥精度