微信扫码
添加专属顾问
我要投稿
SGLang开源DeepSeek-V3/R1的H100部署方案,性能匹敌官方,成本更低! 核心内容: 1. SGLang团队开源DeepSeek-V3/R1在H100上的部署方案 2. 采用预填充-解码分离架构和大规模专家并行技术,性能接近官方 3. 本地部署成本为每百万输出token 0.2美元,远低于官方Chat API
刚刚,SGLang团队开源了他们部署DeepSeek-V3/R1大模型的方案。该方案使用96张H100(12个节点,每个节点8块H100 GPU)部署,采用预填充-解码分离架构和大规模专家并行(EP)技术(结合了DeepSeek开源的DeepEP、 DeepGEMM、EPLB),在处理2000 token输入序列时,单节点吞吐达到每秒52.3k输入token和22.3k输出token。这是首个在开源实现中接近DeepSeek官方博客报告的大规模吞吐性能的方案。如果在本地部署该方案,成本为每百万输出token 0.2美元,约为DeepSeek官方Chat API成本的五分之一。
目前,SGLang团队还专门写了一篇文章深入解析该部署方案的并行化设计、优化方法与实测结果。
高效并行化对处理DeepSeek架构的计算复杂度和内存需求至关重要。本节概述了我们对以下关键组件的优化方案:注意力层、稠密前馈网络(FFN)、稀疏FFN以及语言模型(LM)头。每个组件都采用定制化的并行策略,以提升可扩展性、内存效率和性能。
DeepSeek采用多头潜在注意力机制(MLA)来有效建模输入序列中的复杂依赖关系。为优化该机制,我们实现了DP Attention数据并行策略,消除跨设备的KV缓存冗余,显著降低内存开销。该方案自SGLang v0.4引入,现已扩展支持混合数据与张量并行,可灵活高效处理小批量数据。
尽管仅使用三个稠密FFN层,DeepSeek-V3的计算仍会显著增加峰值内存占用,若管理不当可能导致系统崩溃。为此,我们采用数据并行(DP)而非张量并行(TP)策略,其优势如下:
(1)扩展性增强:当中间维度达18,432时,高TP并行度(如TP32)会导致单元碎片化(如576单元),该数值无法被现代GPU(如H100)的通用对齐边界128整除。这种错位会损害计算效率和内存利用率。DP通过避免碎片化确保跨设备负载均衡,提供更优的扩展方案。
(2)内存效率优化:传统TP虽能随计算单元增加降低内存占用,但在DP注意力机制下优势减弱。纯TP架构中,单层Transformer模型的内存需求随DP规模呈以下比例增长:
此处,表示每个设备(DP rank)上的隐藏状态大小,代表模型参数量,是表示CUDA Graph复制额外内存开销的系数。假设时,该内存使用函数在条件下取得最小值。DeepSeek-V3的中间层维度为18,432。在预填充阶段,CUDA Graph通常禁用,因此。但每设备的token数极易超过2,048,此时最优TP并行度为3或更低。在解码阶段,典型配置为每设备128个token且设置,此时内存最优TP并行度为6。两个阶段中,较低的TP并行度都能最小化单设备内存占用。因此,相比单纯依赖TP,DP可提供更具内存效率的扩展方案。
(3)通信开销最小化:在纯TP架构中,每个FFN层需要进行两次all-reduce操作,产生显著通信开销。通过采用DP策略,我们将其优化为在前置注意力层后执行单次reduce-scatter,在后续层前执行all-gather,使通信成本降低50%。当注意力计算也采用纯DP时,设备间通信可完全消除,大幅提升整体效率。
下图(a)展示了DP稠密FFN与DP注意力的集成方案,用户可通过设置--moe-dense-tp-size=1启用该功能。
在DeepSeek-V3的混合专家(MoE)架构中,稀疏FFN需要存储大量专家权重,形成显著内存瓶颈。我们采用专家并行(EP)策略,将专家权重分布到多个设备上。该方案在保持高性能的同时有效扩展内存容量,但会带来非常规all-to-all通信和工作负载不均衡等挑战。上图(b)展示了基于DeepEP框架的EP实现方案,具体设计与优化详见后续章节。
LM头需要在大词汇表上计算输出概率,这一资源密集型操作传统上采用词汇表并行来聚合TP组的token逻辑值。为提升扩展性和效率,我们沿用稠密FFN的数据并行(DP)策略,既降低内存开销又简化设备间通信,提供更高效的解决方案。
大语言模型推理包含两个独立阶段:预填充阶段(计算密集型,处理完整输入序列)和解码阶段(内存密集型,管理KV缓存进行token生成)。传统方案采用统一引擎处理这两个阶段,导致预填充与解码批次混合调度效率低下。为此,我们在SGLang中引入了预填充-解码(PD)分离架构。
传统统一引擎会引发三个关键问题:
PD分离架构通过阶段解耦,为每个阶段实施定制优化,有效解决上述问题。
SGLang的PD分离架构如下图所示,通过预填充服务器与解码服务器交替执行实现:
接收到输入请求后,工作流程如下:
这种分离确保每个阶段在最佳条件下运行,最大化 GPU 资源利用率。为了进一步提高性能,我们的实现包括:
DeepEP是DeepSeek团队开发的一款专为简化混合专家模型(MoE)中专家并行(EP)设计的通信库。它有效解决了跨多GPU高效路由令牌至特定专家的技术难题,通过优化通信内核显著降低延迟并提升吞吐量,特别适合大规模推理任务。DeepEP提供两种专用调度模式以应对不同计算需求:
在SGLang中,DeepEP的自动模式能根据工作负载动态选择上述调度方式。但若未采用参数分散(PD)技术,自动模式存在局限:同一通信组内无法同时支持预填充阶段的常规调度和解码阶段的低延迟调度。这一限制影响了其与DP注意力(内存高效推理的关键技术)的兼容性。各模式兼容性如下表所示:
PD解耦技术通过分离预填充和解码阶段来解决这一问题,使得在DP注意力机制下,预填充阶段可采用常规调度模式,解码阶段则启用低延迟调度模式。这种集成方案通过精准匹配各阶段需求来优化资源利用率,从而全面提升系统性能。
DeepGEMM是DeepSeek团队开发的另一款高效计算库,专为优化MoE模型中的计算任务而设计。它提供两种针对推理不同阶段的MoE相关矩阵乘法(分组GEMM)专用函数:
DeepGEMM与DeepEP的调度模式深度协同:
SGLang还在张量并行下集成了DeepGEMM的MoE计算能力。此外,DeepGEMM提供高性能通用GeMM内核,通过设置环境变量SGL_ENABLE_JIT_DEEPGEMM=1
即可在SGLang中启用,为非MoE运算带来更强计算效能。
在多节点环境中,有限的通信带宽会显著增加整体延迟。为应对这一挑战,我们基于深度求索的系统设计实现了双批次重叠技术(TBO)。该技术将单个批次拆分为两个微批次,实现计算与通信的重叠执行,同时通过有效批次大小减半来降低峰值内存占用。然而,实际部署TBO时需解决特定实现难题。
尽管DeepSeek已公开TBO的设计框架,但仍存在两个细微的实现难点:
为构建更易维护和复用的代码库,我们采用由操作节点和暂停点组成的抽象层。该方法允许开发者以单微批次模式编写代码,同时通过插入策略性暂停点让其他微批次执行,从而简化开发流程。该方案具有以下优势:
以下为该方案的简要实现演示:
我们改进了预填充阶段的任务启动顺序,以避免DeepEP中调度操作造成的CPU阻塞(即使在使用异步模式时)。具体而言:
为优化性能,我们优先向GPU提交计算任务,再启动会阻塞CPU的通信操作。这确保了GPU在通信期间仍能保持计算活跃状态。如下图所示,采用合理启动顺序(以加粗边框标示)的TBO技术,成功规避了常规调度等CPU阻塞操作导致的计算气泡。
在MoE模型中,专家并行(EP)常导致GPU间工作负载分布不均。这种不平衡迫使系统等待最慢的GPU计算或通信,既浪费计算周期又因专家激活增加内存占用。随着GPU数量(EP规模)增加,不平衡问题会愈发严重。
为解决此问题,DeepSeek开发了专家并行负载均衡器(EPLB)。EPLB以专家分布统计数据为输入,计算最优的专家排布方案以最小化负载不均。用户可分配冗余专家(例如32个额外专家),与原有256个专家共同构成288个专家的资源池。该资源池允许EPLB智能地放置或复制专家——例如多次复制最高频使用的专家,或将中等使用频率专家与极少使用专家组合部署在同一GPU上。
除平衡负载外,EPLB还提供了更灵活的并行设计。原始256个专家方案将并行规模限制为2的幂次方,而EPLB的288专家方案支持更丰富的配置(如12或72等并行规模)。
下图通过仿真展示了规模效应和EPLB算法对负载不均的影响。我们通过GPU间MoE层的平均计算时间与最大计算时间之比来衡量平衡性,并使用各GPU处理的token数量估算其计算时间。可见系统扩展时利用率随节点数增加而下降,而启用EPLB能显著提升利用率。
要使EPLB发挥最佳效果,输入分布必须与实际服务负载高度匹配。我们通过两种策略实现这一目标:
即使采用EPLB,部分负载不均衡仍不可避免,这使得进一步优化成为有价值的未来研究方向。
SGLang采用三阶段专家再平衡机制,在保证效率的同时最大限度降低服务中断:
这种分阶段实施方案确保再平衡过程既高效又无感知,在更新过程中始终保持系统性能稳定。
我们在12节点集群上基于DeepSeek-V3评估了SGLang不同配置的端到端性能,集群通过InfiniBand互联,每个节点配备8块H100 GPU。本次测试重点验证高级优化技术带来的吞吐量提升,对比了以下四种配置方案:
为适应不同负载需求,我们分别评估了预填充(P)与解码(D)阶段性能(假设非测试阶段资源无限以隔离测试节点负载)。测试环境复现DeepSeek官方配置,结果如下:
本节将SGLang的性能与DeepSeek推理系统进行对比,实验设置尽可能贴近DeepSeek的生产环境。我们从整体吞吐量和详细内核拆解两个维度展开分析,并参照DeepSeek官方博客及公开性能数据进行基准测试。
在预填充阶段,我们测试了单设备处理16,384个token、输入长度为4,096的场景。由于不确定DeepSeek的专家分布策略,我们评估了两种情形:默认专家分布方案,以及模拟理想EPLB(遵循分组限路由语义的随机专家选择)作为性能上限。 测试结果如下所示:
DeepSeek的分析报告显示其吞吐量大约是其生产环境的两倍。使用默认专家负载均衡的SGLang比DeepSeek的结果慢20%,而模拟的完美EPLB情况将差距缩小到6%。在解码方面,结果如下:
仅使用DeepSeek一半节点时,采用模拟MTP的SGLang性能仅略低于DeepSeek的配置。在高批量设置下(256序列,2000输入长度),SGLang每节点每秒可处理22,282个token,展现出强劲的可扩展性。
下图展示了预填充阶段的内核执行时间细分,包括作为理论上限的单元测试结果:
SGLang的解码内核分解与DeepSeek高度吻合,如下图所示:
关键观察结果包括:
尽管存在小幅改进空间(主要在"其他内核"的融合优化),SGLang的解码性能已基本与DeepSeek对齐,下一步将重点优化预填充阶段。
本节探讨了在不同批处理大小和模拟多任务处理(MTP)场景下TBO的性能表现。
TBO在预填充阶段带来两大显著收益,吞吐量对比和内存优化结果证明了这一点:
TBO在解码阶段的表现因场景而异,性能与批处理大小和注意力处理时间密切相关:
我们评估了三种预填充场景:TBO 16k令牌/批次、TBO 8k令牌/批次、无TBO 8k令牌/批次。关键发现如下:
我们分析了三种配置:TBO 256批次、无TBO 256批次、无TBO 128批次。时间分解显示:
本节通过整体吞吐量分析和详细案例研究评估EPLB对系统性能的影响。鉴于EPLB对生产环境中工作负载分布及分布变化的敏感性,我们重点关注定性且可泛化的结论,而非需生产数据支撑的实际性能表现。
下图展示了大规模场景下EPLB对吞吐量的影响。EPLB在预填充和解码阶段分别实现1.49倍和2.54倍的加速,这得益于其缓解GPU间工作负载失衡的能力。随着计算规模扩大,失衡问题加剧,而EPLB在实验中有效解决了这一问题,从而显著提升吞吐量。
为探究工作负载失衡与吞吐量的关联,我们以解码阶段为例进行案例分析:输入1800个令牌,输出100个令牌,批次大小为256。通过绘制解码步骤中吞吐量与平衡度(专家间平均令牌数/最大令牌数)的关系曲线,发现二者存在强相关性,表明高平衡度对性能优化至关重要。
下图展示了预填充与解码样本数据的专家分布统计结果:
关键发现:
这些结论揭示了EPLB在解决工作负载失衡中的作用,以及针对阶段需求定制专家分布的重要性。
PyTorch中的内存管理可能因持久化对象引用而变得复杂,尤其是在GPU密集型工作流中,CUDA内存属于稀缺资源。参考以下示例:
在这段代码中,del hidden_state
的本意是在计算完intermediate_state
后释放hidden_state
占用的内存。然而由于hidden_state
仍在函数外部被引用,del
操作实际并未生效。这会导致峰值内存占用增加,可能引发性能下降或内存不足错误。
SGLang通过DisposableTensor
类解决这一问题——作为torch.Tensor
的子类,它新增了dispose()
方法,能显式且立即释放张量内存,从而规避Python引用计数机制的限制。其工作原理如下:
通过将hidden_state
封装为DisposableTensor
并在不再需要时调用dispose()
,CUDA内存可立即释放。这确保了张量在完成计算作用后内存即刻回收,有效降低峰值内存占用并提升整体效率。
SGLang还包含一套工具集,用于分析和模拟MoE模型中专家工作负载的分布。该功能支持用户实现以下目标:
此模拟功能使用户能够评估再平衡频率、节点数量或批次大小等因素对系统性能的影响,为规模化部署前的配置调优提供高性价比方案。
尽管当前基于SGLang的DeepSeek-V3推理实现已显著提升吞吐量,仍存在以下待改进方向:
通过参数分解解耦(PD)、专家并行(EP)和精心设计的并行方案,我们在SGLang中复现了DeepSeek推理框架并实现卓越性能。开源成果显示:输入吞吐量达52.3k token/秒,输出吞吐量达22.3k token/秒,充分证明SGLang在大规模LLM推理中的强大能力。诚邀社区共同探索、复现并拓展此项工作,推动高效AI部署的边界。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-05-12
JManus - 面向 Java 开发者的开源通用智能体
2025-05-12
阿里直接硬刚Google!
2025-05-12
字节跳动开源扣子coze、飞书工作流引擎!FlowGram.AI
2025-05-12
已经狂揽了15.2k!Cursor 的开源平替 Void 来了!
2025-05-12
微软出手开源 UFO²,系统级自主智能体如何引爆企业级 AI 应用?
2025-05-11
字节大模型应用开发框架 Eino 全解(一)|结合 RAG 知识库案例分析框架生态
2025-05-11
字节放大招:Deep Research项目DeerFlow正式开源
2025-05-11
大模型生成过程可视化开源工具、Zerosearch误读及开源项目中的RAG文档解析问题
2024-07-25
2025-01-01
2025-01-21
2024-05-06
2024-09-20
2024-07-20
2024-07-11
2024-06-12
2024-12-26
2024-08-13
2025-05-12
2025-04-30
2025-04-29
2025-04-28
2025-04-28
2025-04-28
2025-04-21
2025-04-19