maskrcnn安装及遇到的各种问题

安装过程

1、创建虚拟环境

conda create -n maskrcnn_benchmark python=3.7
conda activate maskrcnn_benchmark

2、安装各种依赖包

conda install ipython
pip install ninja yacs cython matplotlib tqdm opencv-python

3、安装PyTorch

首先查看自己电脑cuda的版本,这里有一个小细节,命令行中输入nvidia-smi 显示的CUDA 版本与输入nvcc --version显示的CUDA版本不一致
maskrcnn安装及遇到的各种问题_第1张图片
nvcc --version显示结果

查过资料显示:其实是因为CUDA 有两种API,分别是 运行时 API 和 驱动API,即所谓的 Runtime API 与 Driver API。nvidia-smi显示的是驱动API,而nvcc --version显示的是运行API。主要是因为项目需要安装低版本CUDA然后加入环境变量后就会出现这个问题,按照我的理解现在运行程序使用的是CUDA10.1
  PyTorch官网,前面查到的CUDA版本选择pytorch版本,如果没有可以点Previous pyTorch Versions,这里面有更多的更早的版本。

conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch

然后安装完成后可以测试是否安装成功

python
>>>>import torch
>>>>import torchvision

4、安装pycocotools

新建一个文件夹用来放pycocotools包、apex包和maskrcnn_benchmark项目(我这里是E:\Project\Skin\maskrcnn)

E:#用来切换盘
cd E:\Project\Skin\maskrcnn
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
python setup.py build_ext install

这里我遇到了错误

cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”
error: command 'D:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2

当时找到了一个大佬的解决方案:https://blog.csdn.net/weixin_41010198/article/details/94053130,供大家参考
后来研究maskrcnn代码时发现,官方的install.md里面给了一个解决方案

将
extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'],
换成
extra_compile_args={'gcc': ['/Qstd=c99']},

maskrcnn安装及遇到的各种问题_第2张图片
我没试过,大家可以试试。

当然,后面我将visual studio换成vs2015后就没这些问题了。

5、安装apex

cd ../../
git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install --cuda_ext --cpp_ext

这里遇到问题RuntimeError: Error compiling objects for extension,搜索到一个说法是去掉后面的--cuda_ext --cpp_ext就可以了,不知所云。
后来忍痛去github上读英文了,看到了一个解决方案:
Please try my forked version: https://github.com/kezewang/apex.
Moreover, please refer to the following link to fix Windows MSVC Compatibility
facebookresearch/pytorch3d#10
It costs me a whole day to address all the issues.

大致就是去这里,下载人家改了的apex包,然后调整Windows MSVC Compatibility。

记录一下我改的部分:下载完成后python setup.py install --cuda_ext --cpp_ext,然后出现 D:/Anaconda3/envs/maskrcnn_benchmark/lib/site-packages/torch/include\torch/csrc/jit/api/module.h(483):error: a member with an in-class initializer must be constmaskrcnn安装及遇到的各种问题_第3张图片
进入到D:/Anaconda3/envs/maskrcnn_benchmark/lib/site-packages/torch/include\torch/csrc/jit/api/module.h,将static constexprstatic CONSTEXPR_EXCEPT_WIN_CUDA全部换成字段 static const。再次运行

碰到d:\anaconda3\envs\maskrcnn_benchmark\lib\site-packages\torch\include\pybind11\cast.h(1449): error: expression must be a pointer to a complete object type将这一行的explicit operator type&() { return *(this->value); } 改为 explicit operator type&() { return *((type*)(this->value)); }

再次运行即可成功。
在这里插入图片描述

6、安装maskrcnn

cd ../
git clone https://github.com/facebookresearch/maskrcnn-benchmark.git
cd maskrcnn-benchmark

6.1、安装相应的包

pip3 install -r requirements.txt

6.2、安装tensorflow

