想要在电脑上安装mxnet和caffe-ssd两种环境,刚开始在已经安装好的ubuntu18上安装了最新的cuda-10.0工具。然而这就是坑的开始。
(目前估计ubuntu18和cuda-10.0的组合有问题,因为有mxnet-cu100安装包及其网络说明、安装实例,应该是可以在ubuntu16上安装的,然而我自己也在ubuntu18上成功安装了mxnet-cu80,所以只能是当前mxnet不支持ubuntu18+cuda-10.0或者是我在其他环境配置方面出了难以发现的错误。)
在ubuntu18和cuda-10.0的组合上,caffe-ssd编译使用没什么问题,但mxnet不管从源码开始装还是输入
pip install mxnet-cu100
,安装成功后使用gpu模式的训练和测试都会报出cudaSuccess ( 30 v 0 )什么乱七八糟的一堆错误(反人类的log,根本看不出问题所在)。因此反复测试觉得上述组合只能使用mxnet的cpu模式,无法使用gpu模式(那这样有个卵用,还不如不装)。无奈忍痛卸载了cuda-10.0(caffe-ssd必然也要重新编译),保险起见重装了cuda-8.0。【此为填坑第一步】
重装后使用
pip install mxnet-cu80
命令重装了mxnet,这次终于可以使用gpu模式了。【填坑第二步】
重新编译caffe-ssd:【填坑第三步】
发现caffe-ssd因为boost问题失败,按源码重装boost1.66,
重新编译caffe-ssd又报出g++版本不支持超过5的问题(之前不知道装什么升级了g++),于是找方法将g++命令链接到g++-5版本,将gcc命令链接到gcc-5版本。
编译caffe-ssd又报出boost问题,我直接懵逼了,想各种找方法把boost卸载干净,使用命令sudo apt-get autoremove libboost-dev只能卸载命令安装的老版本,源码安装的boost直接在usr/local/include/boost和usr/local/lib中(或者usr/include/boost和usr/lib)删除相应文件就好了。。。。。(23333又找了好多博客才了解清除这点)
删除后重新用源码安装了boost1.66,嗯觉得这次用g++-5编译的boost也不会有问题了,结果编译caffe-ssd还是有问题,于是折腾了好久突然意识到,会不会是由于。。。,好的,输入
make clean
make -j4
清除之前的编译,完全会重新编译caffe-ssd,居然就可以了。。。。(想打人)
总结以上过程,解决问题步骤如下:
1. 重装cuda-8.0
2. pip命令安装mxnet-cu80(在ubuntu上用源码方式安装mxnet就是坑爹,时间超级久,编译成功了也不一定用的了gpu模式)
mxnet各个版本的依赖环境说明可以在网站:mxnet-cu查询中搜索到。
3. 测试cpu模式和gpu模式
caffe-ssd重新编译问题:
1. 将g++命令链接到g++-5版本,将gcc命令链接到gcc-5版本
2. 先make clean再make -j8重新编译caffe-ssd
3. 遇到依赖包出问题,用g++-5重新安装相关依赖包的合适版本
4. 重复步骤2.
希望各个ubuntu软件对不同版本的支持更丰富一些,不然这个框架要求一些依赖项版本高,另一些要求依赖项版本低,就会变得十分坑爹。安装cuda-10.0本身就是官方在坑人,我电脑先装了ubuntu18,不想重装,而cuda官方下载通道标明ubuntu18最低使用cuda-10.0。。。但是我强行装了cuda-8.0也ok。。。(无力吐槽,本来按照正确的思路一开始就应该装我常用的cuda-8.0)
另外,现在的博客互相抄太严重了,一搜索一大堆完全一个意思的文章,这文章太好写了吧。让人翻搜索结果累的要死,还找不到几篇有用的解决方法,往往是贴一堆命令和代码,根本不说原因。说不清楚原因的起码给出解决问题的逻辑和思路吧,整天看一堆上帝视角的文章,完全无法get到这么解决问题的合理性。