Linux 下 R 安装 mxnet (每个坑都踩,哭了)

如果你只想安装 mxnet 库也可以参考

目前为止我见过最恶心最恶心的软件包,没有之一,先上一个安装成功的图看到这个我直接哭了,真的

先吐槽一波,想直接看过程的往下翻谢谢

点击官网看了一下 Linux 下只能通过源码编译,当你兴致冲冲的看完 build from source 后准备看看如果生成 R 包,https://mxnet.apache.org/get_started/build_from_source#install-the-mxnet-package-for-r ,好家伙,链接都不带跳转一下的,好吧,那我先做第一步好了。从官网下载好 apache-mxnet-src-1.7.0-incubating.tar.gz 之后

$ cd apache-mxnet-src-1.7.0-incubating
$ mkdir _build
$ cmake ..

一顿操作猛如虎,看看这报错惨不忍睹
好吧,再找找别的教程吧
终于在 github 上找到了一个大佬的教程 ,还是中文的https://github.com/devbib/mxnet/blob/master/docs/zh/get_started/amazonlinux_setup_zh.md
没想到直接 make -j 24 就完事了,那么请问官网上写的是什么玩意???

没办法,只能继续装了

$ cp make/config.mk .
$ make -j 4

咔咔修改完配置后,一 Make 为什么提示我缺少这么多文件?不好意思,官网中还有一行小字

$ git clone --recursive https://github.com/apache/incubator-mxnet mxnet

请问你们为什么不直接写这个?让大家去下载压缩包确实没明白,那么为啥不把里面文件都给全了?我真滴佛了。

你以为到这里就完了?再看大佬的教程

$ cd R-package
$ Rscript -e "library(devtools); library(methods); options(repos=c(CRAN='https://cran.rstudio.com')); install_deps(dependencies = TRUE)"
$ cd ..
$ make rpkg

请问你们检查过你们提供的东西吗,有 R-package 这个文件夹吗??最气的你 Makefile 里也没有写 rpkg 的规则,我是真滴服。

还得含泪安装,下面的详细教程 T…T

下载

第一大坑就是下载,按着下面的步骤即可

$ git clone https://github.com/apache/incubator-mxnet.git--recursive 

第一个 git 一定要加上 –recursive 否则会缺失很多很多包

有时候会缺少一些文件夹,原因是作者在 .gitignore 中添加了这些文件夹
如果你使用的是 chrome 浏览器,可以添加插件 gitZip for github 然后直接双击下载即可

其他浏览器可以自行百度一些解决办法

这样 incubator-mxnet 里面的内容才完整,R-package 是最后安装到 R 里的一些文件

编译 libmxnet.so

编译 mxnet 需要 LAPACK,请自行安装 ,可以参考我之前写的文章

先编译好 libmxnet.so 库文件,最后再安装到 R 里

