环境配置:CUDA、cuDNN、PyTorch安装,Docker镜像搭建,常见环境问题排查
说实话,环境配置这关,卡住了不少想入门YOLO的朋友。我见过太多人,模型代码写好了,数据集也准备好了,结果一跑就报错——CUDA版本不对,cuDNN找不到,PyTorch和显卡驱动打架……
嗯,今天咱们就把这事彻底捋清楚。你跟着我的步骤走,保证半小时内把环境搭好。
核心原则:先确定显卡驱动版本 → 再选CUDA版本 → 然后配cuDNN → 最后装PyTorch。顺序反了,大概率要重来。
2.1 显卡驱动与CUDA版本匹配
先看你的显卡。打开终端,跑一行命令:
nvidia-smi
你会看到类似这样的输出:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.05 Driver Version: 525.85.05 CUDA Version: 12.0 |
+-----------------------------------------------------------------------------+
注意右上角的 CUDA Version。这不是你实际装的CUDA版本,而是你的驱动最高支持的CUDA版本。我建议你装的CUDA版本不要超过这个数字。
| 显卡系列 | 推荐驱动版本 | 最高支持CUDA |
|---|---|---|
| RTX 4090 / 4080 | ≥ 525.85 | 12.x |
| RTX 3090 / 3080 | ≥ 470.82 | 11.x - 12.x |
| RTX 2080 / 2070 | ≥ 450.80 | 10.x - 11.x |
| GTX 1060 / 1080 | ≥ 418.87 | 10.x - 11.x |
我的习惯:装驱动时选「清洁安装」,把旧驱动彻底清掉。不然两个驱动打架,你查错能查到怀疑人生。
2.2 CUDA与cuDNN安装
确定好版本后,去NVIDIA官网下载CUDA Toolkit。我一般选 runfile(local) 方式安装,图形化界面比较直观。
安装步骤:
- 下载CUDA runfile
- 执行
sudo sh cuda_xxx_linux.run - 取消勾选Driver(驱动已装好,别重复装)
- 选择安装路径,默认就行
- 配置环境变量
# 在 ~/.bashrc 末尾添加
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
# 生效
source ~/.bashrc
# 验证
nvcc --version
cuDNN更简单。下载对应CUDA版本的cuDNN压缩包,解压后把文件复制到CUDA目录:
# 假设下载的是 cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz
tar -xvf cudnn-linux-x86_64-8.9.0.131_cuda11-archive.tar.xz
sudo cp cudnn-*/include/cudnn*.h /usr/local/cuda/include/
sudo cp cudnn-*/lib/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
我曾经踩过的坑:cuDNN版本和CUDA版本不匹配。比如CUDA 11.8配了cuDNN 8.6,结果训练时卷积算子报错。后来老老实实去NVIDIA官网查兼容性矩阵,才搞定。记住:cuDNN版本号前两位要和CUDA大版本一致。
2.3 PyTorch安装与验证
PyTorch安装,我推荐用pip。去PyTorch官网选对应CUDA版本的命令:
# CUDA 11.8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
装完后,一定要验证:
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))"
如果输出 True 和你的显卡型号,恭喜你,环境配好了。
小技巧:用
pip list | grep torch 查看已安装的PyTorch版本。如果发现CPU版本,说明你装错了。赶紧卸载重装GPU版。
2.4 Docker镜像搭建
说实话,Docker是解决环境问题的终极方案。我现在的项目,全部用Docker跑。好处很明显:
- 环境隔离,不污染宿主机
- 一键部署,团队共享
- 版本回滚,出问题秒切
我的Dockerfile长这样:
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04
RUN apt-get update && apt-get install -y \
python3.8 python3-pip git wget
RUN pip install torch==2.0.1 torchvision==0.15.2 --index-url https://download.pytorch.org/whl/cu118
RUN pip install ultralytics opencv-python matplotlib
WORKDIR /workspace
CMD ["/bin/bash"]
构建和运行:
# 构建镜像
docker build -t yolo-env:latest .
# 运行容器(挂载代码目录)
docker run --gpus all -it --rm \
-v /path/to/your/code:/workspace \
yolo-env:latest
注意:一定要加
--gpus all,不然容器里看不到显卡。我第一次用Docker跑YOLO时忘了这个参数,训练速度慢得像蜗牛,查了半天才发现。
2.5 常见环境问题排查
环境问题千奇百怪,但核心就几类。我整理了一个排查清单:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
CUDA error: no kernel image is available |
CUDA版本与PyTorch不匹配 | 重装对应CUDA版本的PyTorch |
libcudnn.so.8: cannot open shared object file |
cuDNN未正确安装或路径未配置 | 检查 LD_LIBRARY_PATH 是否包含cuDNN路径 |
RuntimeError: CUDA out of memory |
显存不足 | 减小batch size,或使用 torch.cuda.empty_cache() |
ImportError: libGL.so.1 |
缺少OpenCV依赖 | apt-get install libgl1-mesa-glx |
| 训练速度极慢 | PyTorch装了CPU版 | 卸载重装GPU版PyTorch |
终极排查法:如果以上都试了还不行,直接
nvidia-smi 看驱动是否正常。驱动挂了,后面全白搭。我曾经有一次升级内核后驱动失效,折腾了两小时才发现。
2.6 环境配置知识体系
下面这张图,把整个环境配置的流程和依赖关系画清楚了。你照着这个走,不会迷路。
环境配置这事,说白了就是「版本对齐」。驱动、CUDA、cuDNN、PyTorch,四个东西的版本必须在一个频道上。你只要记住这个原则,遇到问题先查版本兼容性,基本能解决90%的坑。
我的建议:第一次配环境,用Docker。省心,省力,出问题删了重建就行。等你熟练了,再考虑裸机安装。