推理框架选型:vLLM、SGLang 与 TensorRT-LLM 的适用边界
三个主流推理框架在延迟、吞吐和部署复杂度上的差异,以及按场景选择的判断依据。
三个框架都能跑,但优化方向完全不同。选错不会让你跑不起来,只会让你在错误的维度上优化。
各自的强项
vLLM:PagedAttention 的起点,生态最广,模型支持最全。适合通用场景,尤其是需要快速上线多种模型时。
SGLang:RadixAttention 对前缀复用做了深度优化,多轮对话和结构化输出的场景优势明显。约束解码(JSON schema 等)做得比较完整。
TensorRT-LLM:编译式优化,把算子融合和 kernel 调优做到极致。延迟最低,但模型支持滞后,编译流程重。
实测对比
在同一台 8 卡机器上跑同一个 70B INT4 模型,固定负载:
| 指标 | vLLM | SGLang | TensorRT-LLM |
|---|---|---|---|
| 首 token 延迟 | 中 | 低(有前缀缓存) | 最低 |
| 高并发吞吐 | 高 | 最高 | 高 |
| 模型支持 | 最全 | 较全 | 有限 |
| 部署复杂度 | 低 | 中 | 高 |
数字会随模型和负载变化,这里只反映相对关系。
按场景选
- 快速上线、多模型:vLLM。开箱即用,模型库最全
- 多轮对话、RAG、结构化输出:SGLang。前缀复用和约束解码是实打实的优势
- 延迟敏感、模型固定:TensorRT-LLM。愿意投入编译时间换最低延迟
- 需要频繁换模型:不要用 TensorRT-LLM,编译开销吃不消
一个容易被忽略的维度
前缀缓存的命中率对多轮对话场景影响巨大。如果业务是多轮交互,SGLang 的 RadixAttention 能把重复前缀的计算完全省掉,实际吞吐提升往往超过框架本身的差异。
反过来,如果是单轮、每次输入都不同的场景,前缀缓存几乎无收益,此时 vLLM 的通用性更值钱。
结论
不要迷信单一框架的基准数字。先明确业务的请求模式(单轮还是多轮、是否共享前缀、延迟还是吞吐优先),再对应选择。三个框架都能达到可用状态,差距在特定场景下才拉开。