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 版本。别倒着来。

YOLO 推理环境依赖链 YOLO 推理应用 PyTorch OpenCV cuDNN(卷积加速库) CUDA(GPU 计算平台) NVIDIA GPU 硬件

2.2 CUDA 安装:别选最新版

我个人习惯是选 CUDA 11.8 或 12.1。为什么?因为 PyTorch 官方对这两个版本的支持最稳定。你想想看,CUDA 12.4 刚出来时,PyTorch 还没适配,装上去就是给自己找麻烦。

安装步骤

  1. 检查显卡驱动:终端运行 nvidia-smi,看右上角的 CUDA Version。如果显示 12.2,那你就装 CUDA 12.1 或 11.8,别超过驱动支持的版本。
  2. 下载 CUDA Toolkit:去 NVIDIA 官网选对应版本。我建议用 runfile 安装,别用 deb,因为 runfile 可以指定安装路径,方便多版本共存。
  3. 配置环境变量:在 ~/.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」页面,那里有最权威的版本对应关系。别盲目升级或降级。