环境搭建: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都友好。别追最新版,稳定才是王道。
安装步骤
- 检查显卡驱动:终端跑
nvidia-smi,看驱动版本和最高支持的CUDA版本。驱动版本要≥450.80.02。 - 下载CUDA Toolkit:去NVIDIA官网选对应版本。我推荐用runfile方式安装,路径可控。
- 安装CUDA:
sudo sh cuda_11.8.0_xxx.run,选「精简安装」就行。注意不要装驱动(如果你驱动已更新)。 - 配置环境变量:在
~/.bashrc里加:
然后export PATH=/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATHsource ~/.bashrc。 - 验证CUDA:
nvcc -V看到版本号就对了。 - 安装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* - 验证cuDNN:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2,看到版本号就行。
二、PyTorch框架配置
PyTorch是YOLO模型训练和推理的核心。我建议用conda创建虚拟环境,隔离项目依赖。
安装步骤
- 创建conda环境:
conda create -n yolo python=3.10 -y,然后conda activate yolo。 - 安装PyTorch:去PyTorch官网选对应CUDA版本。比如CUDA 11.8:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 - 验证GPU可用:跑下面代码,返回True就对了。
import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))
三、OpenCV编译与安装
OpenCV是图像处理的主力。但默认的pip版不支持CUDA加速。你要做YOLO部署,必须自己编译带CUDA的OpenCV。
为什么?因为YOLO推理时,图像预处理(resize、归一化)和后处理(NMS)都能在GPU上跑。我实测过,带CUDA的OpenCV比CPU版快3-5倍。
编译步骤
- 安装依赖:
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 - 下载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 - 配置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。 - 编译安装:
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部署的基石。我见过太多人跳过验证直接跑模型,结果花了两天排查「为什么推理这么慢」——最后发现OpenCV没开CUDA。所以,每一步都验证,别偷懒。
check_env.py,每次换环境或升级组件后跑一遍。省心。