MoE 压缩(一)Pruning

MoE 压缩(一)Pruning

NAEE

Not All Experts are Equal: Efficient Expert Pruning and Skipping for Mixture-of-Experts Large Language Models(ACL’24)

Method

枚举式剪枝 给定保留专家的数量 rr , 枚举剪枝集合 CC,计算剪枝前的MoE层 F\mathcal{F} 和剪枝后的 F\mathcal{F}',计算重建损失:

minCF(x,C)F(x)F, s.t. C{E1,,En},C=r\min_{C}\|\mathcal{F}'(x,C)-\mathcal{F}(x)\|_{F}, \text{ s.t. } C\subset\{E_1,\cdots,E_{n}\},|C|=r

很显然枚举只使用于Mixtral-8x7B这种专家数量极少的模型,对于目前包含上百专家的前沿SMoE,计算成本是不现实的。

动态跳过 根据routing weights判定是否跳过专家的计算。具体的,例如当激活专家数量为 k=2k=2 时,考虑被激活的权重 wE1<wE0w_{E_1}<w_{E_{0}} ,当 wE1<βwE0w_{E_1}<\beta\cdot w_{E_{0}} 时,不计算 E1E_1 。超参数 β\beta 可以设置为在校准数据集上关于 wE1/wE0w_{E_1}/w_{E_{0}} 的中位数。

Experiment

  • 验证模型Mixtral-8x7B,Mixtral-8x7B-Instruct
  • 校准集为C4,128条2K样本
  • 剪枝时间30min(r=6),90min(r=4)

MoE-I2^2

MoE-I^2: Compressing Mixture of Experts Models through Inter-Expert Pruning and Intra-Expert Low-Rank Decomposition(EMNLP’24 findings)

Method

专家间剪枝

  • 估计每层的重要性 - 刨掉某个专家,计算lmloss作为该专家的重要性:

Ii,j=L(x,{Ei,1,,Ei,Mi}/{Ei,j})I_{i,j}=\sum\mathcal{L}(x,\{E_{i,1},\cdots,E_{i,M_i}\} / \{E_{i,j}\})

每一层的重要性就是所有专家取个总和 Ii=j=1MiIi,jI_i=\sum_{j=1}^{M_i} I_{i,j} ,归一化之后就得到每层的剪枝率。

  • 使用基因搜索算法代替暴搜:每个节点为可能的剪枝组合 CnC_{n} ,初始化 N=100N=100 的集合 {C1,,CN}\{C_1,\cdots,C_N\} ,对于每个节点计算其剪枝带来的误差:

Lin=Fi(x)Fi(x,{Ei,1,,Ei,Mi}/{Cn})F\mathcal{L}_{i}^n=\sum\|\mathcal{F}_i(x)-\mathcal{F}_i(x,\{E_{i,1},\cdots,E_{i,M_i}\}/\{C_n\})\|_F

选出最小损失的组合进行分裂,分裂出的子节点会随机替换其中的被剪枝的专家,重复迭代50次,获得每层最好的 KK 个剪枝组合。

  • Block-wise KT-Reception Field: block-wise就是 TT 层作为一块一起考虑最优剪枝,然后仍然是暴搜所有剪枝组合,即 KTK^T 种搜索空间。

专家内剪枝

  • 根据先前算出的专家的重要性 Ii,jI_{i,j} 来计算每个专家的秩,给定每个专家的目标平均秩为 Ra\mathcal{R}_{a}

