2、开发环境搭建:CUDA Toolkit、cuDNN、TensorRT的安装与配置,Docker镜像的使用,验证安装是否成功。

说实话,环境搭建这事儿,看着简单,坑是真不少。

我见过太多同学,算法模型写得飞起,一到部署就卡在环境上。CUDA版本不对、cuDNN没配上、TensorRT报错……一折腾就是半天。所以这一章,咱们把这事儿彻底捋清楚。

核心思路:先装驱动 → 再装CUDA Toolkit → 然后cuDNN → 最后TensorRT。顺序别搞反了,不然有你受的。

2.1 整体架构:一张图看懂

量化推理环境依赖栈 你的量化模型 / 推理应用 TensorRT (推理优化引擎) cuDNN (深度学习加速库) CUDA Toolkit (并行计算平台) NVIDIA GPU 驱动

这张图我每次培训都会放。你想想看,驱动在最底下,上面一层层叠起来。哪一层出问题,上面全废。

2.2 CUDA Toolkit 安装

CUDA Toolkit 是整个生态的基石。没有它,后面什么都跑不起来。

2.2.1 确认你的GPU

先看看你手里是什么卡。打开终端,跑一句:

nvidia-smi

你会看到类似这样的输出:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.05    Driver Version: 525.85.05    CUDA Version: 12.0     |
+-----------------------------------------------------------------------------+

注意看 CUDA Version 那一行。这表示你当前驱动支持的最高CUDA版本。我建议你装比这个低一个版本的CUDA Toolkit,兼容性最好。

我的经验:别追新。CUDA 12.0刚出的时候我第一时间装了,结果一堆库不兼容,折腾了两天。现在学乖了,用次新版本最稳。

2.2.2 下载与安装

去NVIDIA官网下载对应版本。我习惯用 runfile 方式安装,可控性高。

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 和 Documentation 就行。

警告:千万别在已有驱动的情况下再装驱动,否则系统可能直接黑屏。我曾经手贱选了一次,结果只能进恢复模式修。

2.2.3 配置环境变量

装完后,把下面几行加到 ~/.bashrc 里:

export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

然后 source ~/.bashrc 让它生效。

2.2.4 验证

nvcc --version

看到版本号输出,就说明CUDA Toolkit装好了。

2.3 cuDNN 安装

cuDNN 是NVIDIA专门为深度学习优化的库。说白了,它让卷积、池化这些操作跑得更快。

2.3.1 下载

去NVIDIA官网注册下载。注意版本要和CUDA匹配。比如CUDA 12.1,就下载 cuDNN for CUDA 12.x。

2.3.2 安装

下载下来是个 tar 包。解压后把文件拷到CUDA目录下:

tar -xvf cudnn-linux-x86_64-8.9.0.131_cuda12-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.1/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64/
sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h /usr/local/cuda-12.1/lib64/libcudnn*

2.3.3 验证

cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

看到版本号就对了。

避坑指南:我曾经遇到过cuDNN拷进去后权限不对,结果程序运行时疯狂报错。记得加 chmod a+r,别偷懒。

2.4 TensorRT 安装

TensorRT 是咱们做量化推理的核心工具。它能把模型优化到极致。

2.4.1 下载与安装

同样去NVIDIA官网下载。我推荐用 tar 包方式:

tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-12.0.tar.gz
sudo mv TensorRT-8.6.1.6 /opt/

然后配置环境变量:

export LD_LIBRARY_PATH=/opt/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH
export PATH=/opt/TensorRT-8.6.1.6/bin:$PATH

2.4.2 验证

trtexec --version

看到版本信息就说明装好了。

重要:TensorRT 的版本必须和 CUDA、cuDNN 严格匹配。我整理了一个对照表:

TensorRT 版本 CUDA 版本 cuDNN 版本
8.6.1 11.8 / 12.0 8.9
8.5.3 11.8 8.8
8.4.1 11.6 / 11.7 8.6

2.5 Docker 镜像:一劳永逸的方案

说实话,手动装环境太容易出错了。我现在做项目,一律用Docker。

2.5.1 拉取官方镜像

NVIDIA 提供了现成的镜像,啥都配好了:

docker pull nvcr.io/nvidia/tensorrt:23.04-py3

这个镜像里 CUDA、cuDNN、TensorRT 全都有,版本也匹配好了。

2.5.2 启动容器

docker run --gpus all -it --rm \
  -v /path/to/your/code:/workspace \
  nvcr.io/nvidia/tensorrt:23.04-py3

加上 --gpus all 才能用GPU。我第一次用Docker时忘了加这个参数,结果在容器里跑模型,CPU慢得像蜗牛。

我的习惯:把项目代码挂载到容器里,这样改代码不用重新构建镜像。开发效率高很多。

2.6 完整验证流程

环境搭好了,怎么确认全都能用?我一般跑一套完整的测试:

  1. 验证CUDA: nvcc --versionnvidia-smi
  2. 验证cuDNN: 写个小程序调用cuDNN的API,或者直接看版本头文件
  3. 验证TensorRT: trtexec --version 或者跑一个简单的onnx模型
  4. 验证Docker: 在容器里重复上面三步

我写了个一键验证脚本,你可以参考:

#!/bin/bash
echo "=== CUDA ==="
nvcc --version
echo ""
echo "=== cuDNN ==="
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
echo ""
echo "=== TensorRT ==="
trtexec --version
echo ""
echo "=== Docker GPU ==="
docker run --gpus all --rm nvidia/cuda:12.1.0-base-ubuntu22.04 nvidia-smi

注意:如果 nvidia-smi 在Docker里报错,八成是 nvidia-container-toolkit 没装。装一下就好:

sudo apt-get install nvidia-container-toolkit
sudo systemctl restart docker

嗯,环境搭建这块就这些。别看步骤多,其实熟练了十分钟搞定。关键是版本匹配,这个坑我踩过太多次了。