2. 深度学习环境搭建
说实话,环境搭建是很多同学入门深度学习的第一道坎。我见过太多人卡在这一步,明明代码写得没问题,就是跑不起来。其实说白了,环境配置就像搭积木——顺序对了,一切都顺。
这一章,我会带你一步步把地基打牢。咱们的目标很明确:装好Anaconda、配好CUDA和cuDNN、装好PyTorch,最后让GPU真正跑起来。
2.1 为什么需要这套环境?
先理清这些组件的关系。你想想看,深度学习训练就像做饭:
- Anaconda —— 你的厨房管理工具。它帮你隔离不同的“菜系”(项目环境),互不干扰。
- CUDA —— 英伟达提供的并行计算平台。它让GPU能听懂你的计算指令。
- cuDNN —— 针对深度神经网络的加速库。它让卷积、池化这些操作跑得更快。
- PyTorch —— 你的炒锅。所有模型代码都在这里面翻炒。
核心原则:版本匹配
PyTorch、CUDA、cuDNN、显卡驱动,这四个东西的版本必须互相兼容。我曾经因为没注意版本,折腾了整整一个下午——后来发现只是CUDA版本高了0.1。
下面这张图能帮你快速理解整个架构:
2.2 Anaconda 安装与配置
我个人习惯用Anaconda来管理Python环境。为什么?因为它能让你同时维护多个项目,每个项目用不同的Python版本和依赖包,互不打架。
2.2.1 下载与安装
- 去官网下载:https://www.anaconda.com/products/distribution
- 选对版本:建议选Python 3.8或3.9的版本。YOLOv7对Python 3.10以上支持不太好,我踩过这个坑。
- 安装选项: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
安装步骤:
- 选择操作系统和安装包类型(exe/runfile)
- Windows用户选“精简安装”,Linux用户按官网命令走
- 安装完成后,验证一下:
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真正跑起来。不过那是后面章节的事了——先把眼前的环境验证通过再说。