AI大模型推理框架,vLLM和SGLang有什么区别?

847 阅读6分钟

先说结论: 如果你对高并发处理有严格要求,或是需要支持多轮对话、格式化输出的模型,SGLang会是不错的选择。

图片

随着请求量的提升,SGLang相较vLLM展现出更显著的优势,在需要高性能和高并发的应用场景中可能是更好的选择。

图片

SGLang是什么?

SGLang全称Structured Generation Language(结构化生成语言),是一种专为推理任务设计的框架。

它致力于解决大模型部署过程中的关键问题,通过优化CPU和GPU资源使用,显著提升系统吞吐性能。

该框架的核心优势在于有效减少重复运算,从而降低LLM使用门槛,让开发者能够更便捷地应用大语言模型技术。

图片

SGLang的核心功能体现在两个方面:首先,它能够处理复杂的LLM程序开发,不仅限于基础问答场景,还包括实现多轮对话交互、指导模型进行任务规划、集成外部API调用,以及生成JSON等结构化数据输出。

其次,该系统采用前后端协同架构,通过前端DSL语言降低编程复杂度,同时后端运行时系统专注于执行层面的优化,包括任务调度策略和多GPU并行计算能力的提升。

SGLang的技术:

RadixAttention(基数注意力) : SGLang采用基数树(RadixTree)来组织KV缓存。多个请求可以复用之前计算好的部分结果,尤其在进行多轮对话时,缓存命中率能提升3-5倍,响应速度自然就上去了。

图片

结构化输出: SGLang通过正则表达式实现约束解码,可以直接输出符合要求的格式,这对API调用和数据处理特别有帮助。

编译器: 前端DSL简化了复杂逻辑的编写,后端运行时专注于性能优化,这种前后端解耦的架构,既保证了灵活性又提升了执行效率。

VLLM是什么?

VLLM全称Vectorized Large Language Model Inference(向量化大型语言模型推理),说白了就是个针对大模型推理和服务优化的高性能工具库。

它在运行速度、资源利用率和操作便捷性方面都有显著提升,因此成为部署DeepSeek、Qwen、Llama等主流大模型时的首选。

图片

VLLM的设计核心聚焦于两大方面:首先是在内存优化和高吞吐量表现上,尤其当多个请求同时处理时,能够显著降低模型推理的内存占用并提升运行速度。

其次是创新性地采用了PagedAttention(分页内存管理)与ContinuousBatching(连续批处理)技术,重点针对单次推理场景中的性能效率与资源利用率问题提供解决方案。

VLLM的核心理念:

Paged Attention(分页注意力) : 借用了操作系统的分页机制,将KV缓存分割成多个小块,实现GPU内存的动态分配。

这种设计使得内存管理更加灵活,有效避免了碎片问题,据称可将内存效率提升3-4倍,从而支持处理更多并发请求。

图片

Continuous Batching(连续批处理) :摒弃了传统的等待凑批处理模式,VLLM能够实时将新请求动态加入处理队列,确保GPU持续处于工作状态,显著提升硬件利用率。

多卡并行优化(Zero Redundancy Tensor Parallelism) :在多个GPU协同工作时,VLLM通过NCCL/MPI等通信库实现模型权重的智能切分与同步,既优化了内存使用,又提升了整体计算性能。

性能跑分大PK: 谁跑得更快?

性能怎么样,还得看实测数据。不过要注意,测试条件不同,结果可能也会有差异。

SGLang擅长的场景

复杂任务处理: 适用于多轮对话、规划、调用工具。有测试说,在Llama-7B上跑多轮对话,吞吐量比vLLM高5倍。这主要靠RadixAttention高效复用KV缓存,延迟也低了不少。

图片

格式化输出: 要生成JSON、XML这类格式,比如做智能客服、数据提取,SGLang自带这功能,用起来更顺手。

VLLM的传统强项:

高吞吐单轮推理: 像内容生成、推荐、单轮问答这种,vLLM靠着PagedAttention和ContinuousBatching,以前确实很能打,吞吐量高,单卡就能扛上百并发。

最近测试的新看点:

TTFT(首字出词时间) : 在Llama3.170BFP8模型单H100上的测试里,VLLM的TTFT最快(123ms),比SGLang(340ms)和TensorRT(194ms)都好。看来对响应速度要求极高的场景vLLM还是有优势。

吞吐量(持续输出能力) : 但在同样条件测吞吐量时,当batchsize增大,SGLang的优势就出来了。

图片

比如batchsize到64时,SGLang能跑到460tokens/秒,把其他框架甩在后面。高并发下的表现:另一组用Llama3-70B-FP8在2块H100上的测试,更能说明问题。

顺序请求时,SGLang(38tokens/s)比VLLM(35tokens/s)稍快一点。但到了并发请求场景,SGLang能稳定在30-31tokens/s,vLLM却从22tokens/s掉到了16tokens/s。

Llama3.1-8B在单H100上的测试也差不多:并发下SGLang稳定在75-78tokens/s,vLLM从37tokens/s降到35tokens/s左右。这说明在高并发压力下,SGLang的稳定性和扩展性可能更好。

特定模型优化: 当然,框架对某个模型的优化程度也有影响。有测试提到SGLang处理Mistralv0.3时表现不太行,可能对这个模型的优化还不够。

图片

大模型通常得上多卡。它俩的多卡策略也有点不同:

SGLang的多卡玩法: 支持张量并行(把模型切到多卡上)、数据并行,而且它的RadixAttention能跨GPU共享缓存,进一步减少多卡计算的浪费。

V* LLM的多卡策略*: 也支持张量并行(号称零冗余优化内存),有分布式调度器能智能分配请求给不同GPU,还能抢占低优先级任务,甚至能跨机器做流水线并行,扩展性很强。

到底怎么选?SGLang还是vLLM?

什么时候选SGLang?

场景复杂,需要多轮交互: 做高级聊天机器人、需要模型多步思考的Agent,SGLang的RadixAttention和对程序化调用的支持是巨大优势。

输出特定格式: API返回值必须是严格的JSON或XML,SGLang更方便。

图片

高并发、高吞吐: 最新测试显示,尤其是在并发量大的时候SGLang似乎能提供更稳定、更高的吞吐量。

什么时候选vLLM?

高并发的单轮任务: 比如内容生成、问答,对第一个字出来的速度要求高。

资源有限但想要最大化吞吐: 对于想要部署几十亿参数的模型,VLLM的Paged Attention对内存效率提升比较高。

快速集成: VLLM的API相对更成熟,集成起来更省事。

总结一下: 选哪个大模型推理框架,还要根据自己的实际情况来看。从目前的性能评测来看,SGLang似乎在高吞吐和负载稳定性方面表现比较好。

当然,最好的办法还是在自己的硬件和业务下把两个框架都拉出来测一测,看看哪个最合适。