$ cd  incubator-mxnet
$ cp ./make/config.mk .
$ vim config.mk
# 在 USE_LAPACK 中添加上你的 lapcak 文件夹
-L/path/to/lapack-3.8.0
$ vim Makefile
# 找到 ifeq ($(USE_LAPACK), 1),在下方的 CFLAGS 中添加上 CBLAS 的 include 文件夹
CFLAGS += -DMXNET_USE_LAPACK -I/path/to/lapack-3.8.0/CBLAS/include
# 随后在 endif 后添加一句
LDFLAGS += -lgfortran
# 在最下方添加上编译 rpkg 的方法,在 1.6.x 版本中可以看到, 1.7.0 中不知道为什么作者将其移除了(黑人问号脸.jpg)
rpkg:
        mkdir -p R-package/inst/libs
        cp src/io/image_recordio.h R-package/src/image_recordio.h
        cp -rf lib/libmxnet.so R-package/inst/libs
        if [ -e "lib/libdnnl.so.1" ]; then \
                cp -rf lib/libdnnl.so.1 R-package/inst/libs; \
        fi
        if [ -e "lib/libtvm_runtime.so" ]; then \
                cp -rf lib/libtvm_runtime.so R-package/inst/libs; \
        fi
        mkdir -p R-package/inst/include
        cp -rl include/* R-package/inst/include
        Rscript -e "if(!require(devtools)){install.packages('devtools', repo = 'https://cloud.r-project.org/')}"
        Rscript -e "if(!require(roxygen2)||packageVersion('roxygen2') < '6.1.1'){install.packages('roxygen2', repo = 'https://cloud.r-project.org/')}"
        Rscript -e "library(devtools); library(methods); options(repos=c(CRAN='https://cloud.r-project.org/')); install_deps(pkg='R-package', dependencies = TRUE)"
        cp R-package/dummy.NAMESPACE R-package/NAMESPACE
        echo "import(Rcpp)" >> R-package/NAMESPACE
        R CMD INSTALL R-package
        Rscript -e "require(mxnet); mxnet:::mxnet.export('R-package'); warnings()"
        Rscript -e "devtools::document('R-package');warnings()"
        R CMD INSTALL R-package

cblas 的库和 -lgfortran 一定要加,要不然后面报错之后需要重新编译

你也可以自由的修改 config.mk 文件,比如支持 gpu ,cuda 加速等等

编译 mxnet 库的时间很长,请务必加上这两处,最后的规则可以等编译完之后再加也可以

$ make -j 8
# 亲测,如果满核编译会报错,需要手动停止后继续编译,我的处理器是 24 核心,使用 -j 8 一般不会报错
$ ll lib/libmxnet.so

编译完成后查看一下是否生成了 libmxnet.so 文件,接下来还有一些操作需要手动执行

$ cd include 
$ rm dlpack  dmlc mshadow nnvm
$ cd mkldnn
$ rm dnnl.h  dnnl.hpp  dnnl_types.h mkldnn_dnnl_mangling.h  mkldnn.h  mkldnn.hpp  mkldnn_types.h  mkldnn_version.h

将所有的软链接都删除,再重新使用全路径链接
原来的链接写的是相对路径,等后面使用 cp 操作时会变红,导致无法使用

$ Rscript -e "install.packages('devtools', repo = 'https://cran.rstudio.com')"
$ cd R-package
$ Rscript -e "library(devtools); library(methods); options(repos=c(CRAN='https://cran.rstudio.com')); install_deps(dependencies = TRUE)"
$ cd ..
$ make rpkg

如果报错 … MXSetProfilerConfig(int, const char* const, const char* const) 什么什么的,执行下面的操作

$ vim R-package/src/mxnet.cc
# 修改第27行
MX_CALL(0);

其中在执行 Rscript -e "library(devtools); library(methods); 时,会要求安装 tiff,imager 等包
下面是我遇到的错误,如果你没有遇到可以跳过

  1. 安装 R tiff 时提示没有 tiff.h ,我一开始还在想为什么安装你自己缺少你自己的头文件,原来是有一个另外的库叫做 tiff (拜托,正常人能想到吗…)
    解决办法:上网下载 tiff_0.1-6.tar.gz 并安装,configure 后 make 即可。

    如果是在 conda 虚拟环境中则需要将安装好的 libtiff.so 移动到 /path/to/conda/lib ,include 文件夹中的文件移动到 /path/to/conda/include

  2. 安装 R tiff 时会提示找不到 -ljpeg
    解决办法:安装 libjepg-turbo,

    $ git clone https://github.com/libjpeg-turbo/libjpeg-turbo.git
    $ cd libjpeg-turbo
    $ mkdir _build && cd _build
    $ cmake .. -DCMAKE_INSTALL_PREFIX=/path/to/install -G"Unix Makefiles" -DANDROID_ABI=x86_64
    
    

    可能会出现的错误:

    jccolext-avx2.asm:290: error: parser: instruction expected
    jccolext-avx2.asm:292: error: symbol `vperm2i128’ redefined

    原因:没有添加 -G"Unix Makefiles" -DANDROID_ABI=x86_64
    解决办法:在 cmake 的时候加上就可以了

  3. 安装 R yaml 时出现错误 error: ‘yaml_emitter_t {aka struct yaml_emitter_s}’ has no member named ‘indent_mapping_sequence’
    原因:安装有旧版本的 yaml
    解决办法:卸载旧版本的再重新安装即可,对 conda 环境还有一步需要处理 ,参考文章

  4. 安装 R imager 时提示没有 X11
    解决办法:可以通过 conda 安装: conda install -c conda-forge xorg-libx11

  5. 有时候安装完成后还会提示 X11 not found but required, configure aborted
    查看 config.log 后提示 … XauGetBestAuthByAddr …
    原因:系统里的 libXau.so.6 版本太低了
    解决办法:conda install -c conda-forge xorg-libxau

  6. 最后在 make rpkg 后出现错误,没有opencv2/opencv.hpp
    解决办法:直接用 conda 安装 opencv 即可,conda install -c conda-forge opencv

完结,撒花

基本上所有的坑都踩了,历时 2 天,太不容易了 QAQ
如果你还遇到了其他的问题欢迎留言或者私信,我看到了基本上都会回复的

猜你喜欢

转载自blog.csdn.net/qq_32115939/article/details/108829524
今日推荐