4. 环境搭建

TensorRT-LLM 的部署链路对底层软件栈的版本匹配极其敏感。很多“模型跑不起来”或“推理结果错误”的问题,根源并非代码逻辑,而是 CUDA、cuDNN、TensorRT 与 TensorRT-LLM 之间的版本错位。本节将梳理一条经过验证的安装路径,并给出每一步的验证方法,帮助你建立一个可复现、可诊断的基础环境。

4.1 核心原理:版本矩阵与依赖关系

在动手安装之前,必须先理解这四层软件的关系。CUDA 是底层驱动与并行计算平台,cuDNN 基于 CUDA 提供深度神经网络加速原语,TensorRT 在 cuDNN 之上做模型推理优化,而 TensorRT-LLM 则是一个依赖 TensorRT 的 Python/C++ 库,专门针对大语言模型的解码特性(如 KV Cache、Paged Attention、In-flight Batching)进行定制。

这种层层依赖的关系决定了:TensorRT-LLM 的版本决定了它支持哪个 TensorRT 版本,而 TensorRT 又决定了它需要哪个 CUDA 版本。因此,安装顺序必须自底向上,且不能随意混搭。NVIDIA 官方为 TensorRT-LLM 提供了 Docker 镜像,但生产环境中往往需要裸机安装,此时版本矩阵就是你的“地图”。

版本查询建议:不要凭记忆选择版本。打开 TensorRT-LLM 官方 GitHub 仓库的 docs/installation.md,查看其 release/0.x 分支中列出的“Tested Environment”表格,以该表为准。
TensorRT-LLM 软件栈依赖关系与版本匹配 CUDA 12.x 底层驱动与并行计算平台 cuDNN 8.9.x 深度神经网络加速原语 TensorRT 10.x 推理优化引擎与运行时 TensorRT-LLM 0.10+ LLM 专用推理库(依赖 TensorRT) 版本匹配检查点 驱动 ≥ 525.60.13 CUDA 12.1 兼容 TensorRT 10.0.1 LLM 0.10.0.dev ⚠ 常见错误 TensorRT 9.x + LLM 0.10 → 报错 "TRT version mismatch" CUDA 11.8 + TensorRT 10 → 报错 "Unsupported CUDA"

4.2 方法流程:从驱动到 TensorRT-LLM 的安装步骤

以下安装流程以 Ubuntu 22.04 + CUDA 12.1 + cuDNN 8.9 + TensorRT 10.0 + TensorRT-LLM 0.10 为例。请根据你实际下载的版本号替换对应命令。

步骤 1:安装 NVIDIA 驱动与 CUDA

首先确认 GPU 型号与当前驱动状态:

nvidia-smi
# 若显示 "No devices were found",则需先安装驱动
# 推荐使用 runfile 方式安装 CUDA 12.1(内含匹配驱动)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run --toolkit --silent --override

安装完成后,配置环境变量:

echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
nvcc --version   # 验证 CUDA 工具链

步骤 2:安装 cuDNN

cuDNN 需要从 NVIDIA 官网下载(需登录账号)。下载 cuDNN v8.9.5 for CUDA 12.x 的 Local Installer for Ubuntu22.04 x86_64(Debian 包):

sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.5.29_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.5.29/cudnn-local-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install libcudnn8 libcudnn8-dev libcudnn8-samples

验证 cuDNN 是否安装成功:

cp -r /usr/src/cudnn_samples_v8/ $HOME/
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN   # 输出 "Test passed!" 即成功

步骤 3:安装 TensorRT

从 NVIDIA 官网下载 TensorRT 10.0 GA 的 TensorRT-10.0.1.6.Ubuntu-22.04.x86_64-gnu.cuda-12.1.tar.gz:

tar -xzvf TensorRT-10.0.1.6.Ubuntu-22.04.x86_64-gnu.cuda-12.1.tar.gz
sudo mv TensorRT-10.0.1.6 /opt/tensorrt
echo 'export LD_LIBRARY_PATH=/opt/tensorrt/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export PATH=/opt/tensorrt/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 安装 Python 接口
pip install /opt/tensorrt/python/tensorrt-10.0.1-cp310-none-linux_x86_64.whl

# 验证
python3 -c "import tensorrt as trt; print(trt.__version__)"  # 应输出 10.0.1.6

步骤 4:安装 TensorRT-LLM

TensorRT-LLM 推荐使用源码编译或预编译 wheel。以下为源码编译方式:

git clone https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM
git checkout v0.10.0
git submodule update --init --recursive
pip install -r requirements.txt

