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容器工具包。
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
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_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())"
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是否安装正确。
nvidia-cuda-toolkit,导致PyTorch回退到了CPU模式。记住:Docker容器里也要装CUDA Toolkit,除非你用的是官方PyTorch镜像。
2.6 本章知识体系总览
下面这张图,把整个环境搭建的流程和依赖关系梳理清楚了。你可以把它当作检查清单: