环境搭建:Docker镜像拉取、TensorRT-LLM源码编译、验证安装

说实话,环境搭建这一步,往往是整个课程里最磨人的环节。我见过太多同学在群里问「编译报错了怎么办」「镜像拉不下来啊」。别急,今天我就把踩过的坑、绕过的路,一次性给你讲清楚。

咱们的目标很明确:把 TensorRT-LLM 跑起来,能调通,能推理。嗯,就这么简单。

1. 为什么我推荐用 Docker?

你想想看,TensorRT-LLM 依赖的东西太多了:CUDA、cuDNN、TensorRT、PyTorch……版本稍微不对付,编译就崩给你看。我刚开始搞的时候,直接在裸机上配环境,折腾了两天,最后发现是 CUDA 版本和驱动不匹配。从那以后,我就学乖了——能用 Docker 绝不用裸机。

Docker 镜像的好处是:

  • 环境隔离:一个镜像就是一个完整的环境,不会污染宿主机
  • 版本锁定:官方镜像里的 CUDA、cuDNN 版本都是验证过的
  • 可复现:你拉的这个镜像,跟我在生产环境用的完全一样
我的习惯:每个项目单独一个 Docker 容器,用完就删,清爽得很。

2. 拉取官方 Docker 镜像

TensorRT-LLM 官方提供了预编译的 Docker 镜像,省去了很多麻烦。我个人建议直接用 nvcr.io/nvidia/tensorrt-llm 这个仓库。

先看看你机器上的 CUDA 驱动版本:

nvidia-smi | grep "CUDA Version"

然后根据驱动版本选择对应的镜像。举个例子,如果你的驱动支持 CUDA 12.x,那就拉这个:

docker pull nvcr.io/nvidia/tensorrt-llm:latest

如果你在国内,拉取可能会慢。我一般用 --platform linux/amd64 指定架构,然后配个镜像加速器。嗯,这里要注意:镜像标签一定要跟你的 CUDA 驱动匹配,否则容器里跑不了。

我曾经踩过的坑:拉了个 CUDA 12.1 的镜像,结果宿主机驱动只支持 11.8,容器启动后 nvidia-smi 直接报错。白花了半小时下载。

3. 从源码编译 TensorRT-LLM

有时候官方镜像不满足需求,比如你想加个自定义算子,或者想用最新的开发分支。这时候就得自己编译了。

编译前,先准备好依赖:

  1. CUDA Toolkit:建议 12.x 版本,11.x 也能用但有些新特性不支持
  2. cuDNN:跟 CUDA 版本匹配,我一般用 8.9.x
  3. TensorRT:8.6 或更高版本,注意是 libnvinfer 那个包
  4. PyTorch:2.0 以上,带 CUDA 支持的

然后克隆源码:

git clone https://github.com/NVIDIA/TensorRT-LLM.git
cd TensorRT-LLM
git submodule update --init --recursive

这里有个细节:submodule 一定要更新,否则编译会缺头文件。我刚开始就漏了这一步,结果报了一堆 fatal error: NvInfer.h: No such file or directory

接下来是编译命令:

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release \
         -DBUILD_PYT=ON \
         -DBUILD_TRTLLM_PLUGINS=ON
make -j$(nproc)

-j$(nproc) 是用所有 CPU 核心并行编译,能快不少。不过如果你的机器内存不大(比如 32GB 以下),建议改成 -j4,否则编译到一半可能 OOM。

编译时间参考:我用的 64 核服务器,大概 15 分钟。普通笔记本的话,半小时到一小时吧。去喝杯咖啡,别盯着看。

4. 验证安装是否成功

编译完或者拉完镜像,怎么知道能不能用?我一般做三步验证:

4.1 检查 Python 包

python -c "import tensorrt_llm; print(tensorrt_llm.__version__)"

如果没报错,说明核心库装好了。如果报 ModuleNotFoundError,检查一下 PYTHONPATH 有没有包含编译好的 build/tensorrt_llm 目录。

4.2 跑一个简单的推理

我习惯用官方自带的示例来验证。比如跑一个 GPT 模型的推理:

cd examples/gpt
python run.py --model_dir /path/to/model --engine_dir /path/to/engine

能看到输出 token 就说明通了。如果报 CUDA 错误,八成是驱动版本问题。

4.3 检查 GPU 利用率

推理的时候,开另一个终端跑 nvidia-smi,看看 GPU 利用率是不是上去了。如果一直是 0%,说明推理没走 GPU,可能是 TensorRT 引擎没加载成功。

一个小技巧:用 watch -n 1 nvidia-smi 实时监控 GPU 状态,比手动敲命令方便多了。

5. 常见问题与避坑指南

问题 原因 解决方法
编译报错 cuda_runtime.h: No such file CUDA 路径没设置 export CUDA_HOME=/usr/local/cuda-12.x
镜像拉取超时 网络问题 换国内镜像源,或者用代理
推理时显存不足 模型太大或 batch size 太大 减小 batch size,或者用量化
Python import 报错 PYTHONPATH 没设置 export PYTHONPATH=/path/to/build:$PYTHONPATH

我曾经遇到过一个特别坑的问题:编译成功了,但推理结果全是乱码。查了半天,发现是 TensorRT 版本跟源码不匹配。所以,一定要用官方推荐的版本组合,别自己瞎搭配。

6. 本章知识体系

下面这张图,是我自己总结的环境搭建流程,你照着走基本不会出错:

TensorRT-LLM 环境搭建流程 选择搭建方式 Docker 镜像拉取 源码编译 docker pull 镜像 cmake && make 验证安装

说白了,环境搭建就两条路:要么用 Docker 省心,要么自己编译折腾。我个人建议初学者先用 Docker,等熟悉了再尝试编译。毕竟,我们的目标是学量化推理,不是学编译。

好了,环境搭好了,下一章咱们就开始玩真的——用 TensorRT-LLM 跑一个模型推理。嗯,到时候你会觉得,今天这点折腾都是值得的。


专注资料整理