2. 环境搭建与工具链:Ubuntu + CUDA + cuDNN + PyTorch 环境配置,Docker镜像使用,Anaconda虚拟环境管理

做YOLO实时检测,第一步不是写代码,而是搭环境。我见过太多同学花了一周调模型,最后发现是CUDA版本不对——这种坑,踩一次就够了。

这一章,咱们把环境彻底理清楚。从裸机到能跑YOLOv8,一步不落。

2.1 硬件与操作系统准备

先说说硬件底线。YOLO对GPU要求其实没那么高,但有些硬性条件必须满足:

组件 最低要求 推荐配置
GPU NVIDIA GTX 1060 (6GB) RTX 3060 / A4000 及以上
显存 4GB 8GB+(训练YOLOv8m需要)
系统 Ubuntu 20.04 Ubuntu 22.04 LTS
内存 16GB 32GB
磁盘 50GB SSD 256GB NVMe SSD

我个人习惯用Ubuntu 22.04。为什么?因为它的内核和驱动支持更友好,踩坑少。Windows也能跑,但很多底层工具链在Linux上更顺畅——尤其是Docker和NVIDIA容器工具包。

注意: 如果你用笔记本,记得在BIOS里确认「Hybrid Graphics」模式已关闭,或者至少让NVIDIA独显直连。否则PyTorch可能检测不到GPU。

2.2 CUDA与cuDNN安装

CUDA是NVIDIA的并行计算平台。cuDNN是它的深度学习加速库。说白了,CUDA让GPU能跑通用计算,cuDNN让卷积、池化这些操作跑得更快。

安装步骤其实很简单,但版本匹配是关键。我建议用CUDA 11.8 + cuDNN 8.9的组合,这是目前PyTorch 2.x最稳定的搭档。

2.2.1 安装CUDA

# 1. 检查GPU是否支持
lspci | grep -i nvidia

# 2. 安装驱动(推荐535版本)
sudo apt update
sudo apt install nvidia-driver-535

# 3. 重启后验证
nvidia-smi

# 4. 下载CUDA 11.8 runfile
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

# 5. 配置环境变量
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

# 6. 验证
nvcc --version
小技巧: 安装CUDA时,不要勾选Driver选项(因为我们已经单独装了驱动),只选CUDA Toolkit和CUDA Samples。这样可以避免驱动冲突。

2.2.2 安装cuDNN

cuDNN需要NVIDIA开发者账号才能下载。你可以去官网注册,或者直接用我下面这个方式——用apt安装,省心很多。

# 添加NVIDIA官方仓库
sudo apt install nvidia-cudnn
# 或者手动安装deb包
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_amd64.deb
sudo apt update
sudo apt install libcudnn8 libcudnn8-dev

# 验证
cat /usr/include/x86_64-linux-gnu/cudnn_version.h | grep CUDNN_MAJOR -A 2

我曾经在cuDNN版本上吃过亏。有一次训练YOLOv5,loss死活不降,折腾了两天,最后发现是cuDNN 8.6和CUDA 11.7有个已知的bug。所以,版本匹配真的别偷懒。

2.3 Anaconda虚拟环境管理

Python环境隔离是基本功。我见过有人把所有项目都装在base环境里,最后依赖冲突到崩溃。Anaconda就是用来解决这个问题的。

2.3.1 安装Anaconda

# 下载安装脚本
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
bash Anaconda3-2024.10-1-Linux-x86_64.sh

# 安装完成后,初始化
source ~/.bashrc

# 验证
conda --version

2.3.2 创建YOLO专用环境

# 创建环境,指定Python 3.10
conda create -n yolo_env python=3.10 -y

# 激活环境
conda activate yolo_env

# 安装PyTorch(CUDA 11.8版本)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 验证GPU可用
python -c "import torch; print(torch.cuda.is_available())"
# 应该输出 True
核心原则: 每个项目一个独立环境。YOLO项目用 yolo_env,其他项目用 tf_env、nlp_env。互不干扰,出了问题直接删环境重来,不污染系统。

2.4 Docker镜像使用

Docker是环境管理的终极方案。你想想看,如果团队里有人用Ubuntu 20.04,有人用22.04,还有人用Mac——环境不一致,bug就来了。Docker把整个环境打包成镜像,谁拉下来都能跑。

2.4.1 安装Docker与NVIDIA Container Toolkit

# 安装Docker
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

# 添加当前用户到docker组(避免每次sudo)
sudo usermod -aG docker $USER
# 重新登录生效

# 安装NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt update
sudo apt install nvidia-container-toolkit
sudo systemctl restart docker

2.4.2 拉取并运行YOLO镜像

# 拉取官方PyTorch镜像(已包含CUDA和cuDNN)
docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime

# 运行容器,挂载代码目录
docker run --gpus all -it --rm \
  -v /home/yourname/yolo_project:/workspace \
  pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime \
  bash

# 在容器内验证
python -c "import torch; print(torch.cuda.is_available())"
为什么推荐Docker? 因为你可以把整个环境写进 Dockerfile,版本控制、团队共享、CI/CD集成都非常方便。我现在的项目都是「Dockerfile + docker-compose」一套带走。

2.5 环境验证与常见问题

环境搭好了,怎么确认一切正常?我一般跑一个完整的YOLO推理流程来验证:

# 安装ultralytics
pip install ultralytics

# 下载预训练模型并推理
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

# 如果看到检测结果输出,说明环境完全OK

如果遇到问题,别慌。90%的问题出在以下三个方面:

  • CUDA版本不匹配:用 nvidia-smi 看驱动支持的CUDA版本,用 nvcc --version 看Toolkit版本,两者可以不同,但PyTorch需要和Toolkit匹配。
  • cuDNN缺失或版本不对:检查 /usr/include/cudnn_version.h,确保版本号在PyTorch支持列表里。
  • Docker GPU不可用:运行 docker run --gpus all nvidia/cuda:11.8.0-base nvidia-smi,如果报错,检查nvidia-container-toolkit是否安装正确。
避坑指南: 我曾经在Docker里跑YOLO,发现GPU利用率只有30%。排查了半天,发现是容器里没有安装 nvidia-cuda-toolkit,导致PyTorch回退到了CPU模式。记住:Docker容器里也要装CUDA Toolkit,除非你用的是官方PyTorch镜像。

2.6 本章知识体系总览

下面这张图,把整个环境搭建的流程和依赖关系梳理清楚了。你可以把它当作检查清单:

YOLO环境搭建知识体系 NVIDIA GPU + Ubuntu NVIDIA Driver 535 CUDA 11.8 Toolkit cuDNN 8.9 Anaconda 虚拟环境 Docker + nvidia-docker PyTorch 2.x (CUDA 11.8) Ultralytics YOLOv8 核心原则: 1. 版本匹配:CUDA → cuDNN → PyTorch 版本必须对齐 2. 环境隔离:每个项目独立虚拟环境或Docker容器 3. 验证闭环:每安装一层,立即验证,不要攒到最后