环境准备与依赖安装:版本匹配、Docker 选择、Python 环境坑
说实话,TensorRT-LLM 部署翻车,十次里有八次是环境问题。我见过太多人花了一周调模型,最后卡在 CUDA 版本不对上。嗯,这一章咱们就把这些坑一个个填平。
核心原则:版本匹配是铁律,Docker 是捷径,Python 环境要隔离。
CUDA、cuDNN、TensorRT 版本匹配原则
这三者的关系,说白了就是「锁死的」。不是说你装个最新的 CUDA 12.x 就万事大吉。TensorRT-LLM 对 CUDA 版本有明确要求,我踩过这个坑——
我曾经在项目里图省事,直接上了 CUDA 12.2,结果 TensorRT 8.6 根本不认,编译报错一整天。后来查文档才发现,TensorRT-LLM 0.5.0 只支持 CUDA 11.8 和 12.1。你说气不气?
所以我的习惯是:先定 TensorRT-LLM 版本,再反推 CUDA 和 cuDNN 版本。别倒着来。
| TensorRT-LLM 版本 | 推荐 CUDA 版本 | 推荐 cuDNN 版本 | 推荐 TensorRT 版本 |
|---|---|---|---|
| v0.5.0 | 11.8 / 12.1 | 8.9.x | 8.6.x |
| v0.6.0 | 12.1 | 8.9.x | 8.6.x |
| v0.7.0 | 12.1 | 8.9.x | 8.6.x |
| v0.8.0 | 12.1 / 12.2 | 8.9.x | 8.6.x / 9.0.x |
注意:cuDNN 版本别乱升。TensorRT-LLM 对 cuDNN 的依赖很敏感,我曾经试过 cuDNN 9.0 搭配 TensorRT 8.6,推理结果直接飘了。老老实实按官方表格来。
Docker 镜像选择:省心还是省事?
我个人强烈建议用 Docker。为什么?因为环境隔离做得最干净。你想想看,生产环境上你敢随便装库吗?万一和别的服务冲突了,谁背锅?
Docker 镜像的选择,我一般看三个点:
- 官方镜像优先:NVIDIA 官方提供的
nvcr.io/nvidia/tensorrt-llm系列,版本号清晰,依赖预装好。我项目里一直用这个,没出过幺蛾子。 - 版本号要对齐:比如你要用 TensorRT-LLM v0.7.0,就拉
nvcr.io/nvidia/tensorrt-llm:0.7.0。别拉 latest,latest 是坑,你不知道它对应哪个版本。 - 注意镜像大小:官方镜像通常 5-8GB,包含 CUDA、cuDNN、TensorRT 全套。如果你磁盘紧张,可以自己基于
nvidia/cuda:12.1-devel构建,但工作量不小。
小技巧:拉镜像时加 --platform linux/amd64,避免在 ARM 架构的机器上拉错版本。我吃过这个亏,在 Mac M1 上拉镜像,跑起来全是 x86 模拟,慢得离谱。
Python 环境与 pip 包安装的常见坑
Python 环境这块,我见过最离谱的事——有人在系统 Python 里直接 pip install tensorrt-llm,结果把系统自带的包管理器搞崩了。嗯,千万别这么干。
我的做法是:
- 用 conda 创建独立环境:
conda create -n trtllm python=3.10,然后conda activate trtllm。Python 版本建议 3.10,3.11 有些依赖还没适配好。 - pip 安装顺序有讲究:先装 PyTorch(CUDA 版本要对),再装 TensorRT-LLM。顺序反了,依赖解析会出问题。
- 注意 pip 源:国内用户记得换清华源或阿里源,不然下载速度能急死人。我一般用
-i https://pypi.tuna.tsinghua.edu.cn/simple。
常见报错及解决:
No module named 'tensorrt_llm':大概率是没装对版本,或者 Python 环境没激活。检查pip list | grep tensorrt。CUDA error: no kernel image is available:CUDA 版本和 PyTorch 不匹配。比如 PyTorch 2.0 需要 CUDA 11.8,你装了个 CUDA 12.1 的 PyTorch,就会报这个。libcudnn.so.8: cannot open shared object file:cuDNN 没装或者路径没配。Docker 用户一般不会遇到,裸机用户记得export LD_LIBRARY_PATH。
我曾经在客户现场,裸机部署 TensorRT-LLM,结果 cuDNN 路径配错了,推理时直接 core dump。查了三个小时,最后发现是 /usr/lib/x86_64-linux-gnu 下有个旧版本的 cuDNN 在捣乱。从那以后,我再也不在裸机上搞了,一律 Docker。
知识体系总览
下面这张图,是我自己总结的环境准备核心逻辑。你照着这个流程走,基本不会翻车。
这张图里,最关键的就是第一步和第二步。版本定错了,后面全白搭。我个人习惯是先查 TensorRT-LLM 的 GitHub Release Notes,里面会明确写支持哪些 CUDA 版本。别偷懒,这一步省不了。
最后说一句:环境准备这件事,看着琐碎,但真能决定项目成败。我见过太多人在这上面栽跟头。你按我上面说的来,至少能避开 80% 的坑。剩下的 20%,嗯,咱们后面章节慢慢聊。