第二章:环境准备——Linux基础、Docker容器化、NVIDIA驱动与CUDA安装、cuDNN配置

说实话,环境配置这一步,劝退了至少三成想入门目标检测的人。

我见过太多人,模型代码都写好了,结果卡在驱动装不上、CUDA版本对不齐、Docker跑不起来。嗯,今天咱们就把这些坑一个一个填平。

2.1 Linux基础——你不需要成为运维专家

做深度学习,Linux是绕不开的。我个人习惯用Ubuntu 20.04或22.04 LTS,稳定,社区活跃,遇到问题随便一搜就有答案。

你不需要精通Linux内核,但下面这几个命令,我建议你刻进肌肉记忆:

  • lscdpwd——文件浏览三板斧
  • cpmvrm——复制、移动、删除
  • chmodchown——权限管理,装驱动时经常用到
  • nvidia-smi——查看GPU状态,我每天至少敲十遍
  • htop——看CPU和内存,比top直观多了
小技巧:nvidia-smi 设成别名 gpu,省事。在 ~/.bashrc 里加一行 alias gpu='nvidia-smi',然后 source ~/.bashrc

2.2 Docker容器化——为什么我强烈推荐你用?

你想想看,一个项目依赖Python 3.8,另一个要3.10,CUDA版本还不一样。如果没有Docker,你的电脑很快就会变成一团乱麻。

Docker说白了就是一个轻量级虚拟机。但它不虚拟硬件,只虚拟环境。启动快,资源占用少,用完就删,干干净净。

安装Docker很简单:

# 一键安装脚本(Ubuntu)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 把当前用户加入docker组,避免每次sudo
sudo usermod -aG docker $USER
# 记得退出重新登录生效

我曾经在一个项目里,因为环境不一致,本地跑得好好的,到服务器上就报错。查了两天,最后发现是OpenCV版本不同。从那以后,我所有项目都强制用Docker。

注意: 加入docker组后,一定要退出终端重新登录,或者执行 newgrp docker,否则还是会提示权限不足。

2.3 NVIDIA驱动与CUDA安装——最容易翻车的地方

驱动和CUDA的安装,我踩过的坑比走过的路还多。这里直接给一套我验证过无数次的方案。

2.3.1 检查你的GPU

lspci | grep -i nvidia

如果啥都没输出,先检查显卡是不是没插好,或者驱动没装。我遇到过有人拿集成显卡跑深度学习,嗯,那体验确实很“深刻”。

2.3.2 安装NVIDIA驱动

我个人推荐用Ubuntu的ubuntu-drivers工具,省心:

# 查看推荐驱动版本
ubuntu-drivers devices

# 自动安装推荐版本
sudo ubuntu-drivers autoinstall

# 或者手动指定(比如535)
sudo apt install nvidia-driver-535

装完重启,然后敲nvidia-smi。如果看到GPU信息,恭喜你,第一步成了。

核心原则: 驱动版本不要追新,稳定第一。我一般选nvidia-driver-535545,这两个版本对CUDA 12.x支持很好。

2.3.3 安装CUDA Toolkit

记住一句话:CUDA版本要和驱动兼容。怎么看?nvidia-smi输出顶部就有“CUDA Version”,那是你的驱动支持的最高CUDA版本。

我建议用runfile方式安装,干净,可控:

# 下载CUDA 12.1(举例)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run

# 运行安装
sudo sh cuda_12.1.0_530.30.02_linux.run

# 注意:安装时不要勾选Driver,只选Toolkit

安装完成后,配置环境变量:

# 在 ~/.bashrc 末尾添加
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH

# 生效
source ~/.bashrc

# 验证
nvcc --version
避坑指南: 我曾经手滑勾选了Driver,结果和系统已有驱动冲突,直接黑屏。所以再次强调——只装Toolkit,不装Driver

2.4 cuDNN配置——深度学习加速器

cuDNN是NVIDIA的深度学习加速库。没有它,卷积运算慢得像蜗牛爬。

安装步骤:

  1. 去NVIDIA官网下载cuDNN(需要注册账号,免费)
  2. 选择对应CUDA 12.1的版本
  3. 解压并复制到CUDA目录
# 解压
tar -xzvf cudnn-linux-x86_64-8.9.0.131_cuda12-archive.tar.xz

# 复制文件
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.1/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64

# 设置权限
sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-12.1/lib64/libcudnn*

# 验证
cat /usr/local/cuda-12.1/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

如果看到版本号,说明cuDNN装好了。

我的习惯: 把cuDNN的版本号记下来。不同模型对cuDNN版本有要求,比如YOLOv8在cuDNN 8.9上表现最好,我亲测过。

2.5 终极方案:用Docker一步到位

说实话,上面那些手动安装步骤,你只要做一次就够了。之后全部用Docker。

NVIDIA官方提供了带CUDA和cuDNN的镜像,直接拉:

# 拉取PyTorch官方镜像(含CUDA 12.1 + cuDNN 8.9)
docker pull pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime

# 运行容器,挂载代码目录
docker run --gpus all -it --rm \
  -v /path/to/your/code:/workspace \
  pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime bash

你看,一行命令,环境全齐了。驱动只要系统装好,容器里直接用GPU。

核心思路: 系统只装驱动,CUDA和cuDNN交给Docker。这样换项目时,换个镜像就行,系统干干净净。

2.6 验证环境——跑一个简单的目标检测

环境配好没?跑个YOLOv8试试:

# 安装ultralytics
pip install ultralytics

# 下载预训练模型,检测一张图片
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

如果看到检测结果,恭喜你——环境全部就绪,可以开始真正的目标检测之旅了。

嗯,我记得第一次配好环境跑出结果时,那种成就感,比调通一个模型还爽。希望你也能体会到。