[控场AI]
· 5 分钟阅读· 2,608 字

剪掉Gemma 85%权重后,模型反而更快了

剪掉Gemma 85%权重后,模型反而更快了

将Gemma MoE每层固定为8个专家退化为3.81B稠密模型,窄任务保持92%一致率

开发者对Gemma 4 26B-A4B进行激进剪枝:每层只保留默认激活的8个专家并让所有token共用,使MoE退化为3.81B参数的稠密模型,Q4_K_M量化后仅2.75 GB,在Mac上达79 tokens/s、内存约为12B模型的一半。训练采用块局部训练,对齐原模型每层的计算过程而非最终答案,数据全部来自作者自有数据集。在单一分类任务上,剪枝模型与26B原模型一致率为92%,接近12B与26B之间90%的天然差距。作者强调这不是通用模型,而是面向设备端常驻应用的方案,并坦承专家筛选方法与设备端训练可行性仍待验证。

一个MoE模型被砍到只剩15%的参数量,分类任务上还能和原模型保持92%的一致率——这个数字甚至接近12B模型与26B模型之间90%的天然差异。Reddit上一位开发者公布了这次激进的剪枝实验,目标不是造通用模型,而是给一个7×24小时运行在设备上的应用找到更轻、更省电的推理方案。

reddit原帖:我删掉了Gemma 85%的权重

实验做了什么:把MoE变成稠密模型

被剪枝的对象是Gemma 4 26B-A4B,一个混合专家(MoE)架构的模型。作者的思路很直接:MoE每一层默认只激活8个专家,那如果每层只保留8个专家、并让所有token都走这8个专家,路由器就失去了选择的意义,模型退化成一个稠密网络。

结果是3.81B参数,Q4_K_M量化后仅2.75 GB。在Mac上的推理速度达到79 tokens/s,约为12B模型的两倍,内存占用则只有后者的一半左右(3.8 GB)。

这个取舍的代价同样明确:需要知识储备的通用任务会明显退化,因为被删掉的那部分权重所承载的知识已经不存在了。作者自己也强调,这不是一个通用模型,它服务于一个特定应用场景——设备端常驻运行的大模型,内存和能耗是硬约束。

MoE(混合专家)架构的核心是在Transformer的FFN层中并行放置多组“专家”子网络,再由一个路由器(router)为每个token选择性地激活其中少数几个。Gemma 4 26B-A4B中的“A4B”即表示总参数约26B、但每个token平均只激活约4B参数——这正是MoE“参数多、计算少”的由来。由于路由器默认每层只激活8个专家,未被选中的专家在该次前向计算中完全不参与,因此直接把每层裁剪到8个专家并强制所有token共用,就等于绕过了路由决策,把稀疏激活的MoE坍缩成一个稠密网络:参数量大幅下降,计算路径也从“按token动态选择”变成“固定不变”。

文中反复出现的Q4_K_M是llama.cpp生态中的一种4-bit量化方案,K表示采用k-quant分块量化,M为中等质量档位。它把原本16-bit的权重压缩到平均约4.5 bit,在精度损失可控的前提下将显存/内存占用压到原来的约四分之一。因此3.81B参数的模型量化后仅2.75 GB,这是它能常驻于消费级设备的关键前提;文中的79 tokens/s速度与3.8 GB内存占用也都是在该量化格式下测得的。

为什么不用微调,而用“块局部训练”

作者对微调路线持否定态度,理由藏在训练目标的设计里。他用的是block-local training:不训练模型输出正确答案,而是训练模型复现原来的“思考过程”。用他的话转述——要求模型做同样的推理,而不是得到同样的答案。

这个区别在窄任务上尤其关键。如果只对齐最终标签,模型可能学会用完全不同的捷径拟合数据;而对齐块级计算过程,相当于要求每一层在相同输入下产生相同输出,保留了原模型的计算路径。

训练数据全部来自作者自己的数据集。他提到这套方法的开销小到可以在用户自己的设备、用自己的数据完成训练,大约5 GB内存即可运行,目的是缓解部署环境数据与训练数据分布不一致的问题。不过他也坦承,这一点尚未在真实用户设备上验证过。

**块局部训练(block-local training)**是一种逐层、逐块的监督方式:它不把损失建立在模型最终输出的标签上,而是以原模型在每一层(或每一个Transformer block)的输出作为目标,要求剪枝后的模型在相同输入下复现这些中间激活。这与知识蒸馏中“对齐logits或中间特征”的思想同源,但更强调局部性——每次只需冻结其余部分、单独训练一个block,显存需求因此大幅降低(这也解释了约5 GB内存即可训练的说法)。相比端到端微调,它保留了原模型逐层的计算路径,避免模型在窄任务上退化为靠捷径拟合标签。

92%一致率意味着什么

单看92%这个数字容易高估或低估效果。作者给出了一个很好的参照系:在同一个分类任务上,12B模型与26B模型的一致率是90%。换句话说,剪枝后模型与原模型的偏差,和一个小一号的同系列模型与大哥之间的偏差处于同一量级。

这提示了一种评估思路——剪枝是否“可接受”,不该只和原模型比,而应和你能接受的替代方案比。如果你的备选是12B,那么一个2.75 GB、速度翻倍的模型达到相近一致率,吸引力就相当明显。

需要提醒的是,这一结论严格限定在单一分类任务上。多任务、开放域问答、需要事实回忆的场景不在验证范围内,作者也没有做这类宣称。

专家选择:一个待解的开放问题

每层保留哪8个专家,作者的方法是“选一组,然后全部用上”。他在帖子末尾主动向社区求助:有没有更好的专家筛选方法?

这个问题确实是MoE剪枝的核心。专家的重要性因任务而异,按激活频率、路由权重或校准数据上的贡献度来筛选,可能得到不同结果。作者选择固定8个专家,部分原因是与默认激活数对齐,让架构改动最小化。但对于其他任务,这个选择未必最优。

另一个值得关注的细节是训练方法的可迁移性。块局部训练在理论上不依赖特定模型,如果能在消费级设备上完成个性化校准,设备端模型的“出厂即固定”问题就有了新的解法。当然,5 GB内存训练的说法目前还停留在设计层面,实际可行性需要更多验证。

完整技术细节见作者博客原文:Frankensteining Gemma's Experts。

**专家剪枝(expert pruning)**是MoE压缩中的一类专门问题:不同于稠密模型按权重幅度剪枝,MoE中的专家是否重要取决于路由分布,需要依据激活频率、路由概率质量或在校准集上的输出贡献来评估。常见做法包括按平均路由权重排序、按校准数据上的激活次数统计,或利用专家输出的方差衡量其信息量。作者“固定保留8个专家并全部启用”的做法是与默认激活数对齐、改动最小的保守选择,但它隐含假设各专家对目标任务同等重要;若按任务相关的贡献度重新排序,可能在小幅增加改动的前提下获得更好的一致率。

#Gemma剪枝#MoE模型压缩#混合专家模型#模型剪枝#设备端大模型#块局部训练#模型量化
分享:

相关推荐