【大模型推理加速】MOE加速比与batchsize 关系
https://zhuanlan.zhihu.com/p/18788701543
您的查询描述了Mixture of Experts (MoE) 模型在推理过程中不同批次大小(Batch Size, BS)下的性能特征,特别是在小批次、中间区域和大批次三种情况下的行为。我将针对您的问题“为什么大批次时MoE吞吐量更高”进行详细解释。首先,简要回顾MoE模型的核心特性:
-
MoE模型原理:MoE模型由多个专家(experts)组成(如前馈神经网络层),每个输入token通过路由机制被分配到少数专家(通常k=1或2)。相比之下,稠密模型(dense model)对所有token使用相同的参数。MoE的优势在于,它可以通过增加专家数量来扩展模型规模(总参数量更大),但每个token只激活部分专家,从而减少每个token的计算量(FLOPs)。
-
关键性能指标:
- 延迟(Latency):处理一个批次所需的时间。
- 吞吐量(Throughput):单位时间内处理的token数量(例如,tokens/秒)。
- 瓶颈:推理性能受限于内存带宽(memory bandwidth)或计算量(compute-bound)。内存带宽限制时,时间主要花在从内存(如DRAM)读取参数;计算量限制时,时间主要花在执行浮点运算(FLOPs)。
现在,针对您描述的三种情况,我先快速总结,然后重点解释大批次时MoE吞吐量更高的原因。
1. 小批次(Small Batch): 内存带宽限制
- 行为:当批次大小较小时,推理延迟主要取决于“读入所有激活参数的时间”。这是因为每个token可能被路由到不同专家,导致参数访问分散,无法有效利用缓存。内存带宽成为瓶颈(即硬件等待数据加载,而非忙于计算)。
- 原因:小批次时,计算单元(如GPU核心)经常空闲,等待参数从内存加载。MoE模型可能比稠密模型更差,因为路由增加了额外的参数访问开销(不同专家的参数位置不连续)。
2. 中间区域(Middle Region): 无收益区域
- 行为:随着批次大小增加,所有专家被激活(即每个专家都处理至少一个token),但相比同等规模的稠密模型(例如,总FLOPs相当的稠密模型),MoE没有性能收益(延迟或吞吐量无改善)。
- 原因:此时,计算量接近稠密模型(所有专家都活跃),但引入了路由开销(如选择专家的softmax计算)、负载不平衡(某些专家处理更多token,导致等待)或同步成本。这些开销抵消了MoE的潜在优势,而稠密模型由于参数共享更均匀,效率更高。
3. 大批次(Large Batch): MoE吞吐量更高
- 行为:当批次大小继续增加,瓶颈从内存带宽转为“单token激活计算量”(即计算成为主要限制)。此时,MoE的吞吐量显著高于同等规模的稠密模型。
- 关键问题:为什么大批次时MoE吞吐量更高?
原因在于大批次下,硬件(如GPU)进入计算绑定(compute-bound)状态,而MoE模型每个token的计算量(FLOPs per token)更低,且参数访问开销被有效摊销。具体机制如下:
(1) 更低的每token计算量(Lower FLOPs per Token)
- MoE模型的核心优势是每个token只激活少数专家(例如,k=2),而稠密模型每个token必须通过全部参数。假设一个MoE模型有E个专家,每个专家的计算量较小(例如,专家FFN层的隐藏尺寸d_ff_expert < 稠密模型的d_ff_dense),那么:
- 稠密模型的每token计算量:~ ( O(d_model \times d_ff_dense) )(例如,一次大型矩阵乘)。
- MoE模型的每token计算量:~ ( O(k \times d_model \times d_ff_expert) )(例如,k个小型矩阵乘)。
通常,MoE设计为 ( k \times d_ff_expert \ll d_ff_dense ),因此每token FLOPs更低(可能减少2-4倍)。
- 在计算绑定区域,硬件计算能力(如GPU的TFLOPS)是固定的。吞吐量公式为:
[
\text{Throughput} = \frac{\text{Hardware Compute Capacity (FLOPS)}}{\text{FLOPs per Token}}
]
由于MoE的FLOPs per token更低,它能处理更多token/秒。例如:- 硬件计算能力:100 TFLOPS。
- 稠密模型:每token需10 GFLOPs → 吞吐量 = 100e12 / 10e9 = 10,000 tokens/秒。
- MoE模型:每token需4 GFLOPs → 吞吐量 = 100e12 / 4e9 = 25,000 tokens/秒(提升2.5倍)。
(2) 参数重用和访问开销摊销(Parameter Reuse and Access Amortization)
- 大批次时,许多token被路由到相同的专家(例如,一个专家处理批次中的多个token),允许专家参数在缓存(如GPU共享内存或L2缓存)中重用:
- 参数加载一次后,可多次用于计算,减少平均每个token的内存访问次数。
- 而小批次时,token路由分散,参数无法有效重用,内存访问频繁。
- 稠密模型在大批次下也有参数重用(所有token共享参数),但由于其每token计算量高,计算瓶颈更早出现,吞吐量上限较低。
- 因此,大批次时MoE的内存访问开销被大幅摊销,瓶颈从内存带宽转向计算,MoE的低FLOPs优势得以发挥。
(3) 硬件利用率提升(Improved Hardware Utilization)
- 在计算绑定状态下,GPU核心能持续高效工作(高利用率),减少内存等待时间。
- MoE的路由和并行性在大批次下更有效:多个专家可以并行处理(如果硬件支持,如TPU或GPU的异步执行),而稠密模型计算更集中,可能无法充分利用所有计算单元。
- 此外,MoE的稀疏激活特性(sparse activation)在大批次时减少冗余计算,而稠密模型必须对所有token执行全量计算。
为什么其他区域没有类似优势?
- 小批次:内存带宽限制,MoE的参数访问更频繁(专家分散),可能劣于稠密模型。
- 中间区域:所有专家激活但批次不够大,路由开销(如门控网络计算)和负载不平衡占主导,导致无收益。例如,一些专家过载而其他空闲,同步成本增加延迟。
实际考虑
- 硬件影响:在内存带宽受限设备(如低端GPU)上,小批次MoE性能较差;但在高算力设备(如A100/H100)上,大批次MoE优势更明显。
- 模型设计:MoE吞吐量增益取决于专家数量(E)、路由策略(如Top-k)和专家大小。理想情况下,MoE总参数量更大,但推理时仅部分激活。
- 研究支持:实验数据(如GShard或Switch Transformer论文)显示,大批次时MoE吞吐量可比稠密模型高2-5倍,尤其在高算力场景。
总之,大批次时MoE吞吐量更高的根本原因是:计算成为瓶颈,而MoE的每token计算量更低,结合参数重用,允许硬件在单位时间内处理更多token。如果您有特定模型参数或硬件场景,我可以提供更具体的分析!