第2章:环境搭建与工具链——CUDA、cuDNN、PyTorch安装、Ultralytics库配置、Docker环境部署

说实话,很多同学学YOLO系列,第一关就卡在环境搭建上。

我记得有个学员,显卡驱动装了三遍,CUDA版本换了四次,最后发现是PyTorch和CUDA版本没对齐。折腾了两天,还没跑起来一个demo。

这一章,我就带你把这套工具链一次性捋顺。从CUDA到Docker,每一步我都会告诉你:为什么要装这个版本?装错了怎么救?

本章核心目标:搭建一套可复现、可迁移的YOLOv8-v11全系列训练环境。你跟着我走完,至少能省下80%的踩坑时间。

2.1 环境全景图:先看清全局再动手

动手之前,我们先看看整个工具链长什么样。我习惯先画一张图,把每个组件的位置和关系搞清楚,这样后面装起来心里有数。

YOLOv8-v11 环境工具链全景图 硬件层:NVIDIA GPU(建议RTX 3060及以上,显存≥8GB) GPU驱动版本 ≥ 525.60.13(Linux)或 ≥ 528.33(Windows) CUDA Toolkit 11.8 / 12.1 nvcc --version 验证安装 cuDNN v8.9+(与CUDA版本匹配) 深度学习卷积加速库 PyTorch 2.x(CUDA 11.8/12.1 对应版本) torch.cuda.is_available() 验证 Ultralytics 8.x(YOLOv8/v9/v10/v11) pip install ultralytics 硬件 驱动 加速库 框架 应用库

这张图你看懂了吗?从上到下,每一层都依赖下面一层。GPU驱动没装好,CUDA就装不上;CUDA版本不对,PyTorch就识别不了显卡。一环扣一环。

2.2 CUDA与cuDNN:GPU加速的基石

CUDA是什么?说白了,它就是NVIDIA给GPU写的编程接口。没有它,PyTorch就只能用CPU跑,训练一个YOLOv8模型可能要几天。

2.2.1 检查GPU与驱动

先确认你的显卡型号和驱动版本。我习惯用这个命令:

# Windows
nvidia-smi

# Linux
nvidia-smi

# 输出示例
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.60.13    Driver Version: 525.60.13    CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce RTX 3060  Off  | 00000000:01:00.0  On |                  N/A |
| 30%   45C    P8    12W / 170W |    456MiB / 12288MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

我的经验:看输出里的"CUDA Version"字段。这个值表示你的驱动支持的最高CUDA版本。比如显示12.0,那你装CUDA 11.8或12.0都可以,但不能装12.1。

2.2.2 安装CUDA Toolkit

我个人建议装CUDA 11.8。为什么?因为PyTorch 2.x对11.8的支持最稳定,而且YOLO系列官方测试也主要基于这个版本。

安装步骤:

  1. 去NVIDIA官网下载CUDA 11.8安装包
  2. 选择对应操作系统和架构
  3. 运行安装程序(Linux用runfile,Windows用exe)
  4. 添加环境变量(Windows自动加,Linux需手动配)

验证安装:

nvcc --version

# 输出示例
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89

注意:如果你之前装过其他CUDA版本,建议先卸载干净。我遇到过有人同时装了11.8和12.0,结果PyTorch死活认不出显卡。卸载方法:Linux用sudo apt-get --purge remove cuda,Windows在控制面板卸载。

2.2.3 安装cuDNN

cuDNN是NVIDIA专门为深度学习优化的卷积加速库。没有它,训练速度会慢30%-50%。

安装步骤:

  1. 去NVIDIA官网注册并下载cuDNN(需要账号)
  2. 选择与CUDA 11.8匹配的版本(推荐v8.9.0)
  3. 解压后把文件复制到CUDA安装目录
# Linux示例
tar -xzvf cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P 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

# 输出示例
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 0

2.3 PyTorch安装:选对版本是关键

PyTorch是整个YOLO训练的核心框架。装PyTorch最怕什么?版本不匹配。

我建议直接去PyTorch官网(pytorch.org)用它的命令生成器。选好你的配置:

