deepin下R编译安装mxnet失败记
🕢

deepin下R编译安装mxnet失败记

Tags
R
机器学习
mxnet
最近, mxnet的官网发生了重大变更, 编译安装R的文章找不到了, 因此我试了很多次, 最后在github储存库找到了原始文档, 完成安装, 因此记录下步骤, 以免丢失, 浪费了很多时间, 也还是失败了
系统环境: deepin v20 beta, R4.0.1, gcc version 8.3.0 (Uos 8.3.0.2-1+deepin), mxnet 1.6.0

安装依赖

sudo apt-get update sudo apt-get install -y build-essential git ninja-build ccache libopenblas-dev libopencv-dev cmake

编译

克隆储存库并复制配置文件. 这个过程需要比较久的时间, 建议对git使用代理
git clone --recursive https://github.com/apache/incubator-mxnet.git mxnet cd mxnet cp config/linux.cmake config.cmake # or config/linux_gpu.cmake for build with CUDA
因为我编译的是cpu版本, 对配置也没有其他要求, 因此不需要修改配置, 直接编译
rm -rf build mkdir -p build && cd build cmake -GNinja .. cmake --build . --parallel 4
--parallel后面的参数为你所选择的CPU核心数量, 虽然选择越多会编译越快, 但也会因为内存不足而无法编译. 我的笔记本电脑有16G内存, 并行10核心编译会卡死, 因此我选择了较低的核心数量, 方便同时做其他事情.

安装

系统安装依赖
sudo apt-get update sudo apt-get install -y r-base-core r-cran-devtools libcairo2-dev libxml2-dev
其中 r-cran-devtools不是必要的, 因为 r-cran-devtools 只支持R3.5, 而此时我的R的版本已经达到4.0, 安装不了, 但并不影响我安装mxnet
R安装特定的包
R > install.packages("roxygen2")
完成之后, 在mxnet目录下, 输入下面的命令和R绑定
make -f R-package/Makefile rpkg
然而, 我得到了找不到R-package/Makefile这个文件的报错信息, 原来这个文件只在mxnet 1.6.0以上存在, 于是我又切换到1.7.x分支, 尝试完成绑定
输入命令后, 发现需要下载其他R的安装包, 于是我停止编译, 主动进入R安装相应的包(使用清华源会快一点), 然而, 我发现 igraph 这一包无法安装, 出现如下的报错信息
Error: package or namespace load failed for ‘igraph’ in dyn.load(file, DLLpath = DLLpath, ...): 无法载入共享目标对象‘/home/jerrywang/R/x86_64-pc-linux-gnu-library/4.0/00LOCK-igraph/00new/igraph/libs/igraph.so’:: libgfortran.so.4: 无法打开共享对象文件: 没有那个文件或目录
查了很多才发现是需要安装一下的fortran库的, 输入命令
sudo apt install libgfortran4
终于, 安装 igraph 成功, 于是安装好其他所需库后, 继续输入上面的命令和R绑定.
最后的结果还是出了问题, 安装失败, 原因归结于在安装串了版本, 于是我放弃了自己手动安装. 选择稳定的正式版安装

再次安装

下载mxnet 1.6.0 正式签名版源代码, 使用一键安装脚本一键安装. 手动把脚本内的 repo 换成国内镜像
你以为这就结束了? Wrong
正式签名版本的mxnet里面居然没有也没有R-package这一文件夹, 安装失败. 于是我选择再次尝试git源代码, 把git仓库中的 1.6.x分支的R-package 复制到此处, 继续安装,失败

总结

最终的结果是失败, 也许正是因为mxnet的整改, 我本不应该折腾, 想法太多了. 整改不保留原来的版本, 实在是太过于激进啊.
不得不说, mxnet的版本管理和文档是有问题的, 当初学者无所适从. 或者是说我的英文太差没找到地方. 是有一键安装脚本的, 在 setup-utils 里面.
然而, 我也发现了一些mxnet对自身建设的不足
  1. 新版的mxnet还没有正式发行, 编译安装指导已经变成了新的方式
  1. 更改网站没有dev的版本, 直接在正式的网站更改, 以至于一段时间内网站资料缺失严重, 给初学者以很大困难 (一般想不到到github找源文件)
不过, 这都是在慢慢变好的, 新版的mxnet不需要sudo权限就可以安装, 这样使得系统更加干净.
另一个bug是 新版的 cmake 相比于旧版的 make 虽然在编译速度上可能更快, 但这样同时也导致了更多的内存占用, 以至于电脑卡死, 给人造成很不爽的感觉
 
对个人的启示:
我不是写底层的, 我也不是debug的, 我是调包侠, 没有专业的指引就不要折腾. 虽然这样失去很多自主性, 但其实, 我是没能力折腾的 😕