如果使用直接安装速度相对较慢,采取清华大学的镜像会提高速度。
GPU版本:

pip install tensorflow-gpu==2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install tensorflow==2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

注明:tensorflow2.2, 后面的数字是任意一个你想安装的tensorflow版本

6.3、安装setup.py

网上有两种说法:

python setup.py build develop

python3 setup.py install

我使用的第一种,搜索中说两种的区别是:
python setup.py install:主要是安装典型第三方包,这种包比较稳定,不再需要你去编辑、修改或是调试。
python setup.py develop:当你安装一个包后,这个包需要你不断修改,这样你就不得不重新安装,这时就采用这种安装方法。

存在问题:

中间安装了vs2015、2017、2019、2022;cuda10.0.130、10.1.105、10.1.243;gcc9、7.1.0;pytorch1.所以很多错大家可能不会报,但是还是记录一下吧。

1、cuda环境降级时的配置与安装

具体教程可以参考这两篇博文:CUDA、CUDNN在windows下的安装及配置
Windows下CUDA多版本共存

2、gcc版本不合适,安装低版本

安装低版本gcc:网站
可以选择7.n版本
安装cuda开发库之后,使用gcc编译会可能会报错要求gcc版本,如下表

CUDA version max supported GCC version
11.1, 11.2, 11.3 10
11 9
10.1, 10.2 8
9.2, 10.0 7
9.0, 9.1 6
8 5.3
7 4.9
5.5, 6 4.8
4.2, 5 4.6
4.1 4.5
4.0 4.4

3、Visual Studio版本问题

在配置环境过程中从安装apex到maskrcnn-benchmark的python setup.py build develop总是报各类错误,网上说是19的版本太高了,Windows需要MicrosoftBuild Tools 2015,仅供大家参考,我也不是很清楚,反正我把2019、2022全删除,然后换成2015,就可以了。

中间遇到了这个问题

fatal error: #error: -- C1189: unsupported Microsoft Visual Studio version!

查到的原因是CUDA版本需要与微软的C/C++编译器版本匹配,解决方法是找到你自己安装CUDA路径下的这个文件,我的如下:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\crt\host_config.h
打开后定位到这一行,修改 ‘_MSC_VER >=’ 后面的数值

maskrcnn安装及遇到的各种问题_第4张图片
至于_MSC_VER,它是微软公司推出的C/C++编译器在ANSI/ISO C99标准之外扩展的宏定义,用来定义当前微软公司自己的编译器的主版本。因为Visual Studio更新很快,其值不断更新,导致CUDA跟不上Visual Studio的步伐,所以出现上述错误。具体VS版本对应的_MSC_VER值可参考微软官方的资料

下表是 Visual Studio version 与 _MSC_VER 对应关系:

Visual Studio version _MSC_VER
Visual Studio 6.0 1200
Visual Studio .NET 2002 (7.0) 1300
Visual Studio .NET 2003 (7.1) 1310
Visual Studio 2005 (8.0) 1400
Visual Studio 2008 (9.0) 1500
Visual Studio 2010 (10.0) 1600
Visual Studio 2012 (11.0) 1700
Visual Studio 2013 (12.0) 1800
Visual Studio 2015 (14.0) 1900
Visual Studio 2017 RTW (15.0) 1910
Visual Studio 2017 version 15.3 1911
Visual Studio 2017 version 15.5 1912
Visual Studio 2017 version 15.6 1913
Visual Studio 2017 version 15.7 1914
Visual Studio 2017 version 15.8 1915
Visual Studio 2017 version 15.9 1916
Visual Studio 2019 RTW (16.0) 1920
Visual Studio 2019 version 16.1 1921
Visual Studio 2019 version 16.2 1922
Visual Studio 2019 version 16.3 1923
Visual Studio 2019 version 16.4 1924
Visual Studio 2019 version 16.5 1925
Visual Studio 2019 version 16.6 1926
Visual Studio 2019 version 16.7 1927