配置项 推荐值 说明
PyTorch版本 2.1.0 / 2.2.0 对YOLOv8-v11兼容性最好
CUDA版本 11.8 与前面安装的CUDA一致
包管理器 pip / conda 个人推荐pip,更轻量
操作系统 Linux / Windows Linux训练更快,Windows调试方便

安装命令示例:

# CUDA 11.8 + PyTorch 2.1.0
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

验证安装:

import torch
print(torch.__version__)        # 2.1.0+cu118
print(torch.cuda.is_available()) # True
print(torch.cuda.device_count()) # 1
print(torch.cuda.get_device_name(0)) # NVIDIA GeForce RTX 3060

关键验证点:torch.cuda.is_available() 必须返回 True。如果返回 False,说明CUDA或cuDNN没装对。我曾经帮一个学员远程调试,发现他装的是CPU版的PyTorch——命令里忘了加 --index-url 参数。

2.4 Ultralytics库配置:一行命令搞定

Ultralytics是YOLOv8/v9/v10/v11的官方库。安装它非常简单:

pip install ultralytics

就这么一行。但装完之后,我建议你验证一下:

from ultralytics import YOLO

# 加载一个预训练模型(会自动下载)
model = YOLO('yolov8n.pt')

# 查看模型信息
print(model.info())

# 跑一次推理测试
results = model('https://ultralytics.com/images/bus.jpg')
print(results[0].boxes)  # 检测到的目标框

如果没报错,恭喜你,环境搭好了。

我的习惯:每次新建项目,我都会用 pip list | grep ultralytics 确认版本。Ultralytics更新很快,有时候小版本升级会改API。建议锁定版本:pip install ultralytics==8.2.0。

2.5 Docker环境部署:一劳永逸的方案

如果你经常换机器,或者团队协作,Docker是最省心的方案。我自己的服务器上就常年跑着YOLO的Docker容器。

2.5.1 拉取官方镜像

# 拉取Ultralytics官方镜像
docker pull ultralytics/ultralytics:latest

# 或者指定PyTorch版本
docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime

2.5.2 运行容器

# 带GPU支持运行
docker run --gpus all -it --name yolo_env \
  -v /path/to/your/data:/workspace/data \
  ultralytics/ultralytics:latest /bin/bash

参数说明:

参数 作用
--gpus all 让容器访问所有GPU
-it 交互式终端
--name 容器命名,方便管理
-v 挂载本地目录,数据持久化

注意:Docker使用GPU需要安装NVIDIA Container Toolkit。没装的话,--gpus all 会报错。安装命令:sudo apt-get install nvidia-container-toolkit,然后重启Docker服务。

2.5.3 编写Dockerfile(进阶)

如果你需要定制环境,可以自己写Dockerfile:

FROM pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    libgl1-mesa-glx \
    libglib2.0-0 \
    && rm -rf /var/lib/apt/lists/*

# 安装Ultralytics
RUN pip install ultralytics==8.2.0

# 设置工作目录
WORKDIR /workspace

# 默认命令
CMD ["/bin/bash"]

构建镜像:

docker build -t yolo-custom:1.0 .

2.6 常见问题与避坑指南

这些年我帮人调试环境,遇到最多的问题就这几个:

  • PyTorch检测不到GPU:90%是CUDA版本不匹配。用 nvcc --version 和 nvidia-smi 对比,确保PyTorch的CUDA版本 ≤ 驱动的CUDA版本。
  • cuDNN报错:一般是权限问题。Linux下记得 chmod a+r,Windows下检查环境变量。
  • Ultralytics导入报错:可能是依赖冲突。建议用虚拟环境:python -m venv yolo_env,然后激活再装。
  • Docker GPU不可用:检查 nvidia-smi 在宿主机是否正常,再确认 nvidia-container-toolkit 已安装。

终极建议:如果你不想折腾,直接用Ultralytics的Docker镜像。它把CUDA、cuDNN、PyTorch、Ultralytics全部打包好了,拉下来就能用。我自己的教学服务器就是这么配的,省心。