大模型推理框架笔记:vLLM、sglang 等
最近在折腾大模型应用时,发现推理框架几乎决定了服务的性能体验,比如吞吐、延迟、并发能力、显存利用率等。下面是一些个人整理的入门笔记,涵盖 vLLM 和 sglang 等常见方案。
为什么需要推理框架?
直接用 transformers 或原生模型推理通常有几个问题:
- 吞吐低:一次只处理少量请求,GPU 利用率很差
- 延迟不稳定:并发一多就开始排队、阻塞
- 显存浪费:KV Cache 管理粗糙,同一批请求间不能很好复用
- 部署困难:缺少完整的 HTTP / OpenAI API 兼容接口
推理/服务框架就是在「模型」之上加一层,让你更高效、更方便地把模型变成在线服务。
vLLM:高吞吐推理引擎
vLLM 是一个专注于高吞吐推理的引擎,核心卖点是:
- PagedAttention:像操作虚拟内存一样管理 KV Cache,大幅提高显存利用效率
- 高吞吐批处理:自动对来自不同请求的 token 做动态批处理
- 兼容 OpenAI API:可以直接用
openai/openai-python等 SDK 调用 - 支持多模型 & 多 GPU:更适合做统一的大模型推理集群
典型用法一般是:
- 用
vllm serve或 Python API 启动一个模型服务 - 通过 HTTP / WebSocket / OpenAI 风格接口发送请求
- 在上面挂一层网关、鉴权、限流等,就能变成生产环境可用的模型服务
适用场景:
- 对吞吐要求高:例如问答机器人、多用户同时使用的应用
- 需要兼容 OpenAI API,方便复用已有 SDK / 客户端
- 想充分利用 GPU 资源,减少显存浪费
sglang:面向多模态与复杂工作流
sglang 一开始就把自己定位成「大模型程序语言 + 推理引擎」,除了性能,还强调:
- 声明式的 Prompt/Workflow 描述:可以像写脚本一样定义多轮调用、分支逻辑
- 多模态支持:文本、图像等多模态模型的统一调用
- 与 vLLM 等后端集成:底层可以复用已有推理引擎
更直观地理解,可以把 sglang 看成:
- 一部分是「框架」:负责任务调度、并发、缓存等
- 一部分是「DSL(领域特定语言)」:让你用更结构化的方式描述复杂的 LLM 应用
适用场景:
- 一个请求里需要多步调用模型,例如:分析 → 调用工具 → 再总结
- 需要在服务端控制 Prompt 编排,而不是在客户端硬编码
- 想在一个系统里统一管理多个模型、多个任务流
如何选择?
如果只是做一个简单的聊天机器人或补全接口,可以粗略这样选:
- 只需要单模型、高吞吐、OpenAI 风格接口 → 优先考虑 vLLM
- 需要复杂工作流、多模态、多阶段推理 → 可以研究 sglang 或类似框架
- 已有自己的调度/工作流系统 → 用 vLLM 提供基础推理能力,在上层自己编排
当然,很多团队会组合使用:底层用 vLLM 提供推理服务,外面再套一层自定义的编排框架或 sglang。
本地玩一玩可以做什么?
如果只是想在一块或几块 GPU 上本地体验:
- vLLM:
- 跑起一个开源大模型(如 Qwen、LLaMA 等)的高吞吐聊天接口
- 用 OpenAI SDK 写一个本地
chatCLI 或 Web 聊天界面
- sglang:
- 搭一个小型「智能助手」,请求链路里包含检索、工具调用等多步
- 试着把「Prompt + 调用逻辑」都写成可读性更强的脚本,方便复用和迭代
总结
- 推理框架的核心价值:把大模型变成真正可用、可扩展、可维护的在线服务
- vLLM 更偏向底层推理性能优化,适合做统一推理后端
- sglang 更偏向应用层编排和多模态/复杂工作流