使用 PD 分解和大规模专家并行在 96 个 H100 GPU 上部署 DeepSeek
仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
DeepSeek是一个备受赞誉的开源大型语言模型(LLM),以其强大的性能而闻名。然而,其庞大的规模和独特的架构给高效部署带来了挑战。本文详细介绍了LMSYS团队如何通过创新的并行策略和优化技术,在96个NVIDIAH100GPU上成功部署DeepSeek模型,实现了每节点每秒52.3k输入词元和22.3k输出词元的高吞吐量。
“SGLang现已支持预填充-解码(PD)分解和大规模专家并行,包括DeepEP、DeepGEMM和EPLB的全部功能。”
DeepSeek-V3模型采用了混合专家(MoE)架构,这种设计虽然能够提高模型能力,但也带来了工作负载不平衡和内存使用效率等问题,尤其是在大规模部署环境中。本研究通过一系列创新技术解决了这些挑战。
DeepSeek的高效部署需要精心设计的并行策略来管理计算复杂性和内存需求。研究团队针对模型的四个关键组件采用了不同的并行方法:
DeepSeek使用多头潜在注意力(MLA)来有效建模输入序列中的复杂依赖关系。为优化这一机制,团队实现了DP注意力,这是一种数据并行策略,能够消除设备间KV缓存的重复,显著减少内存开销。
“DP注意力是一种数据并行策略,能够消除设备间KV缓存的重复,显著减少内存开销。”
尽管DeepSeek-V3仅使用三个密集FFN层,但其计算量仍可能显著增加峰值内存使用,如果不小心管理,可能导致系统崩溃。为解决这一问题,团队采用了数据并行(DP)而非张量并行(TP),主要基于以下优势:
增强可扩展性:DeepSeek-V3的中间维度为18,432,高TP度数(如TP32)会导致低效的小单元分段,不利于现代GPU的内存对齐。
优化内存效率:在DP注意力下,较低的TP度数可以最小化每个设备的内存使用。
最小化通信开销:纯TP中,每个FFN需要两次全归约操作,而DP可以将通信成本降低50%。
在DeepSeek-V3的混合专家(MoE)架构中,稀疏FFN需要大量专家权重,造成显著的内存瓶颈。为此,团队实现了专家并行(EP),将专家权重分布在多个设备上,有效扩展内存容量同时保持高性能。
并行设计示意图:左侧显示DP注意力和DP密集FFN的集成,右侧展示了基于DeepEP框架的EP实现
LM头计算大型词汇表上的输出概率,这是一个资源密集型操作。团队采用了数据并行(DP)策略,与密集FFN策略相似,减少了内存开销并简化了设备间通信。
LLM推理包含两个截然不同的阶段:预填充(Prefill)和解码(Decode)。预填充阶段计算密集,处理整个输入序列;而解码阶段内存密集,管理词元生成的KV缓存。传统上,这两个阶段在统一引擎中处理,但这种方法存在三个主要问题:
预填充中断:传入的预填充批次经常中断正在进行的解码批次,导致词元生成显著延迟。
DP注意力不平衡:在DP注意力中,一个DP工作器可能同时处理预填充批次,而另一个处理解码批次,导致解码延迟增加。
与DeepEP不兼容:DeepEP为预填充和解码执行不同的调度模式,使统一调度与DeepEP不兼容。
PD分解设计图:展示了预填充服务器和解码服务器之间的交互流程
为解决这些问题,团队引入了PD分解,将两个阶段分离,实现针对每个阶段的定制优化。实现细节包括:
非阻塞传输:数据发送和接收操作在后台线程中运行,保持调度器的事件循环不中断。
基于RDMA的传输:远程直接内存访问(RDMA)利用队列对进行连接,使用分散-聚集元素(SGE)高效传输非连续内存块。
灵活的API集成:SGLang提供适应性API,集成高性能RDMA库如Mooncake和NIXL,简化数据传输。
DeepEP[1]是DeepSeek团队实现的通信库,旨在简化MoE模型中的EP。它提供两种专门的调度模式:
普通调度:针对处理长输入序列(如预填充阶段)优化,优先考虑最大计算吞吐量。
低延迟调度:为解码阶段生成输出词元定制,优先考虑最小延迟以确保实时性能。
DeepGEMM[2]是另一个高效库,专为优化MoE模型中的计算而设计,提供两种专门函数:
分组GEMM(连续布局):为动态输入形状设计,适用于MoE推理的预填充阶段。
分组GEMM(掩码布局):假设固定输入形状,使用掩码张量仅计算输入的有效部分,兼容CUDAGraph。
在多节点环境中,有限的通信带宽可能显著增加整体延迟。为解决这一挑战,团队实现了两批次重叠(TBO),将单个批次分为两个微批次,允许计算和通信重叠,同时通过将有效批次大小减半来降低峰值内存使用。
预填充阶段的TBO实现:通过优化启动顺序避免CPU阻塞
实现TBO面临两个主要挑战:
代码复杂性:直接编码TBO可能导致管理多个微批次的逻辑重复。
预填充阶段的同步问题:DeepEP中的普通调度会阻塞CPU,可能使GPU闲置。
为创建更易维护和可重用的代码库,团队使用了由操作和产出点组成的抽象层,简化了开发过程。
在MoE模型中,EP经常导致GPU间工作负载分布不均。这种不平衡迫使系统等待最慢的GPU计算或通信,浪费计算周期并增加内存使用。随着GPU数量(EP大小)增加,不平衡问题变得更加严重。
模拟显示了规模和EPLB算法对不平衡问题的影响
为解决这一问题,DeepSeek开发了专家并行负载均衡器(EPLB)[3]。EPLB接收专家分布统计作为输入,计算专家的最佳排列以最小化不平衡。用户可以分配冗余专家,这些专家与原始专家一起创建一个专家池,允许EPLB战略性地放置或复制专家。
团队在由12个节点组成的集群上评估了SGLang使用DeepSeek-V3的端到端性能,每个节点配备8个H100GPU,通过InfiniBand连接。评估比较了四种设置:
SGLang与TP16x6
SGLang与PD分解
SGLang与PD分解和模拟MTP
DeepSeek官方配置文件结果
预填充和解码阶段的端到端性能:左图显示预填充阶段在4个节点上的性能,右图显示解码阶段在9个节点上的性能
预填充阶段的内核执行时间细分:包括默认EPLB、模拟完美EPLB和单元测试结果的比较
团队将SGLang的性能与DeepSeek的推理系统进行了比较,尽可能使实验设置与DeepSeek的生产环境保持一致。
解码阶段的内核执行时间细分:显示了SGLang与DeepSeek在解码阶段的内核性能比较
TBO在不同场景下的性能影响:左图显示预填充阶段,右图显示解码阶段
关键观察包括:
默认EPLB:通信内核相比DeepSeek的配置文件表现出更长的执行时间和更高的方差,可能是由于更大的专家不平衡。
模拟完美EPLB:这种设置与DeepSeek的配置文件更为接近,尽管仍存在差异,表明潜在的优化领域。
与单元测试的比较:DeepSeek和SGLang的通信时间都比单元测试结果慢,而后者在禁用TBO时可实现,揭示了通信是瓶颈时的潜在优化方向。
TBO在预填充阶段提供两个显著优势:
支持更大的批次大小:在普通配置中,每个设备最多处理8,192个词元,而TBO通过优化内存使用,使推理批次大小高达16,384个词元。
增强吞吐量:通过重叠计算和通信,TBO实现了27%至35%的吞吐量增加。
预填充阶段TBO性能细分:比较了不同配置下各个内核的执行时间
解码阶段TBO性能细分:分析了三种不同配置下的性能表现
EPLB对系统性能的影响通过总体吞吐量分析和详细案例研究进行了评估。
EPLB对大规模设置吞吐量的影响:EPLB提供了1.49倍(预填充)和2.54倍(解码)的显著加速
工作负载不平衡与总体吞吐量的关系案例研究:显示了平衡度与吞吐量之间的强相关性
结果显示平衡度与吞吐量之间存在强相关性,强调维持高平衡度对最佳性能的重要性。
SGLang还包括两个重要工具,以支持高效的大规模部署:
PyTorch中的内存管理可能因持久对象引用而变得具有挑战性,尤其是在GPU密集型工作流中,CUDA内存是稀缺资源。SGLang通过DisposableTensor类解决了这一问题,该类引入了dispose()方法来显式且立即释放张量的内存,绕过了Python的引用计数限制。
SGLang还包括用于分析和模拟MoE模型中专家工作负载分布的工具集。此功能使用户能够:
转储专家工作负载统计:提取累积统计数据或每批次工作负载数据。
模拟专家利用率:在不需要昂贵硬件或重复试验的情况下,模拟各种配置下的专家平衡。
虽然SGLang在DeepSeek-V3推理方面取得了显著的吞吐量改进,但仍存在几个局限性和未来增强领域:
延迟优化:当前对吞吐量的关注使首词延迟(TTFT)保持在2-5秒,词元间延迟(ITL)约为100毫秒,需要进一步优化以用于实时应用场景。
序列长度限制:由于使用96个GPU,限制了处理较短序列。扩展GPU资源将支持更长序列,这对特定应用至关重要。
多词元预测(MTP)集成:SGLang支持MTP但缺乏与DP注意力的完全集成,降低了混合并行配置中的效率。
EPLB分布:本研究中的实验利用了分布内数据进行专家并行负载均衡,可能无法反映真实世界的变异性。
灵活的张量并行(TP)大小:对于DeepSeek-V3,密集FFN的内存最优TP大小较小但大于1。目前,SGLang仅支持纯TP或DP,导致次优的内存使用。
Blackwell支持:目前,实现仅支持NVIDIAHopper架构,团队正积极扩展对下一代Blackwell架构的兼容性。
通过利用PD分解、EP和精心设计的并行策略,研究团队在SGLang中成功复制了DeepSeek的推理框架,并取得了卓越的性能。这项开源工作——实现每节点每秒52.3k输入词元和22.3k输出词元的吞吐量——展示了SGLang在大规模LLM推理方面的强大能力。
“通过利用PD分解、EP和精心设计的并行策略,我们在SGLang中以卓越的性能复制了DeepSeek的推理框架。”
这些创新技术不仅提高了DeepSeek模型的部署效率,还为其他大型语言模型的高效部署提供了宝贵经验。研究团队邀请社区探索、复制和扩展这项工作,以推动高效AI部署的边界。
参考资料
DeepEP:https ://github.com/deepseek-ai/DeepEP
DeepGEMM:https ://github.com/deepseek-ai/DeepGEMM
专家并行负载均衡器(EPLB):https ://github.com/deepseek-ai/EPLB