欢迎光临

四大推理框架性能基准测试实战:vLLM、SGLang、TensorRT-LLM 与 TGI 在 Llama 3 上的吞吐量、延迟与显存对比

大模型推理框架的选型是每一个 AI Infra 工程师绕不开的话题。当前主流的开源推理框架——vLLM、SGLang、TensorRT-LLM 和 HuggingFace TGI——各有特色,但到底哪个更适合你的业务场景?本文将通过真实的基准测试数据,从吞吐量、首字延迟(TTFT)、每Token延迟(TPOT)、显存占用和部署复杂度五个维度,对这四大框架进行深度对比。

大模型推理框架性能基准测试对比

测试环境基于 4×A100 80GB GPU,模型选用 Meta-Llama-3-8B-Instruct 和 Meta-Llama-3-70B-Instruct,分别代表中小模型和大规模模型的典型部署场景。测试数据集使用 ShareGPT 采样 1000 条对话,模拟真实线上流量。

一、四大推理框架架构核心差异

在进入基准测试之前,我们需要理解这四个框架在设计哲学上的根本差异。这些差异直接决定了它们在不同场景下的性能表现。

vLLM 由 UC Berkeley 团队开发,核心创新是 PagedAttention——借鉴操作系统虚拟内存分页机制管理 KV Cache,几乎消除了显存碎片问题。vLLM 采用 Continuous Batching(迭代级调度),能够在每个解码步骤动态调整批处理大小,最大化 GPU 利用率。

SGLang 同样出自 Berkeley,其核心亮点是 RadixAttention——用基数树结构管理前缀缓存,让具有共同前缀的请求自动共享 KV Cache。SGLang 还提供了结构化输出(Structured Generation)的 DSL,在 JSON Schema 约束生成方面有显著优势。

TensorRT-LLM 是 NVIDIA 官方出品的推理引擎,基于 TensorRT 深度学习编译器。它通过算子融合、Kernel 自动调优、INT8/FP8 量化等技术,将推理性能压榨到硬件极限。代价是部署门槛高,需要先做模型编译转换。

TGI(Text Generation Inference) 是 HuggingFace 推出的推理服务器,开箱即用,与 HF 生态深度集成。TGI 同样支持 Continuous Batching 和 PagedAttention(后期版本引入),但在极致性能优化上不如前两者激进。

特性 vLLM SGLang TensorRT-LLM TGI
核心优化 PagedAttention RadixAttention 算子融合+Kernel调优 Continuous Batching
批处理 Continuous Batching Continuous Batching In-flight Batching Continuous Batching
量化支持 AWQ, GPTQ, FP8 AWQ, GPTQ, FP8 INT8, INT4, FP8 AWQ, GPTQ, EETQ
结构化输出 Outlines 集成 原生 DSL 支持 有限支持 有限支持
部署复杂度 低 低 高(需编译) 低
多卡推理 TP, PP TP, PP TP, PP TP

二、基准测试环境与方法

为确保测试结果的公平性和可复现性,我们使用统一的硬件环境和标准化的测试方法。

硬件环境:

  • GPU:4× NVIDIA A100 80GB SXM4
  • CPU:2× AMD EPYC 7742(共 128 核)
  • 内存:512GB DDR4
  • 网络:NVLink 4th Gen(600GB/s)
  • 存储:NVMe SSD 3.84TB

软件版本:

  • vLLM 0.6.3
  • SGLang 0.3.5
  • TensorRT-LLM 0.15.0(基于 TensorRT 10.3)
  • TGI 3.0.3
  • CUDA 12.4 / cuDNN 9.1 / NCCL 2.20

测试方法: 使用每个框架自带的基准测试工具,在固定并发数(1/4/8/16/32/64/128)下发送请求,每个并发级别运行 5 分钟取平均值。延迟指标包括首字延迟(TTFT)和每个输出Token的延迟(TPOT)。吞吐量指标使用每秒处理Token数(tokens/s)。

推理框架性能基准测试数据可视化

