环境搭建:CUDA与cuDNN安装、PyTorch框架配置、OpenCV编译与安装、验证环境

说实话,环境搭建是很多同学入门YOLO部署的第一道坎。我见过太多人卡在这一步,明明代码写得挺好,结果跑起来全是「CUDA out of memory」或者「OpenCV not compiled with GPU support」。嗯,咱们今天就把这事彻底捋清楚。

我的习惯是:先搭底层驱动,再装深度学习框架,最后搞OpenCV。顺序错了,后面全是坑。

一、CUDA与cuDNN安装

CUDA是NVIDIA的并行计算平台。说白了,它让GPU能帮你干活。cuDNN是CUDA的加速库,专门优化深度学习里的卷积、池化这些操作。

版本匹配很重要。我建议你装CUDA 11.8 + cuDNN 8.9,这个组合对PyTorch 2.x和YOLOv8/v9/v10都友好。别追最新版,稳定才是王道。

安装步骤

  1. 检查显卡驱动:终端跑 nvidia-smi,看驱动版本和最高支持的CUDA版本。驱动版本要≥450.80.02。
  2. 下载CUDA Toolkit:去NVIDIA官网选对应版本。我推荐用runfile方式安装,路径可控。
  3. 安装CUDA:sudo sh cuda_11.8.0_xxx.run,选「精简安装」就行。注意不要装驱动(如果你驱动已更新)。
  4. 配置环境变量:在 ~/.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。
  5. 验证CUDA:nvcc -V 看到版本号就对了。
  6. 安装cuDNN:下载tar包,解压后把文件拷到CUDA目录:
    sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
    sudo cp cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
    sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
  7. 验证cuDNN:cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2,看到版本号就行。
⚠️ 我曾经踩过的坑:CUDA和驱动版本不匹配,导致PyTorch能装但跑不了GPU。后来我学乖了,装之前一定先查 CUDA兼容性表。

二、PyTorch框架配置

PyTorch是YOLO模型训练和推理的核心。我建议用conda创建虚拟环境,隔离项目依赖。

安装步骤

  1. 创建conda环境:conda create -n yolo python=3.10 -y,然后 conda activate yolo。
  2. 安装PyTorch:去PyTorch官网选对应CUDA版本。比如CUDA 11.8:
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  3. 验证GPU可用:跑下面代码,返回True就对了。
    import torch
    print(torch.cuda.is_available())
    print(torch.cuda.get_device_name(0))
💡 我的个人习惯:装完PyTorch后,我会跑一个简单的矩阵乘法测试,确保GPU真的在工作。有时候torch.cuda.is_available()返回True,但实际跑起来会崩。

三、OpenCV编译与安装

OpenCV是图像处理的主力。但默认的pip版不支持CUDA加速。你要做YOLO部署,必须自己编译带CUDA的OpenCV。

为什么?因为YOLO推理时,图像预处理(resize、归一化)和后处理(NMS)都能在GPU上跑。我实测过,带CUDA的OpenCV比CPU版快3-5倍。

编译步骤

  1. 安装依赖:
    sudo apt update
    sudo apt install build-essential cmake git pkg-config
    sudo apt install libjpeg-dev libpng-dev libtiff-dev
    sudo apt install libavcodec-dev libavformat-dev libswscale-dev
    sudo apt install libgtk2.0-dev libcanberra-gtk-module
  2. 下载OpenCV源码:
    git clone https://github.com/opencv/opencv.git
    git clone https://github.com/opencv/opencv_contrib.git
    cd opencv && git checkout 4.8.0
    cd ../opencv_contrib && git checkout 4.8.0
  3. 配置CMake:
    cd opencv
    mkdir build && cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D WITH_CUDA=ON \
          -D WITH_CUDNN=ON \
          -D OPENCV_DNN_CUDA=ON \
          -D CUDA_ARCH_BIN=8.6 \  # 根据你的显卡算力改
          -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
          -D BUILD_EXAMPLES=OFF \
          -D BUILD_TESTS=OFF \
          -D BUILD_PERF_TESTS=OFF \
          ..

    CUDA_ARCH_BIN 怎么查?跑 nvidia-smi --query-gpu=compute_cap --format=csv。RTX 3090是8.6,RTX 4090是8.9,A100是8.0。

  4. 编译安装:
    make -j$(nproc)
    sudo make install
    sudo ldconfig

    编译时间大概20-40分钟,取决于你的CPU核心数。我建议用 -j$(nproc) 充分利用多核。

⚠️ 我曾经踩过的坑:第一次编译时忘了加 OPENCV_DNN_CUDA=ON,结果DNN模块还是跑在CPU上。后来重编了一次,多花了半小时。所以CMake参数一定要检查两遍。

四、验证环境

环境搭好了,得跑个完整测试。我写了个验证脚本,你直接复制跑就行。

import torch
import cv2
import numpy as np

# 1. 验证PyTorch GPU
print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA可用: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"GPU型号: {torch.cuda.get_device_name(0)}")
    print(f"显存总量: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.2f} GB")

# 2. 验证OpenCV CUDA
print(f"\nOpenCV版本: {cv2.__version__}")
print(f"OpenCV CUDA支持: {cv2.cuda.getCudaEnabledDeviceCount() > 0}")
if cv2.cuda.getCudaEnabledDeviceCount() > 0:
    print(f"CUDA设备数: {cv2.cuda.getCudaEnabledDeviceCount()}")

# 3. 测试GPU矩阵运算
a = torch.randn(1000, 1000).cuda()
b = torch.randn(1000, 1000).cuda()
c = torch.matmul(a, b)
print(f"\nGPU矩阵运算成功: {c.shape}")

# 4. 测试OpenCV GPU图像处理
img = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
gpu_img = cv2.cuda_GpuMat()
gpu_img.upload(img)
gpu_gray = cv2.cuda.cvtColor(gpu_img, cv2.COLOR_BGR2GRAY)
result = gpu_gray.download()
print(f"OpenCV GPU图像处理成功: {result.shape}")

print("\n✅ 所有环境验证通过!")

跑完看到「所有环境验证通过」就说明环境搭好了。如果哪一步报错,别慌,看错误信息定位问题。

📌 常见问题速查:
  • PyTorch找不到CUDA:检查CUDA版本是否匹配,重装PyTorch。
  • OpenCV编译报错:看CMake输出,缺什么依赖装什么。
  • cv2.cuda.getCudaEnabledDeviceCount()返回0:OpenCV没编好,检查CMake参数。

五、知识体系总览

下面这张图把整个环境搭建的脉络画清楚了。你跟着箭头走,不会迷路。

YOLO部署环境搭建知识体系 YOLO部署环境搭建知识体系 NVIDIA GPU + 驱动 CUDA Toolkit + cuDNN PyTorch 框架 OpenCV (带CUDA编译) 环境验证脚本 顺序:驱动 → CUDA/cuDNN → PyTorch → OpenCV → 验证,缺一不可

环境搭建是YOLO部署的基石。我见过太多人跳过验证直接跑模型,结果花了两天排查「为什么推理这么慢」——最后发现OpenCV没开CUDA。所以,每一步都验证,别偷懒。

💡 我的建议:把验证脚本保存成 check_env.py,每次换环境或升级组件后跑一遍。省心。