前言:
-我要跑的代码要求mmcv版本在1.1.4-1.3.0之间,但是由于mmcv开发者最开始没打算支持win,win版本的mmcv只有1.1.3-1.1.5之间,(下载链接:https://download.openmmlab.com/mmcv/dist/index.html) 最近又放出了1.4.0往后window的版本,(下载链接:https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html)想用原作者版本1.2.7废了我好大功夫。想下载直接去搜索带win的即可,要对应当前环境中的cuda和torch版本号。本文包括我在四台电脑上跑了将近一周的辛酸泪(segformer代码),记录一下,配环境真是麻烦了。
总结要点:
1.mmcv和mmcv-full的区别,一个是精简版一个是完整版,不要同时装俩两个,会无法识别。
2.安装mmcv的时候要在其对应torch和cuda版本的链接下进行下载,如果重新下载记得别使用cache。
3.win下安装指定版本,需要对torch中部分配置进行修改。
**
**
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
pip install mmcv-full==1.x.x -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html
1.x.x表示你想要的版本号,cu_version目前环境中使用的cuda版本号,torch_version为你目前环境中的torch版本。例如我用的pytorch1.8和cuda11.1,想要用1.3.0的版本,使用下方命令。
–no-cache-dir为了防止使用下载好的缓存,可能是其他cuda或torch版本mmcv安装包,导致重装还是失败。
pip --no-cache-dir install mmcv-full==1.1.5 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.7.1/index.html
一定要对应好cuda和torch版本,否则即使import不会报错,在后期的运行成中也会出现一些维度不同的问题。我当时在pred_label = pred_label[mask] 这行报错IndexError:too many indices for array:array is 2-dimensional, but 3 were indexed…反正对上号以后没错了。
**
**
由于开发者目前官方放出的win版本mmcv只有1.1.3-1.1.5和1.4.0往后的版本(下载链链接见最上方),如果要使用这些版本就直接下载下来,然后本地pip轮子即可,步骤要求与linx相同。
想要使用指定版本的mmcv需要先去git上扒拉出来历史版本,然后本地编译。只看编译过程的跳过本段
-------------------------------------------如何获得历史版本的mmcv----------------------------------------
a. 先进入开源mmcv的git地址(https://github.com/open-mmlab/mmcv),下图方法进入修改记录。
b. 找到需要的版本的提交,并进入其完整版本。
c.即可保存,保存的压缩包名称是mmcv+遗传序号,应该是历史版本的记录方式,解压后改成mmcv即可。
--------------------------------------------如何windows本地编译-----------------------------------------
否则会报错error: Microsoft Visual C++ 14.0 or greater is required
1.2用everything搜出来cl.exe并添加cl.exe到环境变量(其实这步骤不知道有没有用但是我照做了…)
我的路径是自己的路径是
D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x64
win+R输入cmd出现如下界面表示安装成功
2. 对本地的torch部分文件进行修改,参考这位大神
https://blog.csdn.net/qq_41860138/article/details/110430590
Way1:运行脚本,找到你的conda或者virtualenv环境下的Lib/site-packages文件夹,修改地址并直接运行脚本
#!/bin/bash
SITE=/mnt/c/Users/thomas.jungblut/AppData/Local/Programs/Python/Python37/Lib/site-packages
sed -i.bak -e 's/CONSTEXPR_EXCEPT_WIN_CUDA/const/g' "${SITE}/torch/include/torch/csrc/jit/api/module.h"
sed -i.bak -e 's/return \*(this->value)/return \*((type\*)this->value)/g' "${SITE}/torch/include/pybind11/cast.h"
sed -i.bak '/static constexpr Symbol Kind/d' "${SITE}/torch/include/torch/csrc/jit/ir/ir.h"
Way:找到对应的文件一个一个修改
#在这里插入代码片`需要手动修改的三个源文件
/torch/include/torch/csrc/jit/api/module.h
将这个头文件中 CONSTEXPR_EXCEPT_WIN_CUDA 全部替换为const
/torch/include/pybind11/cast.h
将这个头文件中 explicit operator type&() { return *(this->value);} 改为 explicit operator type&() { return *((type*)this->value);}
/torch/include/torch/csrc/jit/ir/ir.h
将这个头文件中的两处 static constexpr Symbol Kind 语句注释掉
cd C:\Users\xxx\Desktop\bb\postgraduate\2022\code\mmcv
pip install -r requirements.txt
3.2进行编译
编译前需要在prompt中进行一些设置,官方教程要求管理员模式下中设置,地址和算力都要与自己电脑相匹配。官方教程见https://mmcv.readthedocs.io/en/latest/get_started/build.html#build-on-windows
$env:CUDA_HOME="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1"
$env:MAX_JOBS=8
$env:MMCV_WITH_OPS=1
$env:TORCH_CUDA_ARCH_LIST="7.5"
python setup.py build_ext # 如果成功, cl 将会自动弹出来编译 flow_warp
python setup.py develop # 记得安装,否则不能整个环境使用
pip list # 检查是否安装成功
显示生成代码成功即可。
主要可能问题
-vs支持没安装好
-pytorch的cuda支持没安装好
-mmcv的版本没有和环境中的pytorch和cuda版本对应
-windows环境下的pytorch部分源码没有修改
码字真辛苦啊祝大家都能配置成功