1. 课程导入
欢迎来到《TensorRT-LLM 模型推理性能基准测试实战》课程。在正式开始动手测试之前,我们需要先回答三个关键问题:为什么要做基准测试?如何科学地做基准测试?需要准备哪些环境?本章作为全课程的基石,将帮助你建立正确的性能评估框架,避免在后续实验中走入“只测数字、不懂含义”的误区。
1.1 学习目标与课程结构
完成本章学习后,你将能够:
- 准确描述 TensorRT-LLM 在推理性能优化中的定位与核心价值;
- 区分延迟(Latency)、吞吐量(Throughput)、首 Token 延迟(TTFT)与Token 生成速率(ITL)等关键指标;
- 独立完成基准测试环境的软硬件准备,包括 NVIDIA 驱动、CUDA、TensorRT-LLM 安装验证;
- 理解基准测试的通用方法论,包括预热、并发控制、统计口径等核心概念。
本课程共 30 章,整体结构分为四大模块:
| 模块 | 章节范围 | 核心内容 |
|---|---|---|
| 基础入门 | 第 1-5 章 | 环境搭建、TensorRT-LLM 架构、引擎构建流程 |
| 性能指标与测试方法 | 第 6-12 章 | 延迟/吞吐/并发指标、官方 benchmark 工具、自定义压测脚本 |
| 高级优化与对比 | 第 13-24 章 | FP8/INT4 量化、KV Cache、动态形状、多卡部署、vLLM 对比 |
| 实战案例与排障 | 第 25-30 章 | 生产环境案例、性能瓶颈定位、参数调优复盘 |
学习建议:每章均配有可复现的实验命令与预期结果区间。建议准备一张 GPU 显卡(NVIDIA Ampere 或更新架构,显存 ≥ 16GB),并按照章节顺序逐步操作,不要跳跃式学习,因为后续章节的对比结论依赖前序章节建立的测试基线。
1.2 基准测试基本概念与核心指标
基准测试(Benchmark)的本质是在受控条件下,用可量化的指标评估系统性能。对于 LLM 推理,我们需要同时关注“快不快”和“多不多”两个维度。下图展示了 TensorRT-LLM 推理性能测试的核心概念关系:
上图中的四个指标构成了 LLM 推理性能评估的核心四维。在实际测试中,它们往往相互制约:盲目提升吞吐量可能导致单请求延迟恶化,而过分追求低延迟又会降低整体吞吐。因此,基准测试的目标不是追求单一指标的最大化,而是找到符合业务场景的最佳平衡点。
1.3 环境准备与验证
在开始任何基准测试之前,必须确保软硬件环境正确。以下是推荐的环境配置清单:
| 组件 | 推荐版本/配置 | 验证命令 |
|---|---|---|
| GPU 驱动 | ≥ 535.104.05 | nvidia-smi |
| CUDA | 12.2 或 12.4 | nvcc --version |
| TensorRT-LLM | ≥ 0.9.0 | python -c "import tensorrt_llm; print(tensorrt_llm.__version__)" |
| Python | 3.10 或 3.11 | python --version |
| 显存 | ≥ 16GB(推荐 24GB+) | nvidia-smi --query-gpu=memory.total --format=csv |
安装 TensorRT-LLM 推荐使用 Docker 镜像,以获得一致的运行环境:
# 拉取官方镜像(以 0.9.0 版本为例)
docker pull nvcr.io/nvidia/tensorrt-llm:0.9.0
# 启动容器并挂载工作目录
docker run --gpus all -it --shm-size=2g \
-v /home/user/benchmark:/workspace/benchmark \
nvcr.io/nvidia/tensorrt-llm:0.9.0
# 容器内验证安装
python -c "import tensorrt_llm; print(f'TensorRT-LLM 版本: {tensorrt_llm.__version__}')"
常见环境坑点:如果
nvidia-smi 显示驱动正常但 TensorRT-LLM 导入失败,通常是因为 CUDA 版本与 PyTorch 不匹配。请务必使用官方 Docker 镜像,避免在宿主机上直接安装导致依赖冲突。另外,容器启动时务必添加 --shm-size=2g,否则多进程数据并行时会因共享内存不足而崩溃。
1.4 基准测试方法论与常见误区
一个科学的基准测试流程应遵循以下步骤:
- 明确测试目标:是测在线延迟还是离线吞吐?是单卡还是多卡?
- 固定模型与精度:例如 Llama-2-7B + FP16,不可中途更换。
- 预热引擎:丢弃前 10-20 个请求的结果,让 CUDA kernel 完成加载与显存分配。
- 控制并发:从 1 到 64 逐步增加并发数,记录每个并发档位的指标。
- 多次重复取均值:至少 3 轮,每轮 100+ 请求,避免偶然波动。
- 记录完整配置:包括 batch size、输入/输出长度、量化方式、GPU 型号。
以下是初学者最容易犯的四个错误,务必引以为戒:
- 误区一:不做预热直接测。首次推理包含 CUDA 上下文初始化、显存分配等开销,会严重拉高延迟数据。正确做法是先发送 10~20 个请求“热身”,再开始正式记录。
- 误区二:混淆 TTFT 与整体延迟。TTFT 只衡量从发送请求到收到第一个 Token 的时间,而整体延迟包含所有 Token 的生成时间。在流式输出场景下,两者差异巨大。
- 误区三:忽略输入/输出长度的影响。LLM 的延迟与序列长度呈近似线性关系。测试时必须固定输入长度(如 512 tokens)和输出长度(如 128 tokens),否则数据无法横向对比。
- 误区四:只测一个并发数。单并发下的延迟不能代表真实生产环境。生产系统通常有数十甚至数百并发请求,必须测试不同并发下的吞吐曲线,才能找到系统的饱和点。