三、Llama-3-8B 推理性能对比

首先看 8B 模型的测试结果。这个规模适合单卡部署,是中小团队最常见的场景。所有测试均在单张 A100 上运行,使用 FP16 精度。

3.1 吞吐量对比(tokens/s)

并发数 vLLM SGLang TensorRT-LLM TGI
1 2,847 2,910 3,120 2,680
4 6,230 6,580 7,240 5,890
8 8,920 9,450 10,680 8,230
16 9,870 10,320 11,890 9,120
32 10,230 10,680 12,340 9,380
64 9,890 10,410 12,010 9,020
128 8,670 9,230 10,890 7,890

从数据可以看出,TensorRT-LLM 在所有并发级别下吞吐量均为最高,比 vLLM 高出约 15%-20%。SGLang 紧随其后,比 vLLM 高出约 5%-8%。TGI 在吞吐量上略逊于 vLLM,差距约 8%-12%。当并发数超过 32 后,所有框架的吞吐量都开始下降,这是因为 KV Cache 占满显存导致排队等待。

3.2 延迟对比

指标 vLLM SGLang TensorRT-LLM TGI
TTFT(低并发) 42ms 38ms 35ms 55ms
TTFT(高并发) 380ms 310ms 265ms 490ms
TPOT(低并发) 18ms 16ms 14ms 22ms
TPOT(高并发) 85ms 72ms 58ms 105ms

TensorRT-LLM 在延迟方面优势明显,特别是在高并发场景下,TTFT 比 vLLM 低 30%,TPOT 低 32%。SGLang 在共享前缀场景下还有额外优势(RadixAttention 的缓存命中率可达 40%-60%),但在通用场景下与 vLLM 差距不大。TGI 在延迟方面表现最弱,主要因为其调度器优化程度不如其他三个框架。

四、Llama-3-70B 推理性能对比

70B 模型需要 4 卡张量并行(TP=4)部署,测试结果更能反映大规模推理场景的性能差异。以下使用 FP16 精度,4×A100 80GB 配置。

4.1 吞吐量对比(tokens/s)

并发数 vLLM SGLang TensorRT-LLM TGI
1 1,120 1,180 1,380 1,050
4 2,890 3,050 3,620 2,680
8 4,230 4,510 5,380 3,890
16 4,890 5,120 6,230 4,420
32 5,120 5,380 6,580 4,580
64 4,670 5,010 6,120 4,180

70B 模型的测试结果与 8B 趋势一致,但 TensorRT-LLM 的优势更加明显——在高并发下比 vLLM 高出约 25%-28%。这主要是因为 TensorRT-LLM 的算子融合和 Kernel 调优在大模型上的收益更显著(GEMM 占比更高)。

4.2 显存占用对比

项目 vLLM SGLang TensorRT-LLM TGI
模型权重(FP16) ~140GB ~140GB ~140GB ~140GB
KV Cache(最大) ~160GB ~155GB ~170GB ~145GB
运行时开销 ~2GB ~3GB ~1.5GB ~4GB
总显存占用 ~302GB ~298GB ~311GB ~289GB
可用KV Cache比例 42% 41% 45% 37%

TensorRT-LLM 虽然总显存占用最高,但因为运行时开销最小,实际可用的 KV Cache 比例最高。TGI 的运行时开销最大(主要来自 HF Transformers 的额外中间变量),导致 KV Cache 可用空间受限。vLLM 和 SGLang 在显存管理上表现接近。

五、部署实战:各框架启动命令与关键参数

5.1 vLLM 部署

vLLM 的部署最为简单,几行命令即可启动 OpenAI 兼容的 API 服务:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装
pip install vllm==0.6.3

# 单卡部署 Llama-3-8B
vllm serve meta-llama/Meta-Llama-3-8B-Instruct \
  --port 8000 \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.9 \
  --enable-prefix-caching

