2. 环境搭建与工具链:CUDA、cuDNN、PyTorch、OpenCV 的安装与配置,Docker 环境部署
说实话,环境搭建这事儿,看着简单,但坑是真不少。我见过太多同学花了一周时间调环境,最后发现是 CUDA 版本和 PyTorch 没对齐。咱们这节课,我就把这几年的踩坑经验全抖出来,帮你一次搞定。
2.1 整体架构:先看全局再动手
在开始安装之前,我建议你先搞清楚这些组件之间的关系。说白了,它们就像一套流水线:
- CUDA:NVIDIA 显卡的「翻译官」,把 PyTorch 的指令转成 GPU 能听懂的话
- cuDNN:CUDA 的「加速包」,专门优化卷积和池化这些深度学习常用操作
- PyTorch:咱们写模型用的框架,它依赖 CUDA 和 cuDNN
- OpenCV:图像处理工具,负责读视频、预处理帧、画检测框
嗯,这里要注意:版本必须匹配。CUDA 11.8 配 PyTorch 2.0 没问题,但 CUDA 12.1 配 PyTorch 1.10 就会报错。我当年第一次配环境时就吃过这个亏。
核心原则:先确定 PyTorch 版本,再反推 CUDA 和 cuDNN 版本。别倒着来。
2.2 CUDA 安装:别选最新版
我个人习惯是选 CUDA 11.8 或 12.1。为什么?因为 PyTorch 官方对这两个版本的支持最稳定。你想想看,CUDA 12.4 刚出来时,PyTorch 还没适配,装上去就是给自己找麻烦。
安装步骤
- 检查显卡驱动:终端运行
nvidia-smi,看右上角的 CUDA Version。如果显示 12.2,那你就装 CUDA 12.1 或 11.8,别超过驱动支持的版本。 - 下载 CUDA Toolkit:去 NVIDIA 官网选对应版本。我建议用 runfile 安装,别用 deb,因为 runfile 可以指定安装路径,方便多版本共存。
- 配置环境变量:在
~/.bashrc里加两行:
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
然后 source ~/.bashrc,运行 nvcc --version 验证。
我曾经踩过的坑:装完 CUDA 后忘了加环境变量,结果 PyTorch 一直报「CUDA not available」。折腾了两小时才发现是 PATH 没配好。所以装完一定要重启终端或 source 一下。
2.3 cuDNN 安装:解压复制就行
cuDNN 其实就是个压缩包,里面是几个库文件。你把它解压后复制到 CUDA 目录下就完事了。
# 假设你下载了 cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz
sudo cp cudnn-*/include/cudnn*.h /usr/local/cuda-11.8/include/
sudo cp cudnn-*/lib/libcudnn* /usr/local/cuda-11.8/lib64/
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*
验证方法:
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
看到版本号就对了。
2.4 PyTorch 安装:用官方命令最稳
去 PyTorch 官网(pytorch.org),选你的配置,它会生成一条安装命令。比如:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
装完后验证:
import torch
print(torch.__version__) # 应该显示 2.x.x
print(torch.cuda.is_available()) # 应该返回 True
print(torch.cuda.get_device_name(0)) # 显示你的显卡型号
小技巧:如果你用 conda,建议用 conda install pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch。conda 会自动处理依赖冲突,省心不少。
2.5 OpenCV 安装:两种方式任选
| 安装方式 | 命令 | 适用场景 |
|---|---|---|
| pip 安装(轻量) | pip install opencv-python |
快速开发,不需要 GUI 功能 |
| 源码编译(完整) | cmake .. -D WITH_CUDA=ON |
需要 GPU 加速的视频解码/图像处理 |
我建议先用 pip 装,够用。等后面做视频流处理时,如果发现 CPU 解码太慢,再考虑编译带 CUDA 的 OpenCV。
验证:
import cv2
print(cv2.__version__) # 应该显示 4.x.x
2.6 Docker 环境部署:一劳永逸
说实话,如果你经常换机器或者团队协作,Docker 是最省事的方案。我自己的做法是写一个 Dockerfile,把上面所有东西打包进去。
Dockerfile 示例
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04
RUN apt-get update && apt-get install -y \
python3 python3-pip git wget
RUN pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
RUN pip3 install opencv-python numpy matplotlib
WORKDIR /workspace
CMD ["/bin/bash"]
构建和运行:
docker build -t yolo-env:latest .
docker run --gpus all -it --rm -v $(pwd):/workspace yolo-env:latest
关键点:一定要加 --gpus all,否则容器里看不到 GPU。我第一次用 Docker 时就忘了这个参数,还以为是 CUDA 没装对。
2.7 版本兼容性速查表
为了方便你对照,我整理了一份常用版本组合:
| PyTorch 版本 | CUDA 版本 | cuDNN 版本 | 推荐场景 |
|---|---|---|---|
| 2.0.x | 11.8 | 8.9.x | 最稳定,推荐生产环境 |
| 2.1.x | 12.1 | 8.9.x | 新特性多,适合尝鲜 |
| 1.13.x | 11.7 | 8.6.x | 旧项目兼容 |
2.8 常见问题排查
- torch.cuda.is_available() 返回 False:先跑
nvidia-smi看驱动是否正常,再检查 CUDA 版本是否匹配。 - ImportError: libcudart.so.11.0: cannot open shared object file:LD_LIBRARY_PATH 没配好,或者 CUDA 版本不对。
- OpenCV 读视频特别慢:试试
cv2.VideoCapture加cv2.CAP_FFMPEG后端,或者编译带 CUDA 的 OpenCV。
我的经验:遇到环境问题,先看 PyTorch 官方文档的「Installation」页面,那里有最权威的版本对应关系。别盲目升级或降级。