趋近智
标准批处理技术对密集模型有效,但在直接应用于混合专家(MoE)模型进行推理时,会遇到一些难题。主要问题源于MoE固有的条件计算:同一输入批次中不同的令牌根据门控网络的决策被路由到不同的专家。这种动态的令牌级路由打乱了传统批处理所依赖的计算一致性。
假设一个标准的Transformer推理场景。一批输入序列逐层处理。在每一层中,批次中的所有令牌都进行相同的计算(例如,自注意力,前馈网络)。这种同质性使得GPU等硬件能够进行高效的并行处理,从而提升吞吐量。
然而,在MoE层中,门控网络之后路径就变得不同了。对于包含B个长度为L的序列的批次,B×L个令牌会通过门控网络。每个令牌随后被分配给一个或多个专家(通常是Top-k,推理时常为k=1或k=2)。如果有N个专家,最初按序列位置分组的令牌现在逻辑上分散到这N条计算路径上。
一种简单的批处理方法,即简单地将输入批次送入MoE层,会导致多方面的效率低下:
当专家分布在多个设备上时(专家并行),这些问题尤为明显。简单地处理批次将需要低效、稀疏的通信模式,或者导致设备之间严重的负载不均衡。
为了解决这些困难,MoE的推理批处理需要能明确处理令牌动态路由的方法。主要目的是在门控决策之后但在专家计算之前重新组合令牌,确保每个专家处理一个分配给它的、密集且规模合适的令牌批次。
动态批处理是服务系统中常用的一种通用技术,它会将传入的推理请求进行缓冲和分组,形成更大的批次,然后由模型处理。虽然通过提高硬件利用率有助于提升整体系统吞吐量,但它本身并不能解决MoE特有的批内路由分歧问题。它增加了共同处理的令牌总数,这与单请求处理相比,可以在统计上改善专家负载平衡,但不能保证动态形成的批次内的负载均匀分布。它通常与更针对MoE的特定方法结合使用。
这是高效MoE推理的基本方法。它涉及到根据令牌分配到的专家,主动重新排列批次内的令牌。工作流程通常如下所示:
以下图表展示了MoE推理中令牌置换的流程:
MoE层在推理过程中使用令牌级分组和置换的令牌处理流程。令牌经过路由、按专家分组、处理,然后重新组合。
在训练期间,通常会定义一个expert_capacity(专家容量),通常capacity_factor > 1.0,以处理暂时的不均衡并留有余地。在推理时,此容量仍有作用。如果批次内分配给特定专家的令牌数量超出其定义的容量(令牌数量 / 专家数量 * capacity_factor),则令牌可能会被丢弃。
虽然在训练中(并通过辅助损失进行管理)有时允许丢弃令牌,但在推理时通常不希望这样做,因为它会导致信息丢失和输出质量下降。处理推理时潜在溢出的方法包括:
令牌级分组通过最大化专家利用率并有效利用硬件并行性,显著提升了吞吐量。然而,它会带来额外开销:
选择合适的批处理方法需要根据特定应用的需求(例如,延迟敏感的实时推理与侧重吞吐量的批处理)和部署环境(单GPU、多GPU节点、多节点集群)来平衡这些因素。有效的批处理不仅仅是一种优化,它对于MoE模型实现实用的推理性能是必不可少的。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造