提出问题
最近在做项目研究时,有个程序需要用到“DCNv2”这个库。当运行程序时,会出现标题中的错误,试了不少方法,最终得以解决,因此,记录一下,以防下次还会遇到相同错误。
解决方案
针对RTX 2080Ti显卡
解决方案主要参考了该Github链接提出的方法。主要是降低Python版本,到Python 3.6。具体步骤如下:
- 利用Anaconda创建一个Python 3.6 的环境;
- 以pytorch==1.4和torchvision==0.5为基础安装DCNv2。安装命令如下:
pip install -U torch==1.4 torchvision==0.5 -f https://download.pytorch.org/whl/cu101/torch_stable.html
pip install DCNv2
以上命令执行完毕后,基本实现了DCNv2的安装。
- 如果还有问题,则执行DCNv2的编译。git clone这个库,然后转到该库的路径,执行bash make.sh编译即可。
针对RTX 3090显卡
解决方案如下:
这里主要是利用docker搭建环境,因为目前3090显卡对于pytorch的支持度并不是那么友好,因此,以docker建立环境能防止环境的混乱。(具体的docker环境配置在此不列出,后续单独提供)
- 首先,我们利用如下命令拉取一个docker镜像。(3090显卡目前适合的cuda版本11.0和11.1最好,其余版本可能存在问题)
docker pull nvidia/cuda:11.0.3-cudnn8-devel-ubuntu18.04
- 获取镜像后,我们创建一个容器,并将宿主机的一个文件夹映射到容器中的一个文件夹,方便文件的修改和创建。命令如下:
docker run --gpus all --shm-size 32G -it -v /home/.../wang/test:/test f59de068eb15 /bin/bash
或者 加容器名和端口转换:
docker run --gpus all --shm-size 16G -it -p 5050:22 -v /home/dell/data/.../satellite_process:/home/dell/data/.../satellite_process --name zaigui 8adcfd968b3c /bin/bash
- 容器创建完成后,下载好Anaconda等安装包和Python环境。然后,安装相适应的pytorch版本,这里,我们以以下版本创建pytorch(1.7)环境。
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
- 安装DCNv2,这部分不像RTX 2080Ti那么简单就能安装,必须下载源码进行编译。这里主要参考以下内容:参考内容。从这个链接下载DCNv2源码。需要注意的是:作者把dcn-v2.py的文件放到了DCN文件夹下,需要拷贝到上一层目录,要不然和安装目录对不上。最后运行bash ./make.sh即可安装DCNv2。
强烈温馨提示:如果运行代码在数据加载dataloader这里出错,报:OSError: [Errno 28] No space left on device这个错,如果检查内存空间确实没错,大概率是dataloader函数中设置成了num_worker>0,将其改为0即可运行。虽然这样做,把多线程给毙了,导致数据加载变慢,但代码确实能运行。
后续验证num_worker设置为0该方法不可行。
原因猜测:构建容器时,shm-size设置错了,当时设为8了,应为8G,要不然以“df -h”查看shm仅为4k。
文章评论