基础环境

Windows10 操作系统
cuda11.0(注: 30系显卡cuda必须安装版本在11.0以上)
pytorch 1.7.1+cu110
torchvision 0.8.2+cu110
torchaudio 0.7.2

cuda安装

在创建环境之前需要确保你的cuda 安装正确,尤其DCNv2这个代码出现问题大多是出现在cuda和pytroch不匹配问题上,所以这一步很关键。
首先查看自己电脑配置匹配的cuda版本,可以通过win+R,输入cmd 打开终端窗口,输入命令nvidia-smi可以看到cuda版本号,如我的是11.7,就是说你安装的cuda版本不能超过11.7.(个人建议cuda版本不要装太高的,会导致很多不兼容问题。)

在这里插入图片描述
安装步骤可以参考这篇cuda安装步骤写的很详细。
安装成功后可以输入命令 nvcc -V 来查看自己的cuda版本。

pytorch包安装

在anaconda Prompt 中创建好虚拟环境后,下面进行最容易出错的步骤,进行pytorch的下载:(最好在官网按照自己 的cuda版本下载)
网址:pytorch
在我安装的时候很多博主说千万不要用conda install 来下载说是有很多坑,我就直接听取前人意见了,直接采用 pip 了:
![按照](https://img-blog.csdnimg.cn/2eafd348d5a64cf48f11750eae3c40a8.png

根据自己环境在官网选择即可,下面是pytorch=1.7.1+cu110 命令语句直接复制即可

pip install torch1.7.1+cu110 torchvision0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

下载完成后可以通过输入以下代码来检测torch是否安装成功。

python
import torch
torch.cuda.is_available()
torch.Tensor([1,2]).cuda()

如果成功安装,你将会看到以下内容:

在这里插入图片描述
如果出现其他结果,说明你的torch安装有问题,请仔细检查。

DCNv2代码下载

pytorch1.7.0以下版本的可以用老版的DCNv2:DCNv2
pytorch1.7和1.8版本的可以直接下载这个新版的:DCNv2
代码都是在github上的,大家可以直接用git:git clone --recursive 代码的https下载在想要的位置即可。
还需要提醒大家一句,如果你是为了编译 CenterTask 而编译DCNv2,请把 dcn_v2.py 从DCN内剪切到DCNv2 的主目录下,否则,在后序运行代码时会报 import DCN failed 的错误。
克隆代码后直接在 git bash 里cd到目标文件夹下,执行

./make.sh

如果顺利的话,幸运的你会看到下图:

在这里插入图片描述之后可以继续执行命令,进行测试是否好使:

python testcuda.py   # run examples and gradient check on gpu

然后幸运的你又会看到:

在这里插入图片描述
看到这个结果的恭喜你!!
完成了编译,就可以直接在CenterNet或者CentTrack代码里使用了!!

如果成功很容易,那么快乐也不会强烈,下面就开始苦逼的踩坑旅程

遇到的各种问题以及解决办法

  1. LINK : fatal error LNK1181: 无法打开输入文件“E:\github\DCNv2\build\temp.win-amd64-3.6\Release\github\DCNv2\DCN\src\vision.obj”
    error: command ‘D:\VS 2019\VC\Tools\MSVC\14.29.30133\bin\HostX86\x64\link.exe’ failed with exit status 1181

第一个问题就困扰我很久很久,有三种解决办法:
(1)重新新建虚拟环境,下载pytorch,配置好环境重新来过 可能是你按照网上改什么 command = [‘ninja’, ‘-v’]和添加 gbk 什么的导致pytorch损坏(有个博主是这么说的)不知道他说的对不对,还是有什么深层次的原因。但是我用的这个办法解决了。
(2)"-gencode=arch=compute_80,code=sm_80" 在DCNv2 目录中的setup.py中加此代码。原因可能是30系显卡算力不匹配导致的,如果不行的话可以将 80改成75

在这里插入图片描述
(3)如果你成功编译过一次,但是下次再编译出现这种情况,因为成功编译DCNv2后他会在你的虚拟环境中像 pip 下载的包一样可以使用 pip list 看到直接 pip uninstall DCNv2 卸载掉重新编译 ./make.sh 一下。

  1. raise RuntimeError(message) from e
    RuntimeError: Error compiling objects for extension

出现这个错误,大概率是你的 环境配置原因 比如 torch 版本与cuda版本不匹配cudatoolkit 与cuda 版本不匹配 等问题。一般上面还会有具体的原因,因为DCNv2编译时会出现大量语句,可能看不太清楚,可以再次 ./make.sh 之后会直观的看到错误。解决办法: 检查环境配置,确保无误

  1. error: identifier “THCudaBlas_SgemmBatched” is undefined

解决办法:降低pytorch版本,如果你之前是 pytorch 1.8 降到1.7。先删除现有torch 、torchvision、torchaudio 再按照上面介绍的pytorch下载方法重新下载包。(也可下载1.7.0)

pip install torch1.7.1+cu110 torchvision0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.htm

  1. nvcc fatal : Unsupported gpu architecture ‘compute_86’

解决办法: 参考错误1中解决方法(2),在DCNv2文件目录下的setup.py 中添加,可以将**80改为75**
"-gencode=arch=compute_80,code=sm_80"

上述是我基本上遇到的问题,还有一些没有记录下来,强烈建议大家,做好错误笔记,以防错误重复出现时,有花费时间去做重复的事,主要是问题似曾相识,明明自己遇到过,但你却又忘了怎么解决的感觉,实在是太痛苦啦!!
最后贴上 github 上DCNv2 源码的问题讨论区,如果有遇到其他问题的可以去那里碰碰运气 源码讨论区 记得看已经关闭的,如果你新提问的话,估计不太可能有人回复。再次抱怨一下30系显卡环境也太难了,环境兼容问题好多,实在难顶!
祝大家顺利编译成功,第一次发,写的不好请见谅。如果有帮助到你,请点点赞和收藏哦!!!
万分感谢,如何有问题欢迎评论区留言讨论。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