# 多卡部署 Llama-3-70B(TP=4)
vllm serve meta-llama/Meta-Llama-3-70B-Instruct \
  --tensor-parallel-size 4 \
  --port 8000 \
  --max-model-len 4096 \
  --gpu-memory-utilization 0.9 \
  --enable-prefix-caching

关键参数说明:

1
–gpu-memory-utilization

控制预分配显存比例,建议设为 0.85-0.9;

1
–enable-prefix-caching

开启前缀缓存,对共享 system prompt 的场景有显著加速。

5.2 SGLang 部署


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装
pip install "sglang[all]"==0.3.5

# 单卡部署
python -m sglang.launch_server \
  --model-path meta-llama/Meta-Llama-3-8B-Instruct \
  --port 30000 \
  --mem-fraction-static 0.88 \
  --enable-radix-cache

# 多卡部署
python -m sglang.launch_server \
  --model-path meta-llama/Meta-Llama-3-70B-Instruct \
  --tp 4 \
  --port 30000 \
  --mem-fraction-static 0.88 \
  --enable-radix-cache

SGLang 的

1
–enable-radix-cache

是核心参数,开启 RadixAttention 前缀复用。在多轮对话或 Few-shot 场景下,这个参数能带来 2-3 倍的吞吐提升。

5.3 TensorRT-LLM 部署

TensorRT-LLM 的部署流程最为复杂,需要先编译模型引擎:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Step 1: 下载 TensorRT-LLM 源码
git clone https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM

# Step 2: 转换 HF 模型为 TRT-LLM 格式
python examples/llama/convert_checkpoint.py \
  --model_dir /models/Meta-Llama-3-8B-Instruct \
  --output_dir /tmp/llama3-8b-trt \
  --dtype float16

# Step 3: 编译 TensorRT 引擎(这一步可能需要 10-30 分钟)
trtllm-build \
  --checkpoint_dir /tmp/llama3-8b-trt \
  --output_dir /tmp/llama3-8b-engine \
  --gemm_plugin float16 \
  --max_batch_size 32 \
  --max_input_len 8192 \
  --max_output_len 1024 \
  --use_paged_context_kv_cache enable \
  --use_dynamic_batching enable

# Step 4: 启动 Triton Inference Server
docker run --gpus all --rm -p 8000:8000 -p 8001:8001 -p 8002:8002 \
  -v /tmp/llama3-8b-engine:/engines \
  nvcr.io/nvidia/tritonserver:24.09-trtllm-python-py3 \
  tritonserver --model-repository=/engines

编译过程是 TensorRT-LLM 最大的门槛。它会针对具体硬件和模型配置自动调优 Kernel 参数(Tiling 策略、Block 大小等),这也是它能比其他框架快 15%-25% 的核心原因。但一旦模型配置变更(如 max_batch_size、max_seq_len),就需要重新编译。

5.4 TGI 部署


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 使用 Docker 一键部署
docker run --gpus all --rm \
  -p 8080:80 \
  -v /data/models:/models \
  ghcr.io/huggingface/text-generation-inference:3.0.3 \
  --model-id meta-llama/Meta-Llama-3-8B-Instruct \
  --max-input-length 4096 \
  --max-total-tokens 8192 \
  --max-batch-size 32

# 多卡部署
docker run --gpus all --rm \
  -p 8080:80 \
  -v /data/models:/models \
  ghcr.io/huggingface/text-generation-inference:3.0.3 \
  --model-id meta-llama/Meta-Llama-3-70B-Instruct \
  --num-shard 4 \
  --max-input-length 2048 \
  --max-total-tokens 4096

推理框架部署对比与架构示意图

六、量化性能对比:INT8/FP8 场景

在生产环境中,量化是降低显存占用和提升吞吐量的关键手段。我们对各框架的 INT8 量化推理性能进行了测试(8B 模型,单卡 A100)。

