尽管专家混合(MoE)模型在训练时通过仅激活每个输入的参数子集来巧妙地处理计算成本,但其庞大的总参数量在推理时仍构成重大挑战,尤其是在内存占用和部署复杂度方面。标准模型压缩方法,如剪枝、量化和知识蒸馏,为此类问题提供了缓解方案。然而,MoE 模型的独特架构,包含独立的专家和门控网络,要求对这些方法进行仔细调整。若简单应用压缩,可能会破坏专家已习得的专门性或路由机制的有效性。MoE 模型剪枝策略剪枝旨在通过移除冗余参数或组件来减小模型大小。在 MoE 的场景下,剪枝可应用于多个层面:专家内部权重剪枝: 这是最直接的应用,类似于密集模型的剪枝。非结构化剪枝根据幅度或重要性评分等标准移除单个权重,使每个专家内部的权重矩阵稀疏化。结构化剪枝移除更粗粒度的内容,如整个神经元或通道。挑战: 对所有专家应用统一剪枝,可能会不成比例地影响使用频率较低但可能高度专业化的专家。自适应剪枝策略,即根据每个专家的利用率或敏感性确定剪枝比例,可能更具成效。考量: 剪枝如何与专家专门化协同作用?激进剪枝可能导致同质化,从而降低 MoE 结构带来的益处。门控网络剪枝: 门控网络本身可以被剪枝。由于路由器通常比专家小得多,直接的尺寸缩减通常有限。然而,简化路由器可能会略微减少路由决策期间的计算开销。挑战: 门控网络的输出(路由决策)作用核心。剪枝必须谨慎进行,以避免降低路由质量,进而影响整体模型性能。敏感性分析在此处具有重要作用。专家剪枝: 这是一种更粗粒度的结构化方法,其中整个专家从 MoE 层中移除。这能显著减少参数,但也最具破坏性。识别: 可以根据低利用率(不常路由的令牌)、高冗余(与其他专家功能相似)或对整体性能贡献小(通过消融研究评估)来识别待剪枝的专家。挑战: 移除专家需要仔细处理。门控网络需要调整或重新训练,以避免将令牌路由到已移除的专家。负载均衡机制也可能需要重新校准。简单地移除一个专家并让其分配的令牌被丢弃,可能会严重降低性能。一种常见的做法是在专家剪枝后对模型进行微调,以使剩余专家和路由器得以适应。剪枝目标的比较:digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", color="#495057", fillcolor="#e9ecef", style=filled]; edge [fontname="sans-serif", color="#495057"]; subgraph cluster_moe { label = "MoE 层"; bgcolor="#dee2e6"; style=filled; color=lightgrey; Router [label="门控网络\n(路由器)", fillcolor="#bac8ff"]; subgraph cluster_experts { label = "专家"; bgcolor="#ced4da"; style=filled; color=lightgrey; Expert1 [label="专家 1", fillcolor="#a5d8ff"]; Expert2 [label="专家 2", fillcolor="#a5d8ff"]; ExpertN [label="专家 N", fillcolor="#a5d8ff"]; node [shape=plaintext, fillcolor=none, style=""]; "" [label="..."]; } Router -> Expert1 [style=dashed]; Router -> Expert2 [style=dashed]; Router -> ExpertN [style=dashed]; } subgraph cluster_pruning { label = "剪枝目标"; bgcolor="#f8f9fa"; style=filled; color=lightgrey; node [shape=ellipse, style=filled]; PruneWeights [label="权重剪枝\n(专家内部)", fillcolor="#96f2d7"]; PruneRouter [label="路由器剪枝", fillcolor="#ffec99"]; PruneExpert [label="专家剪枝\n(移除专家 2)", fillcolor="#ffc9c9"]; } PruneWeights -> Expert1 [label="影响内部权重"]; PruneWeights -> ExpertN; PruneRouter -> Router [label="影响路由器参数"]; PruneExpert -> Expert2 [label="移除整个专家"]; }此图展示了 MoE 层中不同的剪枝目标:剪枝专家内部的单个权重、剪枝门控网络,或移除整个专家。MoE 量化方法量化降低了模型权重和/或激活的数值精度(例如,从 32 位浮点数到 8 位整数,甚至更低)。这显著减少了内存占用,并能加速支持低精度运算的硬件上的计算。专家量化: 每个专家网络都可以独立量化。可以应用训练后量化(PTQ)或量化感知训练(QAT)等方法。考量: 所有专家都应该量化到相同的精度吗?与剪枝类似,使用频率较低的专家可能对量化噪声更敏感。混合精度量化,即不同的专家(或专家内部的层)使用不同的位宽,可能更有益处。或许被大量使用的专家可以容忍较低精度,而核心或敏感的专家则保留较高精度。益处: 减少存储专家参数所需的内存,这通常是 MoE 模型大小的主要决定因素。门控网络量化: 量化路由器也是可行的。挑战: 路由器通常涉及 softmax 计算以生成路由概率。这些概率的数值稳定性和精度对量化可能很敏感,这可能导致次优的路由决策,甚至改变选定的专家集合(例如,在 top-k 路由中)。对路由器进行仔细校准或使用 QAT 可能是必要的。激活量化: 量化层间流动的激活(包括发送给专家的令牌表示和返回的输出)进一步减少了内存带宽需求和计算成本。益处: 对于分布式环境中的 All-to-All 通信尤其重要。在令牌跨设备混洗之前对其进行量化,可以显著减少通信量。对负载均衡的影响: 量化可能会轻微改变路由概率。评估量化是否会对压缩后的负载均衡或专家利用模式产生不利影响是必要的。MoE 模型知识蒸馏知识蒸馏(KD)涉及训练一个较小的“学生”模型,使其模仿一个较大的预训练“教师”模型的行为。对于 MoE 模型,存在几种 KD 策略:MoE 到密集模型蒸馏: 训练一个较小的标准密集模型,以复制大型 MoE 教师模型的输出分布。如果目标是为了稀疏性无法有效利用的部署环境而最大程度简化,这会很有用。然而,它牺牲了推理时条件计算的潜在计算益处。MoE 到更小型 MoE 蒸馏: 训练一个拥有更少或更小专家(或两者兼有)的学生 MoE 模型,使其与教师 MoE 模型相匹配。这保留了稀疏架构,同时减小了尺寸。匹配输出: 最简单的形式涉及使用标准 KD 损失(例如,软化概率上的 Kullback-Leibler 散度)将学生 MoE 的最终输出对数与教师 MoE 匹配。匹配路由器行为: 鼓励学生的门控网络模仿教师的路由决策。这可以通过添加一个损失项来完成,该损失项使教师和学生对每个令牌的路由概率分布之间的差异最小化。令 $P_教师(e|x)$ 为教师路由器对输入 $x$ 分配给专家 $e$ 的概率,而 $P_学生(e|x)$ 为学生的概率。损失项可以基于 $KL(P_教师 || P_学生)$。匹配专家输出: 强制学生的专家模仿相应教师专家的输出。这更为复杂,因为它需要定义教师和学生专家之间的映射(尤其是在专家数量不同时),并可能对齐中间表示。结合方法与评估权衡通常,最显著的压缩增益来自结合这些方法。例如,一个 MoE 模型可以被剪枝(移除权重并可能移除整个专家),然后量化,并可能使用来自原始未压缩模型的知识蒸馏进行微调。评估压缩后的 MoE 模型需要多方面的方法。除了准确率或困惑度等标准任务指标外,衡量以下方面也是必要的:推理性能: 每个令牌/批次的延迟,吞吐量。内存使用: 总参数内存,推理期间的峰值激活内存。硬件效率: 专用硬件单元(例如用于低精度的张量核心)的利用率。路由保真度: 压缩后的路由器与原始路由器匹配的紧密程度如何?衡量专家利用率和负载均衡的变化(例如,每个专家的令牌变异系数)。目标是找到压缩比、模型性能和推理效率之间的最佳平衡,并根据特定的部署限制进行调整。{"data": [{"x": [1, 2, 4, 8, 16], "y": [98, 97.5, 96, 93, 88], "type": "scatter", "mode": "lines+markers", "name": "准确率 (%)", "marker": {"color": "#228be6"}}, {"x": [1, 2, 4, 8, 16], "y": [1000, 550, 300, 180, 100], "type": "scatter", "mode": "lines+markers", "name": "延迟 (ms)", "yaxis": "y2", "marker": {"color": "#fd7e14"}}], "layout": {"title": "MoE 压缩权衡", "xaxis": {"title": "压缩比(原始大小 / 压缩大小)"}, "yaxis": {"title": "模型准确率 (%)", "titlefont": {"color": "#228be6"}, "tickfont": {"color": "#228be6"}}, "yaxis2": {"title": "推理延迟 (ms)", "overlaying": "y", "side": "right", "titlefont": {"color": "#fd7e14"}, "tickfont": {"color": "#fd7e14"}}, "legend": {"x": 0.1, "y": 0.1}, "margin": {"l": 60, "r": 60, "t": 40, "b": 40}}}压缩比与模型指标之间的权衡。更高的压缩通常会降低延迟和内存,但可能会降低准确率。深思熟虑地应用压缩方法,使得大型 MoE 模型能够在资源受限的推理场景中发挥效能,但这需要仔细考量专家、路由器和所选压缩方法之间的关系。