2、开发环境搭建:CUDA Toolkit、cuDNN、TensorRT的安装与配置,Docker镜像的使用,验证安装是否成功。
说实话,环境搭建这事儿,看着简单,坑是真不少。
我见过太多同学,算法模型写得飞起,一到部署就卡在环境上。CUDA版本不对、cuDNN没配上、TensorRT报错……一折腾就是半天。所以这一章,咱们把这事儿彻底捋清楚。
核心思路:先装驱动 → 再装CUDA Toolkit → 然后cuDNN → 最后TensorRT。顺序别搞反了,不然有你受的。
2.1 整体架构:一张图看懂
这张图我每次培训都会放。你想想看,驱动在最底下,上面一层层叠起来。哪一层出问题,上面全废。
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 完整验证流程
环境搭好了,怎么确认全都能用?我一般跑一套完整的测试:
- 验证CUDA:
nvcc --version和nvidia-smi - 验证cuDNN: 写个小程序调用cuDNN的API,或者直接看版本头文件
- 验证TensorRT:
trtexec --version或者跑一个简单的onnx模型 - 验证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
嗯,环境搭建这块就这些。别看步骤多,其实熟练了十分钟搞定。关键是版本匹配,这个坑我踩过太多次了。