2. 深度学习环境搭建

说实话,环境搭建是很多同学入门深度学习的第一道坎。我见过太多人卡在这一步,明明代码写得没问题,就是跑不起来。其实说白了,环境配置就像搭积木——顺序对了,一切都顺。

这一章,我会带你一步步把地基打牢。咱们的目标很明确:装好Anaconda、配好CUDA和cuDNN、装好PyTorch,最后让GPU真正跑起来。

2.1 为什么需要这套环境?

先理清这些组件的关系。你想想看,深度学习训练就像做饭:

  • Anaconda —— 你的厨房管理工具。它帮你隔离不同的“菜系”(项目环境),互不干扰。
  • CUDA —— 英伟达提供的并行计算平台。它让GPU能听懂你的计算指令。
  • cuDNN —— 针对深度神经网络的加速库。它让卷积、池化这些操作跑得更快。
  • PyTorch —— 你的炒锅。所有模型代码都在这里面翻炒。

核心原则:版本匹配

PyTorch、CUDA、cuDNN、显卡驱动,这四个东西的版本必须互相兼容。我曾经因为没注意版本,折腾了整整一个下午——后来发现只是CUDA版本高了0.1。

下面这张图能帮你快速理解整个架构:

深度学习环境架构图 YOLOv7 训练/推理代码 PyTorch 框架 CUDA 并行计算平台 cuDNN 深度神经网络加速库 NVIDIA 显卡驱动 NVIDIA GPU 硬件 每一层依赖下一层 版本必须逐级兼容

2.2 Anaconda 安装与配置

我个人习惯用Anaconda来管理Python环境。为什么?因为它能让你同时维护多个项目,每个项目用不同的Python版本和依赖包,互不打架。

2.2.1 下载与安装

  1. 去官网下载:https://www.anaconda.com/products/distribution
  2. 选对版本:建议选Python 3.8或3.9的版本。YOLOv7对Python 3.10以上支持不太好,我踩过这个坑。
  3. 安装选项:Windows用户记得勾选“Add Anaconda to my PATH environment variable”。Linux/Mac用户直接bash安装就行。

小技巧:安装路径不要有中文和空格。我之前有个学生装在“D:\深度学习\环境”下面,结果各种报错——后来改成“D:\deeplearning\env”就没事了。

2.2.2 创建虚拟环境

装好Anaconda后,第一件事就是给YOLOv7建个独立环境。我习惯用命令行操作:

# 创建环境,指定Python版本
conda create -n yolov7 python=3.8

# 激活环境
conda activate yolov7

# 验证Python版本
python --version

看到输出 Python 3.8.x 就对了。以后所有YOLOv7相关的包都装在这个环境里,不会污染系统Python。

2.3 CUDA 与 cuDNN 配置

这是最容易出问题的一步。我见过太多人在这上面浪费大半天。记住一句话:先查PyTorch支持的CUDA版本,再装对应的CUDA和cuDNN。

2.3.1 检查显卡驱动

先看看你的显卡能不能用:

# Windows
nvidia-smi

# Linux
nvidia-smi

输出里会显示驱动版本和最高支持的CUDA版本。比如驱动版本525.xx,最高支持CUDA 12.0。但别急着装最高的——要看PyTorch支持什么。

注意:nvidia-smi显示的“CUDA Version”是驱动支持的最高版本,不是你实际安装的版本。很多人被这个搞晕过。

2.3.2 选择版本组合

以我写这章时为例,PyTorch 2.0.x 官方支持CUDA 11.7和11.8。所以我推荐:

组件 推荐版本 说明
显卡驱动 ≥ 525.x 支持CUDA 12.x,向下兼容
CUDA Toolkit 11.8 PyTorch 2.0.x 官方支持
cuDNN 8.7.0 匹配CUDA 11.8
PyTorch 2.0.1 CUDA 11.8版本

2.3.3 安装CUDA Toolkit

去英伟达官网下载对应版本:https://developer.nvidia.com/cuda-toolkit-archive

安装步骤:

  1. 选择操作系统和安装包类型(exe/runfile)
  2. Windows用户选“精简安装”,Linux用户按官网命令走
  3. 安装完成后,验证一下:
nvcc --version

看到 Cuda compilation tools, release 11.8 就对了。

2.3.4 配置cuDNN

cuDNN不需要安装,解压后把文件复制到CUDA目录就行:

# 下载cuDNN(需要注册英伟达账号)
# 解压后得到三个文件夹:bin、include、lib

# Windows:复制到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\
# Linux:复制到 /usr/local/cuda-11.8/

# 验证
# 运行CUDA自带的sample
cd /path/to/CUDA/samples/1_Utilities/deviceQuery
make
./deviceQuery

避坑指南:我曾经直接把cuDNN文件复制错了位置,结果训练速度慢得像蜗牛。后来才发现cuDNN根本没生效。一定要确认文件覆盖到了CUDA的对应目录。

2.4 PyTorch 安装

环境激活后,安装PyTorch就一行命令的事。去官网 https://pytorch.org 选你的配置:

# 激活环境
conda activate yolov7

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

# 或者用conda安装(更稳定)
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

我个人更推荐用pip安装。conda有时候解析依赖太慢,而且容易卡住。

2.5 GPU 环境验证

装完别急着跑模型。先写几行代码验证一下:

import torch

# 检查PyTorch版本
print(f"PyTorch版本: {torch.__version__}")

# 检查CUDA是否可用
print(f"CUDA可用: {torch.cuda.is_available()}")

# 检查GPU数量
print(f"GPU数量: {torch.cuda.device_count()}")

# 检查GPU名称
print(f"GPU名称: {torch.cuda.get_device_name(0)}")

# 简单测试:在GPU上创建张量
x = torch.rand(3, 3).cuda()
print(f"GPU张量: {x}")

如果输出类似这样,说明环境配好了:

PyTorch版本: 2.0.1+cu118
CUDA可用: True
GPU数量: 1
GPU名称: NVIDIA GeForce RTX 3080
GPU张量: tensor([[0.1234, 0.5678, ...]])

快速测试:我习惯再跑一个简单的矩阵乘法,看看GPU是不是真的在工作:

import torch
import time

# CPU计算
a = torch.rand(5000, 5000)
start = time.time()
b = a @ a
print(f"CPU耗时: {time.time() - start:.2f}s")

# GPU计算
a_gpu = a.cuda()
start = time.time()
b_gpu = a_gpu @ a_gpu
print(f"GPU耗时: {time.time() - start:.2f}s")

如果GPU比CPU快10倍以上,说明环境完全OK。

2.6 常见问题与解决方案

我把这些年遇到的高频问题整理了一下:

问题 原因 解决方案
torch.cuda.is_available() 返回 False PyTorch版本与CUDA不匹配 卸载PyTorch,重新安装对应CUDA版本的PyTorch
nvcc 命令找不到 CUDA没加到环境变量 手动添加CUDA的bin目录到PATH
训练时显存不足 batch_size太大 调小batch_size,或使用梯度累积
conda安装卡在Solving environment 依赖解析太慢 改用pip安装,或换国内镜像源

最后提醒一句:别在系统Python里直接pip install torch。一定要用虚拟环境。我见过有人把系统Python搞崩了,最后重装系统的——那滋味可不好受。

好了,环境搭好了。下一件事就是让YOLOv7真正跑起来。不过那是后面章节的事了——先把眼前的环境验证通过再说。