夜雨聆风学习资料网

ARTICLE · 1272797

SGLang低延迟模式: 厂商内核插件化,GB300提速1.38倍MI355X提速1.56倍

SGLang低延迟模式: 厂商内核插件化,GB300提速1.38倍MI355X提速1.56倍
要点速览
-是什么:通过插件框架把sgl-nvidia-mega与sgl-amd-mono等外部内核库接入SGLang,专用路径与通用前向在同一配置内共存。-关键数字:单个decoder层中位延迟从96.8微秒降到68.4微秒,DSpark五次草稿采样跨度从85.1微秒降到34.2微秒。-怎么做到:NVIDIA侧靠提前释放依赖、在GEMM收尾阶段直接跨卡推送与提前启动专家GEMM,AMD侧把整层压成两次常驻内核启动并在核内完成all-reduce。

低延迟推理需要针对模型、硬件和负载深度定制内核,大量融合内核又难以在主仓库中长期维护。SGLang Low-Latency Mode用插件框架接入厂商专用内核,下文拆解NVIDIA与AMD两套实现各自省下的时间,以及插件系统的注册、校验、构建与运行时分发机制。

低延迟推理内核

低延迟推理存在大量针对特定模型、硬件与负载的优化空间,这些优化通常需要大规模内核融合,并在不同实现之间重复代码,维护难度很高。为支持这类专用化,SGLang推出SGLang Low-Latency Mode,通过插件框架把专用内核引入SGLang,在NVIDIA与AMD GPU上都带来显著的延迟下降。在四张NVIDIA GB300上的AgentX轨迹回放中,单并发会话时P90单用户token生成速度从671.2提升到928.4 tokens/s,为1.38倍;在四张AMD MI355X上,四并发会话时从331.6提升到516.0 tokens/s,为1.56倍。每组结果都是同一硬件上低延迟模式与SGLang基线的对比。

AgentX轨迹回放,DeepSeek-V4.1-Flash搭配DSpark:4张GB300在1、4、8并发会话下P90单用户速度提升1.38、1.28、1.20倍,4张MI355X提升1.50、1.56、1.45倍。

NVIDIA低延迟内核

在NVIDIA GPU上,降低延迟的方式是让相互依赖的内核与通信重叠执行,同时针对小批量专门优化注意力、MoE与草稿采样。这些内核位于sgl-nvidia-mega,在NVIDIA GB300上同时加速DeepSeek-V4.1-Flash搭配DSpark时的目标验证与草稿执行。

耗时分布

单请求时,DSpark每步验证六个token行,每个内核分到的工作很少,依赖等待与跨GPU通信反而成为延迟来源。在预热后的CUDA graph剖析中,插件只把验证图的内核数从1,205个减到1,189个,却把decoder层延迟中位数从96.8 µs降到68.4 µs。收益主要来自减少等待与重叠执行,降幅最大的是注意力区段。下表列出各区段的变化,随后逐项说明主要优化。

单个decoder层区段,单请求,中位数
SGLang
启用插件
注意力,从上一层MoE输出到输出投影
33.4 µs
18.3 µs
注意力输出投影与张量并行归约
10.9 µs
9.4 µs
MoE,从路由到归约后输出
44.4 µs
36.5 µs
整层,从一次路由到下一次路由
96.8 µs
68.4 µs

中位数基于四张GPU上每组780到800个样本。各区段中位数之和不等于整层中位数。剖析本身会影响计时,这些数据用于解释机制,而非报告服务性能。

低延迟专项优化

1. 在输入就绪之前启动下一个内核。 Programmatic dependent launch即PDL,允许内核在前驱仍在运行时启动,先准备屏障、配置张量内存并加载权重,再等待所需的输入。SGLang本已使用PDL,插件则把依赖释放点提前,让更多准备工作与正在进行的计算重叠。例如MoE归约一开始轮询对端结果,就立即放行下一层的第一个投影。

注意力路径还使用为小批量专门优化的投影GEMM,并在加载query时同步施加RoPE,省掉一个独立内核。在依赖允许的地方,注意力会在等待query之前先开始收集KV数据。单请求时,插件还在每步开始时把相互独立的Engram查找与投影移到旁路流上,其all-reduce仍留在主流,以保持各GPU间的通信顺序。

2. 在GEMM收尾阶段直接发布投影输出。 注意力输出投影之后,每张GPU持有一份需要跨卡归约的部分结果。SGLang的标准路径使用两个内核:GEMM先写出结果,再由一个融合内核读回、发送给对端,并完成归约、mHC更新与归一化。