可以看到 1920 正好对应了Visual Studio 2019的第一个版本,为了“一劳永逸”,可以将文件中的那个值修改的很大,如上图中改为 2000,这样很长一段时间内不会再出现这个问题。

我选择安装 Visual Studio 2015。

这里当时还有一个问题,如果不卸载2019,不知道是因为2019的版本更高还是因为我一开始先安装的2019,安装apex时总是给我弹:需要安装13-17之间的版本。我嫌麻烦,懒得查怎么改才能让他默认调用2015的环境,直接把俩新版本给删除了。

安装apex exit status2

error C3203: “templated_iterator”: 未专用化的 类 模板 不能用作 模板 变量,该变量属于 模板 参数“_Ty1”,应为 real 类型
error: command ‘C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin\nvcc.exe’ failed with exit status 2

解决方案:https://github.com/pytorch/pytorch/issues/19156 给出一种方案是检查是不是vs2017升级到了最新版,2015应该是会有问题的。

安装apex时.报error: static assertion failed with “You’ve instantiated std::aligned_storage with an extended alignment (in other words, Align > alignof(max_align_t)).

D:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/include\type_traits(1271): error: static assertion failed with “You’ve instantiated std::aligned_storage, Align> with an extended alignment (in other words, Align > alignof(max_align_t)). Before VS 2017 15.8, the member type would non-conformingly have an alignment of only alignof(max_align_t). VS 2017 15.8 was fixed to handle this correctly, but the fix inherently changes layout and breaks binary compatibility (only for uses of aligned_storage with extended alignments). Please define either (1) _ENABLE_EXTENDED_ALIGNED_STORAGE to acknowledge that you understand this message and that you actually want a type with an extended alignment, or (2) _DISABLE_EXTENDED_ALIGNED_STORAGE to silence this message and get the old non-conformant behavior.

大概意思就是:VS2017 15.8版本修复了老版本有关对齐存储部分缺陷,但修复本身也有缺陷。如果不想编译时报这个问题,就在预编译时定义一个宏 _ENABLE_EXTENDED_ALIGNED_STORAGE 或者 _DISABLE_EXTENDED_ALIGNED_STORAGE(博主的理解是按照修复后的逻辑处理就定义带enable那个,按照老版本的逻辑处理就定义带disable那个)

修改 setup.py (134行) version_dependent_macros = version_ge_1_1 + version_ge_1_3 + version_ge_1_5 + ['-D_ENABLE_EXTENDED_ALIGNED_STORAGE']
在这里插入图片描述

安装apex时找不到rc.exe

LINK : fatal error LNK1158: 无法运行“rc.exe”
error: command ‘D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe’ failed with exit status 1158
在这里插入图片描述
从此路径C:\Program Files (x86)\Windows Kits\8.1\bin\x86复制

rc.exe rcdll.dll
maskrcnn安装及遇到的各种问题_第5张图片

两个文件

到另一个路径下

D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
maskrcnn安装及遇到的各种问题_第6张图片

apex安装完成后找不到amp

AttributeError: module ‘torch.cuda’ has no attribtue ‘amp’ 问题解决
之前没有使用过apex,所以使用apex的时候,发现报了一条错误。

AttributeError: module 'torch.cuda' has no attribtue 'amp'

经过不断的尝试,终于找到了问题的原因。原因在于torch.cuda.amp是在torch1.6版本之后才引入的,而我所使用的是torch1.4版本,自然就会报错。
maskrcnn安装及遇到的各种问题_第7张图片

安装maskrcnn_benchmark时报错

deform_conv_cuda.cu: error: identifier "AT_CHECK" is undefined ;
deform_pool_cuda.cu: error: identifier "AT_CHECK" is undefined ;

找到这两个文件,将所有的AT_CHECK改为TORCH_CHECK即可

你可能感兴趣的:(pytorch,深度学习,python)