借助 AI 编程智能体,IBM 团队不到一周将 SGLang 集成进 Spyre
借助 AI 编程智能体,不到一周将 SGLang 集成进 IBM Spyre
IBM 两人团队借助 AI 编程智能体,在不到一周内用约 1,500 行代码的插件将 SGLang 集成进 IBM Spyre 加速器。SGLang 在 Spyre 上的吞吐量约为 torch-spyre 参考 PyTorch 推理实现的 3.6 倍,在 Granite 3.3 8B 和 Gemma 4 26B A4B 实测负载上与 vLLM 持平。
PyTorch:Blog· Gal Bloch (IBM), Itay Etelis (IBM), Raghu Ganti (IBM), Mudhakar Srivatsa (IBM), Alex Nails (RadixArk)·2026-11-12 22:45· 28 分钟前AI 评分44
借助 AI 在不到一周内将 SGLang 集成进 Spyre
AI 导读
两人团队借助 AI 编程智能体,在不到一周内用约 1,500 行代码的插件把 SGLang 集成进 IBM Spyre。SGLang 在 Spyre 上的吞吐量约为 torch-spyre 参考 PyTorch 推理实现的 3.6 倍,在 Granite 3.3 8B 和 Gemma 4 26B A4B 的实测负载上与 vLLM 持平。
正文 · 原文
TL;DR
在 AI 编程智能体的帮助下,我们两人团队在不到一周内将 SGLang 与 IBM Spyre 集成,构建了一个约 1,500 行的插件。PyTorch 中已有的 Spyre 支持以及 SGLang 清晰的扩展点,使复用硬件代码变得简单直接。SGLang 的吞吐量约为使用 torch-spyre 的参考 PyTorch 推理实现的 3.6 倍。在针对 Granite 3.3 8B 和 Gemma 4 26B A4B 所测量的工作负载上,它也与 vLLM 持平。通过 RadixCache 实现的前缀共享无需任何 Spyre 特定改动即可工作。
我们从事 IBM 的 Spyre 加速器相关工作,希望让 Spyre 用户能够使用 SGLang 的服务栈,包括其内置的前缀共享功能。
在不到一周的时间里,我们两人利用 AI 辅助开发,用一个仅约 1,500 行代码的插件将 SGLang 集成进 IBM Spyre。一个关键因素是建立在现有的 PyTorch 硬件支持和 SGLang 定义良好的扩展点之上。这使我们两人连同 AI 编程智能体,能够在极短的时间内将新的加速器集成进 SGLang。AI 编程智能体以 Spyre 操作的现有 PyTorch 实现作为参考代码,并将集成代码适配到 SGLang 的后端接口。它们的工作重点是将现有的硬件支持连接到新的服务框架。
Spyre 与起点
Spyre 是 IBM 面向企业 AI 推理的加速器。它通过 torch-spyre 进行集成,后者将 Spyre 注册为 PyTorch 设备并连接到 torch.compile,通过标准 PyTorch API 暴露硬件支持。
结果
最初的 SGLang 集成花了我们两人不到一周的工作时间。该插件约 1,500 行,建立在来自 PyTorch 的编译器和可复用硬件支持之上。四个小补丁扩展了 SGLang 的后端支持:其中两个使现有执行路径在没有 CUDA 特定依赖的情况下可用,另外两个将 Spyre 注册为受支持的设备和不使用 Triton 的注意力后端。兼容性改动也可以支持其他加速器;注册改动则特定于 Spyre。
SGLang 在 Spyre 上实现了约为使用 torch-spyre 的参考 PyTorch 推理实现 3.6 倍的吞吐量。
我们还在 Spyre 上使用 Granite 3.3 8B 和 Gemma 4 26B A4B 比较了 SGLang 和 vLLM。在我们针对这两个模型所测量的工作负载上,SGLang 的性能与 vLLM 持平。

SGLang 与 vLLM / spyre-inference 在 Granite 3.3 8B 和 Gemma 4 26B-A4B 上的相对性能,以 vLLM = 1.0 归一化。越低越好。
为何可行
在编译器和现有推理服务器均已就位的情况下,添加 SGLang 成为一项聚焦的集成任务。PyTorch 和 torch.compile 提供了共享的实现层,通过两个服务框架都可使用的 API 来表达加速器功能。
SGLang 提供了清晰的接入点,让这些代码得以连接。它的平台注册、注意力后端、KV 池和算子分发将集成工作拆分为边界明确的任务,同时保留了现有的调度器、请求处理和服务循环。参考代码来自现有的 Spyre 的 vLLM 集成,包括其加速器运算的 PyTorch 实现。这为 AI 编码代理提供了 Spyre 硬件行为的具体代码,而 SGLang 的扩展点则定义了它们改编后的代码必须满足的接口。两者结合,减少了代理们需要推断硬件特性以及集成应归属何处的负担。
现有的 vLLM Spyre 后端约有 3,500 行代码,而 SGLang 插件约为 1,500 行。在初始集成中,注意力基类提供了外围逻辑,Spyre 后端只需覆盖内部的缩放点积注意力运算。复用该基类约占两个插件行数差异的三分之二。SGLang 的设备无关 KV 池还允许仅通过一次方法覆盖来完成缓冲区创建;在现有路径依赖 Triton 的地方,分配仍需基于 PyTorch 处理。
复用 vLLM Spyre 实现
我们复用了 vLLM Spyre 集成中的注意力代码,包括其将输入分组为桶以及处理张量形状的方式。我们还复用了其基于 PyTorch 的 KV 缓存分配方法。对于 RMSNorm、SiLU、GeLU、旋转嵌入和线性层,我们将现有的 Spyre 实现接入 SGLang 的算子分发。
有些功能完全不需要 Spyre 特定的工作。RadixCache 就是一个很好的例子:前缀共享完全在 SGLang 的调度器内解决,在到达加速器执行之前就已完成,因此现有的调度逻辑无需改动即可工作。
该插件已作为开源项目与上游 SGLang 一同提供。
将 SGLang 与 Spyre 配合使用
该示例假设 Spyre 运行时、torch-spyre、SGLang 插件及其兼容性补丁已安装并配置完毕。
import sglang as sgl
models = [
"ibm-ai-platform/micro-g3.3-8b-instruct-1b",
"mistralai/Ministral-8B-Instruct-2410",
]
for model in models:
engine = sgl.Engine(
model_path=model,
device="spyre",
attention_backend="spyre_paged",
dtype="float16",
page_size=64,
max_running_requests=1,
disable_cuda_graph=True,
)
try:
output = engine.generate(
"Why is the sky blue?",
{"temperature": 0, "max_new_tokens": 64},
)
print(model, output["text"])
finally:
engine.shutdown()展望未来
Spyre 软件栈仍在快速演进。
在未来几个月内,我们预计将增加对动态形状的支持,从而减少目前所需的大量形状管理工作。今年晚些时候,我们还预计将为 Spyre 带来 Triton 支持,并在其之上启用 RadixAttention,为更多内核优化打开大门。
将硬件支持保留在 PyTorch 中,并将集成代码置于 SGLang 的扩展点,为未来的编译器和运行时改进提供了进入服务栈的路径。下一次集成可以从相同的共享基础开始,拥有开发者和 AI 编码工具可以使用的具体实现和接口。
文章 Integrating SGLang into Spyre in Under a Week with AI 首次出现在 PyTorch。
来源:PyTorch:Blog · pytorch.org
来源:RadarAI · aihot.news