跳到主要内容
返回时间线
LMSYS Org来源发表:

Muse Spark Open 解码跨过每秒千词:把每层压成一个常驻内核,517 升到 1,109 tok/s

核心概要

Muse Spark Open 的解码速度从基线 517 tok/s 提升到 1,109 tok/s,做法是把每一层的注意力和 MoE 合成一个常驻 GPU 的内核,让权重加载、张量核心计算和跨卡通信在同一时刻重叠进行。此前 SGLang 每个解码步要依次启动约 1,450 个内核,内核之间 GPU 会排空再填充,部分 SM 和线程处于空闲。该结果在 Blackwell GPU 上以批大小为 1、配合 DFlash V2 推测解码测得,尚未扩展到更大批量。

Source-provided article image: Muse Spark Open Ultrafast: Pushing beyond 1,000 Tokens per second
LMSYS Org

深度剖析

Muse Spark Open 的解码吞吐从基线的 517 tok/s 提高到 1,109 tok/s,跨过每秒一千词。 基线是 SGLang 常规服务路径,即使启用推测解码,每个解码步仍要启动约 1,450 个内核,内核切换之间 GPU 排空再填充,部分 SM 与线程空闲。 两个数字都来自同一模型在 Blackwell GPU 上的解码测量,基线 517 tok/s、巨型内核 1,109 tok/s,构成同一设置下的前后对照。

做法是让一个内核常驻每块 SM,同时承担一层里的多种任务,而不是按算子逐个启动。 巨型内核相当于把多道程序设计搬到 GPU:每个线程束在编译期被分配固定角色,有的提前搬运下一操作的权重,有的跑张量核心,有的负责发送与接收。 每次启动覆盖从一层注意力到下一层 qkv 投影和 KV 写入,144 块 SM 上每块放一个十二线程束的线程块,线程块以四个为一簇启动。

权重预取和推测式专家预取把本会空闲的等待时间用来搬运数据。 权重不依赖上一层,因此可以在当前操作尚未结束时读入共享内存或 L2;专家要等路由器出结果,于是按上一步的路由把本卡最常用的 14 个专家切片提前拉进 L2。 专家预取在 5.3 ms 的单步时间里省下约 0.2 ms,猜错只多花带宽,因为此时 GPU 本来就在等待。

启示与展望

已展示的范围是 Blackwell GPU 上批大小为 1、配合 DFlash V2 推测解码的单请求解码,模型为 8 卡张量并行的 Muse Spark Open;更大批量的支持被明确列为下一步工作。

单请求下没有一种重叠策略处处适用,权重放共享内存、放 L2 还是两者兼用,以及预取多远、用什么缓存提示,都是逐操作试出最快版本后选定的;作者也指出当前内核仍像固定任务数的多道程序设计,尚未做到运行时调度。