3. 环境搭建

在开始任何基准测试之前,必须先构建一个稳定、可复现的软件环境。TensorRT-LLM 是一个高度依赖 GPU 底层库的推理框架,其性能表现与 CUDA、cuDNN 的版本组合密切相关。本章节将带你完成从驱动检查到最终验证安装的完整流程,并重点说明版本匹配的“硬约束”。

3.1 核心原理:版本矩阵与依赖链

TensorRT-LLM 并非一个独立运行的软件,它通过 CUDA 驱动 GPU 计算,通过 cuDNN 优化卷积和循环层,并依赖 TensorRT 的推理引擎。这三者与 GPU 驱动之间存在严格的“向下兼容”关系:驱动版本 ≥ CUDA 运行时版本 ≥ TensorRT/cuDNN 版本。若驱动过旧,即使安装了最新的 CUDA 工具包,程序也会在运行时报告 CUDA driver version is insufficient 错误。

下图展示了 TensorRT-LLM 推理时完整的软件栈依赖关系,以及各层之间的调用接口:

用户基准测试脚本 Python / C++ API 调用 TensorRT-LLM 模型定义 · 量化 · 引擎构建 · 运行时 TensorRT 推理引擎 引擎序列化 · 层融合 · 内核自动调优 cuDNN 卷积 · 循环 · 注意力优化 CUDA 运行时 内存管理 · 内核启动 · 流同步 NVIDIA GPU 驱动 + CUDA Driver API 硬件抽象层 · 显存管理 · 内核调度 版本约束 驱动 ≥ CUDA CUDA ≥ cuDNN

从上图可以看出,版本验证必须自底向上逐层进行。任何一层的缺失或版本不匹配,都会导致上层组件无法正常工作。因此,安装顺序应为:GPU 驱动 → CUDA 工具包 → cuDNN → TensorRT-LLM。

3.2 方法流程:分步安装与验证

以下安装流程基于 Ubuntu 22.04 + NVIDIA A100/H100 系列 GPU,使用 pip 方式安装 TensorRT-LLM。若使用 Docker 镜像,可跳过步骤 2-4,但建议仍执行步骤 5 的验证。

步骤 1:检查 GPU 驱动与硬件

# 查看 GPU 型号与驱动版本
nvidia-smi
# 期望输出:Driver Version ≥ 535.xxx,CUDA Version ≥ 12.2

若驱动版本过低,需先升级驱动。注意:驱动升级后必须重启系统才能生效。

步骤 2:安装 CUDA 工具包

TensorRT-LLM 0.9+ 要求 CUDA 12.x。推荐使用 runfile 方式安装,便于管理多个版本:

wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
sudo sh cuda_12.4.1_550.54.15_linux.run --toolkit --silent --override
# 添加环境变量
echo 'export PATH=/usr/local/cuda-12.4/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

步骤 3:安装 cuDNN

从 NVIDIA 官网下载与 CUDA 12.4 匹配的 cuDNN v8.9.x,然后解压并复制到 CUDA 目录:

tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.4/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.4/lib64/
sudo chmod a+r /usr/local/cuda-12.4/include/cudnn*.h

步骤 4:安装 TensorRT-LLM

# 创建虚拟环境(推荐)
python3 -m venv trtllm-env
source trtllm-env/bin/activate

# 安装 TensorRT-LLM(以 0.9.0 版本为例)
pip install tensorrt_llm==0.9.0 --extra-index-url https://pypi.nvidia.com
提示:若需使用 FP8 或 INT4 量化特性,建议同时安装 nvidia-ammo(原 TensorRT-Model-Optimizer):pip install nvidia-ammo。

步骤 5:验证安装

执行以下 Python 脚本,逐层验证各组件是否可用:

import tensorrt as trt
import cudnn
import torch
import tensorrt_llm

print("TensorRT 版本:", trt.__version__)
print("cuDNN 版本:", cudnn.__version__)
print("PyTorch 版本:", torch.__version__)
print("TensorRT-LLM 版本:", tensorrt_llm.__version__)

# 验证 GPU 可用性
assert torch.cuda.is_available(), "CUDA 不可用"
print("GPU:", torch.cuda.get_device_name(0))
print("显存: {:.2f} GB".format(torch.cuda.get_device_properties(0).total_memory / 1e9))

若输出各版本号且无报错,说明环境搭建成功。典型输出如下:

TensorRT 版本: 9.2.0
cuDNN 版本: 8.9.7
PyTorch 版本: 2.3.0
TensorRT-LLM 版本: 0.9.0
GPU: NVIDIA A100-SXM4-40GB
显存: 40.00 GB

3.3 案例:多版本 CUDA 共存与切换

实际工作中,你可能同时维护多个项目,分别依赖 CUDA 11.8 和 CUDA 12.4。此时不建议反复卸载重装,而是利用环境变量实现灵活切换:

# 在 ~/.bashrc 中定义别名
alias cuda11='export PATH=/usr/local/cuda-11.8/bin:$PATH; export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH'
alias cuda12='export PATH=/usr/local/cuda-12.4/bin:$PATH; export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH'

# 使用
cuda12 && python -c "import torch; print(torch.version.cuda)"  # 输出 12.4
cuda11 && python -c "import torch; print(torch.version.cuda)"  # 输出 11.8

注意:切换 CUDA 版本后,必须重新编译任何包含 CUDA 扩展的 Python 包(如 PyTorch 的 CUDA 版本),否则会出现 libcudart.so 加载冲突。

3.4 常见误区与复盘

误区 现象 正确做法
只装 PyTorch 自带 CUDA,忽略系统 CUDA TensorRT-LLM 导入报错 libcudart.so.12: cannot open shared object file 确保系统 CUDA 已安装,且 LD_LIBRARY_PATH 指向正确路径
驱动版本过旧 运行时报 CUDA driver version is insufficient 升级驱动至 ≥ 535,并重启系统
cuDNN 头文件与库文件不匹配 编译时找不到 cudnn_ops_infer.h 使用 sudo cp -P 保留符号链接,并检查 ls -l /usr/local/cuda/lib64/libcudnn*
pip 安装时未指定 NVIDIA 源 安装到旧版本或报 404 必须添加 --extra-index-url https://pypi.nvidia.com
重要提醒:不要使用 pip install tensorrt-llm 而不带任何索引参数,这会导致从 PyPI 官方源拉取到错误的占位包。TensorRT-LLM 仅发布在 NVIDIA 的私有 PyPI 仓库中。

3.5 环境验证清单

完成安装后,建议按以下清单逐项确认,避免在后续基准测试中因环境问题浪费排查时间:

  • nvidia-smi 显示驱动版本 ≥ 535,且 GPU 状态为 P0
  • nvcc --version 输出 CUDA 12.4
  • python -c "import cudnn; print(cudnn.__version__)" 无报错
  • python -c "import tensorrt_llm" 无报错
  • 运行一个最小模型(如 125M)完成一次推理,确认无显存错误
  • 记录当前环境版本快照,便于后续复现基准结果