# 编译安装
python3 scripts/build_wheel.py -a 90   # 90 对应 A100/H100,80 对应 A30/A40
pip install ./build/tensorrt_llm-0.10.0-py3-none-any.whl
关键警告:编译前务必确认 nvidia-smi 显示的 CUDA 版本与 nvcc --version 一致。若驱动版本高于 CUDA 工具包版本(例如驱动支持 12.2 但 nvcc 是 12.1),通常没问题;但反过来(驱动旧、工具包新)会导致运行时崩溃。

4.3 案例:一次完整的安装验证流程

以下是一个真实场景的验证脚本,用于确认整个软件栈可以协同工作。将以下内容保存为 verify_stack.py:

import ctypes
import tensorrt as trt
import torch

# 1. 检查 CUDA 可用性
assert torch.cuda.is_available(), "CUDA 不可用"
print(f"CUDA 版本: {torch.version.cuda}")
print(f"GPU 名称: {torch.cuda.get_device_name(0)}")

# 2. 检查 cuDNN 版本
cudnn = ctypes.CDLL("libcudnn.so.8")
cudnn.cudnnGetVersion.restype = ctypes.c_size_t
print(f"cuDNN 版本: {cudnn.cudnnGetVersion()}")

# 3. 检查 TensorRT 版本
print(f"TensorRT 版本: {trt.__version__}")

# 4. 简单推理测试
logger = trt.Logger(trt.Logger.WARNING)
builder = trt.Builder(logger)
network = builder.create_network()
print("TensorRT 引擎创建成功,软件栈验证通过!")

运行该脚本,预期输出如下:

CUDA 版本: 12.1
GPU 名称: NVIDIA A100-SXM4-40GB
cuDNN 版本: 8905
TensorRT 版本: 10.0.1.6
TensorRT 引擎创建成功,软件栈验证通过!

若在最后一步出现 ImportError: libcudnn.so.8: cannot open shared object file,说明 cuDNN 的库路径未正确加入 LD_LIBRARY_PATH。此时执行:

sudo ldconfig /usr/local/cuda-12.1/lib64
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

4.4 常见误区与复盘

误区 典型现象 正确做法
盲目安装最新 CUDA TensorRT-LLM 编译报错 unsupported CUDA version 以 TensorRT-LLM 官方测试过的 CUDA 版本为准,通常滞后最新版 1~2 个版本
混用 pip 与 apt 的 TensorRT Python 中 import 到旧版本 TensorRT 统一使用 pip 安装 TensorRT Python 包,并确保 LD_LIBRARY_PATH 指向同一版本
忽略 cuDNN 许可文件 cuDNN 安装后运行样例报 missing libcudnn.so.8 安装后执行 sudo ldconfig,并检查 /usr/local/cuda/lib64 下是否有软链接
驱动与 CUDA 工具包版本不匹配 运行 PyTorch 时提示 CUDA driver version is insufficient 使用 nvidia-smi 查看驱动支持的 CUDA 版本,确保 ≥ 工具包版本

复盘一个典型的失败案例:某同学在 Ubuntu 20.04 上安装了 CUDA 11.8,然后尝试编译 TensorRT-LLM 0.10(该版本要求 CUDA 12.x)。编译过程在 cmake 阶段报错,提示找不到 cuda_runtime.h 的特定版本宏。排查后发现,TensorRT-LLM 的 CMakeLists 中硬编码了 CUDA 12 的架构特性。最终解决方案是彻底卸载 CUDA 11.8,重装 12.1 后编译一次通过。

另一个高频问题是 Python 环境混乱。TensorRT-LLM 依赖 PyTorch 2.1+,且要求 CUDA 版本的 PyTorch 与系统 CUDA 一致。建议使用 conda create -n trt_llm python=3.10 创建独立环境,然后按顺序安装 PyTorch(pip install torch==2.1.0 --index-url https://download.pytorch.org/whl/cu121)、TensorRT 和 TensorRT-LLM,避免系统级 Python 环境的相互污染。

环境验证清单(每次搭建新机器时逐项确认):
  • nvidia-smi 能正常显示 GPU 且驱动版本 ≥ 530
  • nvcc --version 输出 CUDA 12.1
  • python3 -c "import torch; print(torch.cuda.is_available())" 输出 True
  • python3 -c "import tensorrt; print(tensorrt.__version__)" 输出 10.x
  • python3 -c "import tensorrt_llm; print(tensorrt_llm.__version__)" 不报错