插件同样使用两个内核,但把发送动作移入GEMM的epilogue。每个CTA在其他tile仍在计算时,就把已完成的tile从寄存器经NVLink多播存储直接发布到对端GPU。消费者内核经PDL启动,等待发布的结果到齐后再归约。通信因此更早开始,也免去了仅为发送而重读部分输出,消费者的计算本身保持不变。

注意力输出交接对比:SGLang基线中Kernel 1先写出部分和,Kernel 2读回后再推送到4张GPU;插件让Kernel 1在epilogue中直接多播到4个mailbox,Kernel 2只需等待并归约。两条路径都是两个内核,方框大小不代表时长。

3. 在路由完成之前启动专家GEMM。 低并发时,路由可能占MoE路径相当大的比重。在最多八行的情况下,每个专家选中的token都能放进一个八行tile。插件用位图与popcount放置这些tile,无需扫描或排序,同时保留SGLang的top-k选择结果。它提前启动第一个专家GEMM,让准备工作与路由重叠,并跳过填充权重中的全零tile。标准内核本已使用八行tile,收益来自更简单的路由、更早的执行和更少的无效计算。剖析中MoE窗口中位数从44.4 µs降到36.5 µs,第二个GEMM与归约几乎不变。

单请求下实测的一个MoE窗口:SGLang为44.35 µs,插件为36.48 µs,800个窗口中位数分别为44.42 µs与36.54 µs。GEMM1的条形包含等待路由的时间,提前启动会让条形变长,但整体窗口缩短。

4. 把顺序草稿采样留在一个内核内。 DSpark的Markov head按顺序提出token。插件把全部五次提议合并为每张GPU一次内核启动,把head权重保留在寄存器中,同时在GPU间协调token选择。剖析得到的提议跨度从85.1 µs降到34.2 µs,SGLang的投机执行器与接受逻辑均未改动。

服务结果

在8K输入、1K输出的负载下,四张GB300上1到8个并发请求时,NVIDIA插件把单用户解码速度提升12% 到38%。两组运行使用相同配置与3.51的模拟平均接受长度,只切换插件开关。

四张GB300上DeepSeek-V4.1-Flash的单用户解码速度与每卡总输出吞吐,8K输入、1K输出,接受长度3.51:1、2、4、8个请求下单用户速度分别提升38%、29%、22%、12%。

AMD低延迟内核

在AMD GPU上,降低延迟的方式是把一个decoder层的大部分计算与通信合并进少数几个常驻内核。这些内核位于sgl-amd-mono,在AMD Instinct MI355X与MI350X上同时加速DeepSeek-V4.1-Flash搭配DSpark时的目标验证与草稿执行。

低并发时,每个decoder层要运行数十个小内核和两次张量并行all-reduce,主要有三项开销:

  • 启动开销:
     HIP graph消除了CPU侧的启动工作,但每个小内核在GPU上仍需2到4 µs
  • 空闲边界:
     每个内核必须结束后下一个才能开始,一个内核收尾、下一个爬升期间计算单元空闲,权重加载也随之暂停
  • 通信停顿:
     每层要两次等待跨GPU的all-reduce,期间没有任何计算
批大小为1时的一个DeepSeek-V4.1层:标准路径运行数十个小内核,每个启动边界都有空闲间隙,两次all-reduce期间计算停顿;插件把整层合并为K1与K2两次FlyDSL启动,提前加载不依赖路由的权重,部分和在计算继续时发往对端GPU。方框大小不代表时长。

每层两次常驻启动

常驻的FlyDSL内核把每层的大部分工作压缩进两次启动。K1负责mHC更新、query与KV投影以及KV cache写入;K2负责注意力、输出投影、其余mHC更新、MoE以及两次all-reduce。索引层在两者之间加入压缩、K2i打分与top-k。两次启动之间的边界保证K1的KV写入在K2读取之前对整张GPU可见。

启动内部的阶段重叠

每个阶段产出的值都与当前解码步的标签一同存储,下一阶段无论在同一GPU还是其他GPU上,只要标签匹配就能立即开始处理该值,步与步之间无需额外的标志位或重置。不依赖路由的权重在输入到达前就开始加载:K1的投影权重在归一化结束前加载,K2中的mHC混合权重与共享专家权重在其相乘的数据到达前加载。路由专家的权重则在路由器选定专家后加载。

把all-reduce搬进内核

