3、环境搭建:GPU服务器配置、CUDA/cuDNN/TensorRT-LLM安装、Docker容器化部署
3.1 环境搭建的核心原则:版本匹配是生命线
TensorRT-LLM 的低延迟性能高度依赖 GPU 硬件特性(如 FP8、Tensor Core)与软件栈的深度协同。环境搭建的核心并非“装最新”,而是“装匹配”。一个典型的失败案例是:开发者安装了 CUDA 12.4,但 TensorRT-LLM 的预编译 Wheel 包基于 CUDA 12.2 构建,导致运行时出现 libcudart.so.12.2 缺失错误。因此,动手前必须锁定三组版本关系:GPU 驱动版本 → CUDA 运行时版本 → TensorRT-LLM 版本。驱动版本需向下兼容 CUDA 运行时,而 TensorRT-LLM 的官方 Release 页面会明确标注其依赖的 CUDA、cuDNN 和 TensorRT 版本。
- GPU:NVIDIA A100/A800(80GB)或 H100/H800,显存建议 ≥ 40GB(用于 7B~13B 模型 FP16 推理)
- 驱动:≥ 535.104.05(支持 CUDA 12.2)
- CUDA:12.2(不要使用 12.3+,除非自行源码编译)
- cuDNN:8.9.5(对应 CUDA 12.x)
- TensorRT:9.2.0(TensorRT-LLM 内置依赖,无需单独安装)
- 操作系统:Ubuntu 22.04 LTS(内核 ≥ 5.15)
3.2 方法流程:从裸机到容器化部署
环境搭建遵循“宿主机最小化 + 容器内完整化”的策略。宿主机仅需安装 GPU 驱动和容器运行时(如 Docker + NVIDIA Container Toolkit),而 CUDA、cuDNN、TensorRT-LLM 全部封装进镜像,保证可移植性与可复现性。具体步骤如下:
- 宿主机驱动安装:通过
nvidia-smi确认驱动可用。若未安装,使用sudo apt install nvidia-driver-535或从 NVIDIA 官网下载 runfile 安装,安装后重启并验证。 - 安装 Docker Engine:配置官方 apt 源后安装
docker-ce docker-ce-cli containerd.io,并将当前用户加入docker组。 - 安装 NVIDIA Container Toolkit:该工具让容器能访问 GPU 设备。安装后需重启 Docker 服务。
- 拉取 TensorRT-LLM 官方镜像:NVIDIA 提供预构建镜像,包含完整依赖链,推荐直接使用。
- 启动容器并挂载模型目录:使用
--gpus all参数启用 GPU 访问,通过-v挂载预训练模型权重与输出目录。
# 宿主机验证驱动
nvidia-smi
# 输出应显示 GPU 型号与驱动版本,如 Driver Version: 535.104.05
# 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
# 拉取并启动 TensorRT-LLM 容器
docker run --gpus all -it --shm-size=16g \
-v /data/models:/models \
-v /data/engines:/engines \
-p 8000:8000 \
nvcr.io/nvidia/tensorrt-llm:24.05-py3
--shm-size=16g:TensorRT-LLM 的 KV Cache 与多进程通信依赖共享内存,默认 64MB 会导致 OOM。-p 8000:8000:暴露推理服务端口,供客户端调用。--gpus all:将全部 GPU 传入容器;若需指定,使用--gpus '"device=0,1"'。
3.3 案例:基于 Docker 的 TensorRT-LLM 快速验证
以下演示一个完整的“容器内验证”流程,确保环境可用。假设已拉取镜像并进入容器,执行以下命令验证 TensorRT-LLM 是否正常工作:
# 进入容器后检查 CUDA 运行时
python3 -c "import torch; print('CUDA available:', torch.cuda.is_available())"
# 期望输出: CUDA available: True
# 检查 TensorRT-LLM 版本
python3 -c "import tensorrt_llm; print('TensorRT-LLM version:', tensorrt_llm.__version__)"
# 运行官方示例(GPT-2 125M 模型)
cd /app/tensorrt_llm/examples/gpt
python3 build.py --model_dir=gpt2 --output_dir=/engines/gpt2 \
--dtype=float16 --use_gpt_attention_plugin=float16
# 推理测试
python3 run.py --engine_dir=/engines/gpt2 --max_output_len=50 \
--input_text="The future of AI is"
若上述命令成功输出生成的文本,说明环境搭建完成。实际生产环境中,建议将模型构建(Engine Build)与推理服务分离:构建阶段使用 GPU 资源密集的容器,推理阶段使用轻量化运行时容器,两者共享同一引擎文件目录。
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| GPU 穿透 | nvidia-smi |
显示 GPU 型号与显存 |
| CUDA 可用 | python3 -c "import torch; print(torch.cuda.is_available())" |
True |
| TensorRT-LLM 导入 | python3 -c "import tensorrt_llm" |
无报错 |
| 引擎构建 | python3 build.py ... |
生成 .engine 文件 |
| 推理输出 | python3 run.py ... |
返回连贯文本 |
3.4 误区与复盘:常见环境问题排查
环境搭建阶段最容易踩坑,以下总结高频问题与解决路径:
现象:安装 CUDA 12.4 后,TensorRT-LLM 报
undefined symbol: cublasLtMatmulDescSetAttribute。原因:预编译 Wheel 链接的是 CUDA 12.2 的 cuBLAS 库,版本不匹配导致符号缺失。
解决:严格使用官方要求的 CUDA 12.2,或从源码编译 TensorRT-LLM 以适配更高版本。
现象:容器启动时提示
could not select device driver "" with capabilities: [[gpu]]。原因:宿主机未安装 NVIDIA Container Toolkit,或容器内误装驱动导致冲突。
解决:宿主机执行
sudo nvidia-ctk runtime configure 后重启 Docker;容器内绝不安装驱动。
现象:推理时出现
RuntimeError: CUDA out of memory,但 nvidia-smi 显示显存充足。原因:KV Cache 分配在共享内存中,默认
/dev/shm 仅 64MB。解决:启动容器时添加
--shm-size=16g 或更大值。
复盘建议:在项目初期,建议编写一个 check_env.sh 脚本,自动检测驱动版本、CUDA 版本、容器 GPU 穿透状态,并输出诊断报告。将脚本纳入 CI/CD 流程,确保每次环境重建后的一致性。同时,将 Dockerfile 与依赖清单(requirements.txt)纳入版本控制,避免“在我机器上能跑”的尴尬。