最近在复现GRNet这篇文章的源码,好多问题搞得心态有点爆炸,好在最后完美解决了,记录一下这个过程。
刚开始报错是:
d:\Anaconda3\envs\torch\lib\site-packages\torch\utils\cpp_extension.py:189: UserWarning: Error checking compiler version for cl: [WinError 2] 系统找不到指定的文件。
d:\Anaconda3\envs\torch\lib\site-packages\torch\utils\cpp_extension.py:189: UserWarning: Error checking compiler version for cl: ‘utf-8’ codec can’t decode byte 0xd3 in position 0: invalid continuation byte
参考下面这篇文章,发现是utf-8格式不支持python与c++的混合编译格式,
https://blog.csdn.net/tanmx219/article/details/100829920
下面是解决方法:
首先是call:
call “C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat”
然后:
将vs2019的C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64 添加到了环境变量中,以及cl.exe也添加到了环境变量中。
然后:
要修改D:\Anaconda3\envs\torch36\Lib\site-packages\torch\utils\cpp_extension.py里的编译编码格式,在cpp_extension.py里的180行左右,添加match = re.search(r’(\d+).(\d+).(\d+)’, compiler_info.decode(’ gbk’).strip()) [注意gbk前面有个空格]
现在编码格式正确了,但是新的问题来了:
error: command ‘C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc.exe’ failed 这是个什么玩意儿啊喂!!!
参考这里找到了一种我也不明白原理的方法:
https://github.com/NVIDIAGameWorks/kaolin/issues/135
it could resolve these 5 error. and for pytorch 1.4.0, additionally change 4 “constexpr” into “const” in
/python37/lib/site-packages/torch/include\torch/csrc/jit/script/module.h
pytorch change:
file1:
{your evn path}\Lib\site-packages\torch\include\torch\csrc\jit\argument_spec.h
example:
{C:\Miniconda3\envs\py36}\Lib\site-packages\torch\include\torch\csrc\jit\argument_spec.h(190)
static constexpr size_t DEPTH_LIMIT = 128;
change to -->
static const size_t DEPTH_LIMIT = 128;
file2:
{your evn path}\Lib\site-packages\torch\include\pybind11\cast.h
example:
{C:\Miniconda3\envs\py36}\Lib\site-packages\torch\include\pybind11\cast.h(1449)
explicit operator type&() { return *(this->value); }
change to -->
explicit operator type&() { return *((type*)this->value); }
现在:
将上述3个文件中进行修改之后完美运行了python setup.py install以及python setup.py develop,这里重点是修改上述三个文件,一定要耐着性子去修改。
然鹅,新的问题是:
fatal error C1083: 无法打开包括文件: “bits/stdc++.h”: No such file or directory
这个少了头文件的好解决一点:
参考这里解决了这个问题:
https://blog.csdn.net/weixin_44983545/article/details/107166104
接下来就是数据集的下载了,按照GitHub上面GRNet作者的流程跑就没有问题。
参考一下我的配置:CUDA10.1 // cudnn8.0.5 // python3.7.0 // pytorch1.4.0 // vs 2019 社区版,其他的按照requirement.txt配置就可以
我的文章里给出的是我在配置GRNet过程中遇到问题的全过程,具体解决方法可以参考链接里面,比我的要详细,复现这个GRNet还是比较吃力的,主要之前没有接触过混合编译,这一块的原理我也不是很明白,希望未来再去搞懂吧。