2、环境准备:Docker 镜像拉取、CUDA/cuDNN/TensorRT 版本匹配、验证安装
说实话,环境配置往往是整个项目里最磨人的环节。我见过不少同学,代码写得挺溜,结果卡在环境上折腾一整天。今天咱们就把这事一次性理清楚。
2.1 为什么我推荐用 Docker?
你想想看,TensorRT-LLM 对底层依赖的要求非常苛刻。CUDA 版本、cuDNN 版本、TensorRT 版本,这三者必须严丝合缝。稍有偏差,编译时就会报一些莫名其妙的错误。
我个人习惯用 Docker 来管理这些环境。原因很简单:
- 隔离性:不会污染你本机的开发环境
- 可复现:团队里每个人拉同一个镜像,结果一致
- 省心:NVIDIA 官方已经帮你配好了所有依赖
我的经验:我在项目中遇到过好几次,因为本机 CUDA 版本和项目要求不一致,导致编译失败。后来统一用 Docker,这类问题再也没出现过。
2.2 拉取正确的 Docker 镜像
TensorRT-LLM 的官方镜像托管在 NVIDIA 的容器仓库里。拉取命令很简单:
docker pull nvcr.io/nvidia/tensorrt-llm:latest
但这里有个坑——latest 标签不一定是最稳定的。我建议你根据项目文档,指定具体的版本号。比如:
docker pull nvcr.io/nvidia/tensorrt-llm:24.12
为什么要指定版本?因为不同版本的 TensorRT-LLM 对 CUDA 和 cuDNN 的要求不同。后面我会详细说版本匹配的事。
2.3 CUDA / cuDNN / TensorRT 版本匹配
这是整个环境准备的核心。说白了,这三者的关系就像齿轮,必须咬合在一起。
我整理了一个常用的版本对应表,你可以直接参考:
| TensorRT-LLM 版本 | CUDA 版本 | cuDNN 版本 | TensorRT 版本 |
|---|---|---|---|
| v0.10.0 | 12.1 | 8.9 | 9.2 |
| v0.11.0 | 12.2 | 8.9 | 9.3 |
| v0.12.0 | 12.3 | 9.0 | 10.0 |
注意:千万不要自己手动安装 CUDA 和 cuDNN。Docker 镜像里已经配好了,你只需要拉取正确的镜像即可。我曾经手痒自己装了一次,结果版本冲突,折腾了整整一个下午。
2.4 验证安装是否成功
镜像拉取完成后,我们需要验证一下环境是否真的可用。启动容器:
docker run --gpus all -it --rm nvcr.io/nvidia/tensorrt-llm:24.12 bash
进入容器后,依次检查三个关键组件:
检查 CUDA
nvcc --version
你会看到类似这样的输出:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Wed_Nov_20_10:16:31_PST_2024
Cuda compilation tools, release 12.3, V12.3.107
检查 cuDNN
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
输出应该包含 cuDNN 的主版本号和次版本号。
检查 TensorRT
python3 -c "import tensorrt; print(tensorrt.__version__)"
正常情况下会打印出 TensorRT 的版本号,比如 10.0.0。
验证通过的标准:三个组件的版本号与上表中的对应关系一致,且没有报错信息。
2.5 知识体系总览
为了让你更直观地理解整个环境准备流程,我画了一张图:
2.6 常见问题与避坑指南
嗯,这里我要多说几句。环境配置中有些坑,我踩过不止一次。
- GPU 驱动版本过低:Docker 容器虽然隔离了 CUDA 库,但底层的 GPU 驱动还是宿主机的。如果驱动版本太低,容器里的 CUDA 可能无法正常工作。运行
nvidia-smi检查驱动版本,确保它支持你需要的 CUDA 版本。 - 镜像拉取速度慢:如果你在国内,拉取 nvcr.io 的镜像可能会很慢。可以配置 Docker 镜像加速器,或者使用代理。
- 容器内无法使用 GPU:启动容器时一定要加
--gpus all参数。我刚开始用 Docker 时就忘了加,结果在容器里跑模型,CPU 跑得冒烟,GPU 却在摸鱼。
一个小技巧:如果你不确定当前环境是否匹配,可以直接在容器里运行 TensorRT-LLM 自带的示例脚本。比如
examples/gpt/run.py,如果能跑通,说明环境没问题。
好了,环境准备就到这里。记住一句话:版本匹配是王道,Docker 镜像最省心。接下来你就可以放心地进入模型编译环节了。