精度/框架 吞吐量(tokens/s) 显存占用 精度损失 量化方式
FP16 vLLM 9,870 16.2GB 基线 —
INT8 vLLM (AWQ) 12,340 9.8GB 0.8% 权重量化
INT8 SGLang (AWQ) 12,890 9.6GB 0.8% 权重量化
INT8 TensorRT-LLM 15,230 8.9GB 0.5% 权重+激活量化
INT8 TGI (EETQ) 11,580 10.1GB 1.2% 权重量化
FP8 TensorRT-LLM 16,890 8.5GB 0.3% 权重+激活量化

TensorRT-LLM 在量化推理方面优势最为突出。INT8 模式下吞吐量比 FP16 提升 54%,比 vLLM INT8 高出 23%。FP8 模式更是比 FP16 提升了 71%。这得益于 NVIDIA 官方对自家硬件的深度优化——TensorRT-LLM 的 INT8 量化同时覆盖权重和激活值(SmoothQuant),而其他框架主要只做权重量化。

以下是 vLLM 使用 AWQ 量化的部署示例:


1
2
3
4
5
6
# vLLM + AWQ INT8 量化推理
vllm serve TheBloke/Llama-3-8B-Instruct-AWQ \
  --quantization awq \
  --port 8000 \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Python SDK 调用示例(OpenAI 兼容接口)
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="dummy"
)

response = client.chat.completions.create(
    model="TheBloke/Llama-3-8B-Instruct-AWQ",
    messages=[
        {"role": "system", "content": "你是一个专业的AI助手。"},
        {"role": "user", "content": "请解释什么是PagedAttention?"}
    ],
    max_tokens=512,
    temperature=0.7,
    stream=True
)

for chunk in response:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

七、生产选型建议与总结

综合以上测试数据,以下是不同业务场景下的框架选型建议:

1. 追求极致吞吐量(如离线批量推理):TensorRT-LLM
TensorRT-LLM 在所有测试场景下吞吐量均为最高,特别是在量化推理方面优势明显。缺点是需要模型编译步骤,部署流程复杂,适合模型固定、追求 QPS 的生产环境。

2. 平衡性能与易用性(如在线推理服务):vLLM
vLLM 部署简单、社区活跃、文档完善,性能虽不及 TensorRT-LLM 但差距在 15%-25% 以内。对于大多数团队来说,vLLM 是性价比最高的选择。

3. 共享前缀场景(如多轮对话、Few-shot):SGLang
SGLang 的 RadixAttention 在共享前缀场景下有天然优势。如果你的业务大量使用相同的 System Prompt 或 Few-shot 示例,SGLang 可以带来 2-3 倍的额外加速。其结构化输出 DSL 也非常适合需要 JSON 格式输出的 Agent 应用。

4. 快速验证与原型开发:TGI
TGI 与 HuggingFace 生态深度集成,开箱即用。虽然性能不是最优,但对于快速验证模型效果、搭建 Demo 环境来说是最省事的选择。

场景 推荐框架 理由
离线批量推理 TensorRT-LLM 吞吐量最高,量化支持最好
在线API服务 vLLM 性能优秀,部署简单,社区活跃
多轮对话/Agent SGLang RadixAttention前缀复用,结构化输出
快速原型验证 TGI 开箱即用,HF生态集成
低延迟实时场景 TensorRT-LLM TTFT和TPOT均为最低
显存受限场景 SGLang/vLLM 显存管理灵活,支持多种量化

最后需要强调的是,基准测试数据会随着框架版本迭代而变化。vLLM 和 SGLang 的更新频率非常高(通常每两周一次发布),新版本可能带来显著的性能提升。建议在实际选型时,使用最新的框架版本和自己的真实业务数据做一轮验证。

如果你对大模型推理优化的其他方面感兴趣,推荐阅读本站的 SGLang vs vLLM 架构对比、PagedAttention 详解 和 Speculative Decoding 推测解码 等相关文章,深入理解各框架背后的核心技术原理。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » 四大推理框架性能基准测试实战:vLLM、SGLang、TensorRT-LLM 与 TGI 在 Llama 3 上的吞吐量、延迟与显存对比
分享到: 更多 (0)