基于 vLLM 和 SGLang 的模型推理服务架构
本文提出了一种结合vLLM和SGLang的LLM推理服务架构。vLLM通过PagedAttention等技术实现高性能推理,提供高吞吐低延迟;SGLang则提供结构化生成能力,支持约束解码和多轮对话管理。架构采用分层设计:SGLang运行时负责解析结构化请求、约束编译和负载均衡,vLLM引擎执行高效推理。支持单机或集群部署,通过缓存和并行技术优化性能。该架构兼具vLLM的高性能和SGLang的灵活
基于 vLLM 和 SGLang 的模型推理服务架构旨在结合两个框架的优势:vLLM 提供高性能的 LLM 推理(通过 PagedAttention 等技术实现高吞吐低延迟),SGLang 则提供强大的结构化生成能力(约束解码、多轮对话管理、复杂 prompt 编程)。下面详细描述这种架构的设计思路、组件交互以及部署考量。
1. 核心组件简介
-
vLLM:
一个专为 LLM 推理和服务优化的库,核心创新是 PagedAttention 内存管理机制,可显著提升 KV 缓存的利用率,支持连续批处理、量化、张量并行等特性,并提供 OpenAI 兼容的 API 接口。 -
SGLang:
一个面向 LLM 的结构化生成语言框架,包含:-
前端语言:基于 Python 的嵌入式 DSL,用于描述包含控制流、约束(如正则、JSON 模式)的生成任务。
-
运行时(SRT, SGLang Runtime):负责解析前端程序、管理请求队列、调度后端引擎执行,并支持与多种推理后端(vLLM、LightLLM、PyTorch 等)集成。
-
2. 总体架构
下图展示了基于 vLLM 和 SGLang 的推理服务典型架构:
┌─────────────┐ ┌─────────────────────────────────┐ ┌─────────────┐
│ 客户端 │─────▶│ SGLang 运行时 (SRT) │─────▶│ vLLM 引擎 │
│ (HTTP/gRPC)│ │ - 解析结构化请求 │ │ - 模型加载 │
└─────────────┘ │ - 约束编译/缓存 │ │ - PagedAttention │
│ - 请求调度与负载均衡 │ │ - 连续批处理 │
│ - 多模型/多副本管理 │ └─────────────┘
└─────────────────────────────────┘ │
│
┌──────────────────────────────────────┘
│
┌─────────▼─────────┐
│ 可选:多个 vLLM │
│ 实例(分布式) │
└───────────────────┘
工作流程:
-
客户端通过 HTTP 或 gRPC 向 SGLang 运行时发送请求,请求内容可以是一个结构化生成任务(例如一段包含
select和gen语句的 Python 代码)或纯文本提示。 -
SGLang 运行时解析任务,将其转换为内部中间表示(IR),并应用约束编译(如正则表达式编译为有限状态机)。
-
运行时根据请求类型、模型名称、当前负载等因素,选择合适的后端引擎(此处为 vLLM)并提交执行请求。
-
vLLM 引擎执行推理:加载模型权重,利用 PagedAttention 管理 KV 缓存,以连续批处理方式处理请求,生成 token 并返回结果。
-
SGLang 运行时收集输出,可能根据前端定义的格式进行后处理,最后返回给客户端。
3. 组件交互细节
3.1 SGLang 运行时(SRT)与 vLLM 的集成方式
SGLang 支持两种模式与 vLLM 协同工作:
-
内嵌模式:将 vLLM 作为 Python 库直接导入 SGLang 运行时进程。这种方式延迟最低,但要求运行时与 vLLM 共享 GPU 资源,适合单机部署。
-
远程模式:SGLang 运行时通过 HTTP 或 gRPC 调用独立部署的 vLLM 服务。这种方式可以实现更好的隔离、弹性伸缩和多模型管理,适合大规模生产环境。
SGLang 提供了一个抽象的后端接口,可以轻松接入不同的推理引擎。对于 vLLM,SGLang 官方已内置适配器,能够将 SGLang 的内部请求格式转换为 vLLM 的 API 调用(如 vllm.LLM 类或 OpenAI 兼容接口)。
3.2 结构化生成的实现
SGLang 的前端语言允许开发者编写类似以下代码的生成逻辑:
@function
def multi_turn(s, question):
s += "User: " + question + "\n"
s += "Assistant: " + gen("answer", max_tokens=256, regex="\d+\.\d+") + "\n"
当 SGLang 运行时接收到此任务时,会:
-
将
gen调用中的约束(如正则\d+\.\d+)编译为约束状态机。 -
在向 vLLM 发起生成请求时,将约束信息以某种方式传递给后端。vLLM 本身不支持约束解码,因此 SGLang 运行时需要在 vLLM 生成过程中介入:它可以通过“请求-响应”循环模式,逐 token 向 vLLM 请求下一个 token 的概率分布,然后根据约束状态机进行采样或拒绝,直到满足约束。这种方式虽然增加了交互次数,但保证了生成的结构符合预期。SGLang 对此进行了优化,例如批处理多个约束请求以减少开销。
3.3 调度与负载均衡
SGLang 运行时内置了智能调度器,可以根据:
-
请求的优先级(例如延迟敏感 vs 吞吐量优先)
-
当前各后端引擎的负载(如 GPU 利用率、队列长度)
-
模型版本(如通过哈希值区分不同微调版本)
将请求路由到最合适的 vLLM 实例。如果使用远程模式,可以结合服务发现组件(如 etcd、Consul)动态管理 vLLM 实例列表。
4. 部署与扩展性考量
4.1 部署方案
-
单机部署:将 SGLang 运行时和 vLLM 引擎部署在同一台机器上,共享 GPU 资源。适合开发测试或中小规模场景。
-
集群部署(Kubernetes):
-
将 SGLang 运行时作为无状态服务部署,通过 Horizontal Pod Autoscaler 根据 QPS 自动扩缩。
-
将 vLLM 引擎部署为有状态的工作负载(StatefulSet),每个 Pod 加载一个模型副本,通过内部服务暴露 gRPC/HTTP 端点。
-
使用服务网格(如 Istio)进行细粒度的流量控制和灰度发布。
-
4.2 模型并行与多卡推理
vLLM 本身支持张量并行(Tensor Parallelism)和流水线并行(Pipeline Parallelism),可以在多卡或多节点上运行大模型。在架构中,vLLM 引擎可以以分布式方式启动,例如通过 Ray 或直接使用 torch.distributed。SGLang 运行时只需知道如何将请求发送到这些分布式 vLLM 的协调入口(通常是主节点),而无需关心内部并行细节。
4.3 缓存与加速
-
SGLang 缓存:约束编译结果可以缓存,避免重复编译相同正则或 JSON schema。
-
vLLM 缓存:vLLM 的 PagedAttention 本质上是 KV 缓存的复用,同时 vLLM 也支持 prefix caching(前缀缓存),可以在多轮对话或相似请求中复用部分 KV 缓存,显著降低首 token 延迟。SGLang 运行时可以提示 vLLM 利用这一特性(例如传递对话历史)。
5. 优势与应用场景
5.1 优势
-
高性能推理:vLLM 的 PagedAttention 和连续批处理确保高吞吐量。
-
灵活结构化生成:SGLang 的前端语言和约束解码使得开发者能精确控制输出格式,特别适合需要 JSON、代码、数学表达式等场景。
-
资源隔离与弹性:通过分层架构(SGLang 负责控制平面,vLLM 负责数据平面),可以实现更好的资源管理和故障隔离。
-
多模型支持:SGLang 运行时可以同时对接多个 vLLM 后端(不同模型或不同版本),并实现统一入口。
5.2 典型应用场景
-
对话系统:利用 SGLang 管理多轮对话状态,vLLM 负责生成回复。
-
结构化数据提取:从非结构化文本中提取符合 JSON schema 的信息。
-
代码生成:约束生成符合语法规则的代码片段。
-
复杂推理任务:例如 Chain-of-Thought 中要求中间步骤符合特定格式。
6. 总结
基于 vLLM 和 SGLang 的推理服务架构将两个前沿技术有机融合:vLLM 提供坚实的推理性能基础,SGLang 带来灵活的结构化生成能力。通过合理的分层设计和集成方式,该架构既能满足高并发生产环境的需求,又能适应复杂的生成任务约束,是当前 LLM 服务化部署的有力选项。未来随着两个项目的演进,集成度与性能有望进一步提升。
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐
所有评论(0)