第二章:环境准备——Linux基础、Docker容器化、NVIDIA驱动与CUDA安装、cuDNN配置
说实话,环境配置这一步,劝退了至少三成想入门目标检测的人。
我见过太多人,模型代码都写好了,结果卡在驱动装不上、CUDA版本对不齐、Docker跑不起来。嗯,今天咱们就把这些坑一个一个填平。
2.1 Linux基础——你不需要成为运维专家
做深度学习,Linux是绕不开的。我个人习惯用Ubuntu 20.04或22.04 LTS,稳定,社区活跃,遇到问题随便一搜就有答案。
你不需要精通Linux内核,但下面这几个命令,我建议你刻进肌肉记忆:
ls、cd、pwd——文件浏览三板斧cp、mv、rm——复制、移动、删除chmod、chown——权限管理,装驱动时经常用到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。
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-535或545,这两个版本对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
2.4 cuDNN配置——深度学习加速器
cuDNN是NVIDIA的深度学习加速库。没有它,卷积运算慢得像蜗牛爬。
安装步骤:
- 去NVIDIA官网下载cuDNN(需要注册账号,免费)
- 选择对应CUDA 12.1的版本
- 解压并复制到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装好了。
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。
2.6 验证环境——跑一个简单的目标检测
环境配好没?跑个YOLOv8试试:
# 安装ultralytics
pip install ultralytics
# 下载预训练模型,检测一张图片
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
如果看到检测结果,恭喜你——环境全部就绪,可以开始真正的目标检测之旅了。
嗯,我记得第一次配好环境跑出结果时,那种成就感,比调通一个模型还爽。希望你也能体会到。