【DCNv2踩坑记录】Windows10 + RTX3060 + cuda11.0 + pytorch1.7.1成功编译
【DCNv2踩坑记录】 windows10 + RTX3060 + cuda11.0 + pytorch1.7.1 成功编译
基础环境
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 了:
根据自己环境在官网选择即可,下面是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代码里使用了!!
如果成功很容易,那么快乐也不会强烈,下面就开始苦逼的踩坑旅程!
遇到的各种问题以及解决办法
- 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
一下。
- raise RuntimeError(message) from e
RuntimeError: Error compiling objects for extension
出现这个错误,大概率是你的 环境配置原因 比如 torch 版本与cuda版本不匹配,cudatoolkit 与cuda 版本不匹配 等问题。一般上面还会有具体的原因,因为DCNv2编译时会出现大量语句,可能看不太清楚,可以再次 ./make.sh
之后会直观的看到错误。解决办法: 检查环境配置,确保无误。
- 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
- nvcc fatal : Unsupported gpu architecture ‘compute_86’
解决办法: 参考错误1中解决方法(2),在DCNv2文件目录下的setup.py 中添加,可以将**80改为75**
"-gencode=arch=compute_80,code=sm_80"
上述是我基本上遇到的问题,还有一些没有记录下来,强烈建议大家,做好错误笔记,以防错误重复出现时,有花费时间去做重复的事,主要是问题似曾相识,明明自己遇到过,但你却又忘了怎么解决的感觉,实在是太痛苦啦!!
最后贴上 github 上DCNv2 源码的问题讨论区,如果有遇到其他问题的可以去那里碰碰运气 源码讨论区 记得看已经关闭的,如果你新提问的话,估计不太可能有人回复。再次抱怨一下30系显卡环境也太难了,环境兼容问题好多,实在难顶!
祝大家顺利编译成功,第一次发,写的不好请见谅。如果有帮助到你,请点点赞和收藏哦!!!
万分感谢,如何有问题欢迎评论区留言讨论。
更多推荐
所有评论(0)