BMXNet-V2 building record

2021/3/26

部署别人的项目是真难,配环境配到头秃。以后我有了成果一定也整点难配的环境,一报还一报
这篇博客从时间上来说是乱序呢…
主要的参考文献是Ubuntu上的安装指南,问题是太年久失修了,里面有很多疏漏,所以还要配合BMXNet的README食用。

小小的总结——需要安装的集合

sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libatlas-base-dev libopenblas-dev
sudo apt-get install libopencv-dev
mkdir -p ~/utils
wget https://cmake.org/files/v3.12/cmake-3.12.3-Linux-x86_64.tar.gz
tar -zxvf cmake-3.12.3-Linux-x86_64.tar.gz
alias cmake="cmake-3.12.3-Linux-x86_64/bin/cmake"
rm cmake-3.12.3-Linux-x86_64.tar.gz
sudo apt-get install ninja-build
sudo apt-get install doxygen
#最后记得在创建的环境里安装gluoncv

一些稀碎的点

  • 用bash命令pwd可以查看当前路径。

  • 使用find命令来查找文件。这里有个很NB的博客详解了用法。

  • linux下压缩tar.gz格式的命令是tar -zcvf 目录文件名.tar.gz 目录文件名,解压命令是tar -zxvf 目录文件名.tar.gz,里面-zxvf是什么含义没有追究。

  • sudo vim /etc/login.user.allow可以增加准入用户。

  • 还用到了curl,安装步骤参考这篇博客。甚至在装curl的时候还发生了小插曲,出现了这个错误:

curl: error while loading shared libraries: libcurl.so.4: cannot open shared

解决方法是把缺少的libcurl.so.4给装回来:

sudo apt-get install libcurl4-openssl-dev

building C++ is hard


总算进行到了cmake .. -G Ninja的一步了!

首先出现的问题是MKLML下不下来:

这个问题尝试解决了很多次,包括在本地ssh config添加RemoteForward词条,但是添加了之后服务器也不走我的梯子,梯子流量一直没有变化。非常痛苦。上午(那时候注释掉了RemoteForward)用学校的网还可以下(虽然很慢),为什么下午删掉build文件夹重新cmake就下不下来了呢?更不用说一直没有卵用的梯子(为什么设置一样但是我不能通过梯子翻墙呢?甚至连搜索关键词都不知道,找到的都是远不相关的东西)。

2021/3/26-20:41 update:通过设置cmake代理解决了下载问题:

http_proxy=127.0.0.1:10809 https_proxy=127.0.0.1:10809 cmake .. -G Ninja

我本地端口不能转发服务器包实现翻墙的问题依然存在
可是下载完MKLML之后很快就出现了一个新的错误,找不到doxygen(本blog写于第一次ninja失败,删除build文件夹后重新cmake时,第一次cmake的时候确实也出现了这个错误,但是当时感觉生成了build文件就没有关系了,所以这可能是最后ninja失败的诱因(之一??)):

解决方法:

sudo apt-get install doxygen

讲道理,这东西没用过的人怎么知道要提前装啊,tutorial写得实在不详细..(是我 :leafy_green: 了)
将这次cmake的log存到了这里

然后删除build再重新cmake…这次确实found doxygen了,但是又出现了了新问题(以及其他非常多的重大问题):

-- Found Doxygen: /usr/bin/doxygen (found version "1.8.13") found components:  doxygen missing components:  dot

查了一下,这个issue提供了原因及解决方法,即使它不是BMXNet的issue:

sudo apt install graphviz

据说会让log变成:

Found Doxygen: /usr/bin/doxygen (found version "1.8.13") found components: doxygen dot 

试了一下,确实:

但是这远不是问题的全部,到目前为止,遇到的问题还有:

  1. MKLMK不能保证每次都能下下来(下不下来的情况居多,而且下得贼慢,我真怕它中间断掉)
  2. 会持续地出Could NOT find MKL (missing: MKL_INCLUDE_DIR MKL_RT_LIBRARY)的错误,无论能不能下下来MKLMK。这个错误甚至在BMXNet上有自己的issue,里面最后的解决方案是update之后移除了

Make CUDA Great Again

sxs-eva8上部署BMX-Net,但是到了下面的ninja这一步时:

# build the project
mkdir build && cd build
cmake .. -G Ninja
ninja

出现了错误。具体来看,从200+开始的build项目就开始打印不祥的log了,主要还是一些warning,在stackoverflow里查了下,说这种warning potentially produce wrong code而且debug起来会非常痛苦。但是事情到这里还算可以接受,因为从第570个build term开始出现了hard error,直接把build过程给崩掉了(大段的log被顶掉了,现在reproduce error只能出现这些最hard的问题了):

因为上面说找不到/usr/bin/ld:目录下的-lcuda,看到**cuda关键字就想会不会是CUDA出了问题。这个container开通以来一直没有跑过训练,极有可能环境配置有问题,而且/usr/bin/ld本身又是个二进制文件,这谁懂啊:

所以先解决最简单的问题,看看CUDA是不是健在。
尝试bashnvcc -V,果然出现了command not find的问题了。所以要设置环境变量,bashsudo vim /etc/profile(这里sudo权限很重要,不然profile只是个可读文件),在末尾添加:


export PATH=/opt/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/opt/cuda-10.0/lib64\
                                ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后source /etc/profile或者重新登一下eva就可以了。
重新测试nvcc -V,能正确输出log了:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

Driver lives matter

最后不知道为什么就把上面的大BOSS放倒了。
根据tc搜到的结果,这个现象可能是需要老版本的runtime cuda driver package但是新驱动里没有造成的。因此进行:

sudo apt-get install nvidia-367

删除原来的build文件夹,重新cmakeninja,尽管中间又出现了好多warning和failed,但总算没有fatal ones,build成功:

在eva10上的部署

吐了,真是一台服务器一个样…
首先遇到的问题是有很多

/sbin/ldconfig.real: /usr/local/cuda/lib64/libcuinj64.so.10.0 is not a symbolic link

这样的错误(出现在sudo apt-get阶段),似乎是软连接出了问题,没有处理。实在没法处理,出错的软连接实在太多了

接下来假装那些东西都装好了,直接build,出现了新的状况,后来发现是Cmake版本与CUDA版本mismatch的问题,CUDA 10.0需要Cmake版本为最新3.12,而eva10上的Cmake只有3.10(似乎和CUDA 9.x对应),所以先把原来的Cmake给删掉,再装新的:

sudo apt-get autoremove cmake