Rij=(Iij+ϵ)αj=1Mi(Iij+ϵ)αRaMi\mathcal{R}_{ij}= \lfloor \frac{(I_{ij}+\epsilon)^{\alpha}}{\sum_{j=1}^{M_i'}(I_{ij}+\epsilon)^{\alpha}}\cdot\mathcal{R}_{a}\cdot M_i'\rfloor

MiM_i' 是剪枝后第 ii 层的专家个数, α\alpha 是平滑因子,避免秩分布的过度线性。

  • 根据秩分配 Ri,j\mathcal{R}_{i,j} ,使用SVD-LLM的方法进行分解:

    • 截断感知的数据白化 (Truncation-aware Data Whitening)
    • 分层闭式更新 (Hierarchical Closed-form Updates)
  • 微调:最后还要对MoE的权重进行LoRA微调

CAMERA

CAMERA: Multi-Matrix Joint Compression for MoE Models via Micro-Expert Redundancy Analysis (AAAI’26)

Method

结构化剪枝方法,将FFN中的intermediate维度进行剪枝。将MoE的计算从神经元的粒度进行表示:

y=iN×dff[ai(x)σ(Wigatex)Wiupx]Widown=iN×dffϕiWidowny=\sum_{i}^{N\times d_{\text{ff}}}[a_i(x)\cdot \sigma(\textbf{W}_i^{\text{gate}}x)\cdot \textbf{W}_i^{\text{up}}x]\cdot \textbf{W}_i^{\text{down}}=\sum_{i}^{N\times d_{\text{ff}}}\phi_i\cdot \textbf{W}_i^{\text{down}}

ai(x)a_i(x) 表示router输出的权重。从校准集计算定义每个神经元的energy,激活模长&权重模长:

Ei=Φ:,i22Wi22E_i=\|\Phi_{:,i}\|_2^2\|\textbf{W}_i\|_2^2

Φ:,i\Phi_{:,i} 表示校准集采集到的所有第 ii 个神经元的激活值。计算完成后根据energy进行排序,取Top-|S|个即为剪枝结果。Energy定义可以进行扩充,进一步考虑激活值中最大值的影响:

Ei=[(1α)Φ:,i22+αΦ:,i2]Wi22E_i=[(1-\alpha)\|\Phi_{:,i}\|_2^2\|+\alpha\|\Phi_{:,i}\|_{\infty}^2]\cdot\|\textbf{W}_i\|_2^2

每一层剪枝率固定,从上而下逐层剪枝(需要将剪枝后的MoE层重新计算输出作为下一层的输入)。

混合量化部分暂略。

Experiment

  • 验证模型Deepseek-MoE-16B-base,Qwen2-57B-A14B,Qwen3-30B-A3B
  • 校准集为Wikitext2,128条2K样本
  • baselines:NAEE,D2D^2-MoE
  • 剪枝时间0.1 GPU hours
  • 在40%,60%剪枝率下显著优于对比方法

REAP

REAP THE EXPERTS: WHY PRUNING PREVAILS FOR ONE-SHOT MOE COMPRESSION(ICLR’26)

Method

本质是找了一个新测度,通过测量其对每一层输出的大小(magnitude)的共享来判断重要性。对于专家 EjE_j,其根据topk权重 gj(x)TopK(g(x))g_j(x)\in\text{TopK}(g(x)) 选出的输入Xj={xjTopK(g(x))}\mathcal{X}_j=\{x|j\in\text{TopK}(g(x))\},显著性得分为:

Sj=1XjxXjgj(x)Ej(x)2S_j=\frac{1}{|\mathcal{X}_j|}\sum_{x\in\mathcal{X}_j}g_j(x)\cdot\|E_j(x)\|_2

得分最低就剪掉。

Experiment

  • 验证模型Qwen3-30B-A3B,GLM-4.5-Air,Qwen3-Coder480B-A35BInstruct-FP8,Kimi-K2-Instruct-W4A16,每层MoE剪枝或者合并25%,50%的专家。
  • 校准集:对多选题和代码生成,使用c4和evol-codealpaca来校准;对于大于110B模型额外使用xlam-function-calling和SWE-smith-trajectories;对创作和数学任务,使用WritingPrompts curated和tulu–sft-personas-math。
  • 小于110B的模型用1024条2K样本,大于110B模型用12228条16K样本
  • baselines:M-SMoE,HC-SMoE,frequency-pruning,EAN

Points

为什么merging很困难?

  • 作者定量分析了合并MoE的质量,通过测量N-gram diversity发现合并后的模型多样性显著低于REAP和原模型。
  • 作者将merging的困难归因于专家合并的非局部特性(non-local)专家集群的高基数特征(high cardinality)
  • 哪怕用了权重匹配(Weight Matching)、SVD分解这些对齐手段,这些专家在权重空间和奇异向量方向上依然高度不一致。专家们已经分化得太厉害了,强行合并(比如取平均值)会导致模型性能崩塌
  • 无论是 HC-SMoE 还是 M-SMoE,都产生了大量的“独苗簇”,这种情况等同于剪枝。

垂域校准的重要性
作者比较了使用c4和evol-codealpaca对于code任务的影响,通用数据显著弱于垂域数据。

Mosaic Pruning

Mosaic Pruning: A Hierarchical Framework for Generalizable Pruning of Mixture-of-Experts Models

这篇文章的算法还是比较复杂的。

Method

Global Variability-aware Pruning (GVP)

  • 提出测度Activation Variability Score SvarS_{\text{var}},用来衡量每个专家的specialization(特殊化、专门化程度),本质是计算router的logits和均匀分布之间的KL散度:

Svar(i)=t=1Npt,iZlog(pt,iZ/1N)S_{\text{var}}(i)=\sum_{t=1}^{N}\frac{p_{t,i}}{Z}\log(\frac{p_{t,i}}{Z}/\frac{1}{N})

其中 NN 是token总数,pt,ip_{t,i} 是router对于token tt 分配给专家 ii 的概率值,ZZ 是归一化常数 Z=t=1Npt,iZ=\sum_{t=1}^N p_{t,i} 。显然当KL散度为0时,说明这个专家对于所有token都分配了相同的概率值;相反,如果KL散度很大,说明这个专家只对于特殊的部分token分配了高概率,就说明其专门化程度高。

  • 保留 mm 个通用化专家。

Cgeneral=argminC=mLrecon(D,C)C_{\text{general}}=\arg\min_{|C'|=m}\mathcal{L}_{\text{recon}}(\mathcal{D},C')

  • 再从剩下的选出最具有专门化的 rmr-m 个专家。

Cdiv=argminC=rmiCSvar(i)C_{\text{div}}=\arg\min_{|C'|=r-m}\sum_{i\in C'}S_{\text{var}}(i)

  • 那么最终保留的专家集合就是 CgeneralCdivC_{\text{general}}\bigcup C_{\text{div}}

Mosaic Pruning (MoP)

作者认为GVP的缺陷在于实际上有很多专门化的专家本质是十份相似的,直接对于 SvarS_{\text{var}} 作排序然后择优会导致这些专家之间存在“专门化”上的重复。所以使用了先聚类再选择的策略。

  • 使用多领域的校准数据集,确保聚类边界清晰,使用K-means对所有token的嵌入聚类到 K=rmK=r-m 个类别;
  • 专家之间根据 Spearman’s rank correlation coefficient计算出其相似矩阵,每个专家的描述子定义为 viRk\mathbf{v}_i\in\mathbb{R}^{k}

vi,k=1TktTkEi(xt)zreal,t22\mathbf{v}_{i,k}=\frac{1}{|\mathcal{T}_k|}\sum_{t\in\mathcal{T}_k}\|E_{i}(x_t)-z_{\text{real},t}\|_2^2

其中 Tk\mathcal{T}_k 表示所有属于域 kk 的token,zz 表示原始MoE计算得到的激活向量值。

  • 层次聚类。没太看懂的一点是聚类时对于两个聚类 Ca,CbC_a,C_b 的衡量究竟是根据上一步的相似度矩阵还是根据Ward’slinkage:

D(Ca,Cb)=CaCbCa+Cbμaμb22D(C_a,C_b)=\frac{|C_a||C_b|}{|C_a|+|C_b|}\|\mu_a-\mu_b\|_2^2

其中 μa=1CaiCavi\mu_a=\frac{1}{|C_a|}\sum_{i\in C_a}\mathbf{v}_i 为聚类中心。

  • 最终是从 KK 个聚类里选出 SvarS_{\text{var}} 最高的那个专家。

Experiment

  • 验证模型Mixtral-8x7B-Instruct,Qwen1.5-MoE-A2.7B-Chat
  • 校准集:混合数据集,文章没说,但github里看起来是c4_en,wikipedia_en,the_stack_python,squad,local_math,alpaca的组合。
  • baseline只是枚举和GVP,而且枚举方法的校准集仅仅是c4,通用选择题上的性能优势一般,对于math和coding任务也只比较了枚举方法。
  • Mixtral上的热力图显示枚举方法对于8裁4会所有层只集中激活第一个专家,丧失了多样性。

MoE 压缩(一)Pruning
https://jyk-122.github.io/2026/03/19/MoE 压缩(一)Pruning/
作者
Yikun Jiang
发布于
2026年3月19日
许可协议