第2章:环境搭建与工具链——CUDA、cuDNN、PyTorch安装、Ultralytics库配置、Docker环境部署
说实话,很多同学学YOLO系列,第一关就卡在环境搭建上。
我记得有个学员,显卡驱动装了三遍,CUDA版本换了四次,最后发现是PyTorch和CUDA版本没对齐。折腾了两天,还没跑起来一个demo。
这一章,我就带你把这套工具链一次性捋顺。从CUDA到Docker,每一步我都会告诉你:为什么要装这个版本?装错了怎么救?
本章核心目标:搭建一套可复现、可迁移的YOLOv8-v11全系列训练环境。你跟着我走完,至少能省下80%的踩坑时间。
2.1 环境全景图:先看清全局再动手
动手之前,我们先看看整个工具链长什么样。我习惯先画一张图,把每个组件的位置和关系搞清楚,这样后面装起来心里有数。
这张图你看懂了吗?从上到下,每一层都依赖下面一层。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系列官方测试也主要基于这个版本。
安装步骤:
- 去NVIDIA官网下载CUDA 11.8安装包
- 选择对应操作系统和架构
- 运行安装程序(Linux用runfile,Windows用exe)
- 添加环境变量(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%。
安装步骤:
- 去NVIDIA官网注册并下载cuDNN(需要账号)
- 选择与CUDA 11.8匹配的版本(推荐v8.9.0)
- 解压后把文件复制到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全部打包好了,拉下来就能用。我自己的教学服务器就是这么配的,省心。