每个输出投影tile计算完成后,K2就把它推送到每张GPU的内存,各GPU按rank顺序累加这些分块,同时其他工作组仍在产出tile,即推送与归约两个阶段。MoE输出也以同样方式归约。每次跨GPU等待都设有低于SGLang watchdog超时的截止时间,一旦超时,所有GPU上的本次启动都会停止,而不会让服务器挂起。

AMD实现兼容解码图,并直接接入SGLang的graph runner。内核编译与缓冲区准备在初始化阶段完成,随后SGLang为每种支持的形状捕获专用执行路径,并通过现有服务流程回放。

服务结果

在AgentX轨迹回放中,四张MI355X上1、4、8个并发会话时,AMD插件把P90单用户token生成速度提升45% 到56%,见开篇的总览图。两组运行使用相同的AgentX配置,搭配DSpark投机解码与TP4。

插件系统: 设计与集成

专用内核往往代码量很大。硬件、模型架构与并行配置的每种组合都可能需要独立实现,不同负载还会带来进一步的专用化。组合越多,需要审查、测试和维护的代码就越多。若把所有实现都并入SGLang,核心代码库会越来越难以维护,评审者与维护者的负担也会持续加重。

外部内核库AMD Mono与NVIDIA Mega通过模型规格接入SGLang,依次经过Register、Guard、Build与Runtime四个阶段,运行时在插件专用前向与SGLang通用前向之间分发。AMD与NVIDIA的接口仍在演进。

插件系统通过模型规格把这些外部库接入SGLang,规格中声明其依赖条件与支持的配置。内核团队可以独立开发实现,同时复用SGLang的调度与运行时资源。

集成过程把启动阶段的准备与执行阶段分开:

  1. Register:
     插件为其支持的每种模型架构注册一份规格,描述实现的依赖条件并提供构建入口。SGLang借此发现外部实现,而模型支持的细节仍保留在拥有这些内核的库中。
  2. Guard:
     专用内核对硬件、精度、并行方式与服务特性都有假设。SGLang在加载权重之前检查声明的依赖条件,使不兼容的配置尽早失败;插件构建之前还会对已加载的模型做额外检查。这些检查区分两种情况:服务器配置本身不受支持,以及受支持的服务器遇到了插件未覆盖的步骤。
  3. Build:
     权重准备与执行资源在初始化阶段完成配置,供后续请求复用。集成方式适配各实现的需求:AMD可以在权重转换前保留checkpoint张量,NVIDIA则获得一个绑定,可在运行时状态就绪时访问这些状态。SGLang在确定KV cache大小之前构建插件,使其显存分配被计入,然后在模型的前向路径中安装分发逻辑。
  4. Runtime:
     插件可能只覆盖特定的步骤类型与token数,因此专用执行与通用执行并存。安装的分发器根据插件的支持条件选择插件前向或SGLang原有前向。各张量并行rank必须对覆盖范围达成一致,以免进入不兼容的集合通信。这一选择嵌入ModelRunner现有的执行流程;graph捕获时会为每种形状记录所选路径,服务时直接回放graph,无需重复执行Python分发。

这一设计让内核团队能交付聚焦的优化,而不必把每个专用实现都加入SGLang核心代码库。集成工作集中在明确的接口上,各库可以逐步扩大覆盖范围。专用内核服务于其优化的场景,在受支持的配置内,其余步骤由SGLang的通用前向处理。


结语
低延迟场景的瓶颈不在算力而在依赖等待、启动边界与通信停顿,NVIDIA路径通过提前释放依赖和在epilogue中直接跨卡推送来重叠这些等待,AMD路径则把整层压缩为两次常驻启动并在核内完成all-reduce。插件框架用Register、Guard、Build、Runtime四个阶段把厂商内核与SGLang核心解耦,专用前向只接管其覆盖的步骤,其余步骤回落到通用前向,使专用优化可以逐步扩展而不增加核心代码库的维护负担。

【传送门】
把KVCache变成可训练记忆:Context Tuning让LLM免权重微调TokenSpeed-Kernel:把推理内核做成一等公民vLLM+Mooncake: 把agentic前缀复用从1.7%拉到92.2%KVCache缝合术: 突破前缀匹配天花板,首Token快14倍 多文档快2~4倍AI芯片架构全景: 从NVIDIA到Groq的六条设计路线MLP就是Hebbian记忆: 无需训练,往Transformer块注入事实知识的构造方法Agent卷向AI Infra: SGLang团队用硬核Agent优化框架和CUDA Kernal性能Kimi K3技术详解之KDA: 线性注意力如何精准编辑被压缩的记忆

参考:https://www.lmsys.org/blog/2026-10-18-sglang-low-latency-mode

相关学习资料