Win11、PyTorch和MMDetection的GPU配置:一次令人难忘的踩坑经历
一 anaconda 安装和配置
1. 下载
软件下载地址 下载地址 Index of /anaconda/archive/
按照date排序,选择最新的版本,如下图。
2. 安装
记得在安装中勾选此选项。
3. 验证
一路安装完成以后,就可以打开cmd测试一下安装结果。 分别输入python、ipython、conda、jupyter notebook等命令,会看到相应的结果,说明安装成功。(python是进入python交互命令行;ipython是进入ipython交互命令行,很强大;conda是Anaconda的配置命令;jupyter notebook则会启动Web端的ipython notebook)
4. 换源
Anaconda安装成功之后,我们需要修改其包管理镜像为国内源。
Tsinghua Open Source Mirror
按照指引更换清华源。
5. 基本语句
- 创建新虚拟环境
conda create -n py37 python=3.7
- 意思是创建名为 py37 的环境, python版本3.7
- 进入环境
conda activate py37
- 接下来的操作都需要在虚拟环境中进行
- 退出环境
conda deactivate
- 安装包
conda install xxx
- 删除环境
conda remove -n py37 --all
二 pytorch 安装和配置
1. 总述
pytorch 部分安装需要 cuda、cudnn、torch版本匹配。
mmdetection 部分安装需要 mmcv、mmdt版本匹配。
我们先去 mmcv 文档检查支持的版本。网址为欢迎来到 MMCV 的中文文档! — mmcv 1.7.0 文档,在介绍与安装 - 安装 MMCV - 使用 pip 安装一节中,提到了对应版本匹配情况。
所以我们选择 cuda=11.6 torch=1.12 mmcv=1.62。
cuda版本一定要选择 11.6。
这是一个大坑,千万不要选错版本。
2. pytorch 安装
实际上,nvidia 显卡笔记本都内置cuda,只不过版本各异。我们需要在虚拟环境中安装特定版本 cuda。
首先创建新环境,python选择3.8。进入该环境。
Start Locally | PyTorch是 pytorch 安装 start。可以看到需要选择对应的版本,直接按照如图选择。
会到国外的镜像去下载一些包,亲测清华源似乎有点包不兼容,所以就等吧。
3. pytorch 检查
安装好, 我们需要去检查 pytorch 是否安装成功,是否是 GPU 版本。
输入python
进入 python 环境。
import torch
a = torch.ones((3, 1))
a = a.cuda(0)
如果运行没有报错,恭喜完成了 GPU 版本 pytorch 的安装。
三 mmdetection 安装
1. mmcv 安装
有两个版本 mmcv-full 和 mmcv, 做科研推荐 mmcv-full。
运行
pip install -U openmim
mim install mmcv-full
“如果发现上述的安装命令没有使用预编译包(以 .whl
结尾)而是使用源码包(以 .tar.gz
结尾)安装,则有可能是我们没有提供和当前环境的 PyTorch 版本、CUDA 版本相匹配的 mmcv-full 预编译包,此时,你可以[源码安装 mmcv-full]”
之前踩过坑,选择了没有预编译包的cuda和torch版本,结果拉下来就是 tar.gz 的包,需要重新编译,然后一直提示 g++ return 0, 尝试谷歌了很久都没有解决。
2. mmdetection 安装
运行
pip install openmim
mim install mmdet
其实如果这一步没有问题,可以直接省略 1中的mmcv-full 安装。
3. mmdet 验证
按照官网实例: 为了验证是否正确安装了 MMDetection 和所需的环境,我们可以运行示例的 Python 代码来初始化检测器并推理一个演示图像:
from mmdet.apis import init_detector, inference_detector
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
# 从 model zoo 下载 checkpoint 并放在 `checkpoints/` 文件下
# 网址为: http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
device = 'cuda:0'
# 初始化检测器
model = init_detector(config_file, checkpoint_file, device=device)
# 推理演示图像
inference_detector(model, 'demo/demo.jpg')
四 总结
自此大功告成,最大的启发就是:按照各个模块的版本要求来,多看看文档。