如果你只想安装 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 里的一些文件
编译 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 等包
下面是我遇到的错误,如果你没有遇到可以跳过
安装 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
安装 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 的时候加上就可以了
安装 R yaml 时出现错误 error: ‘yaml_emitter_t {aka struct yaml_emitter_s}’ has no member named ‘indent_mapping_sequence’
原因:安装有旧版本的 yaml
解决办法:卸载旧版本的再重新安装即可,对 conda 环境还有一步需要处理 ,参考文章
安装 R imager 时提示没有 X11
解决办法:可以通过 conda 安装: conda install -c conda-forge xorg-libx11
有时候安装完成后还会提示 X11 not found but required, configure aborted
查看 config.log 后提示 … XauGetBestAuthByAddr …
原因:系统里的 libXau.so.6 版本太低了
解决办法:conda install -c conda-forge xorg-libxau
最后在 make rpkg 后出现错误,没有opencv2/opencv.hpp
解决办法:直接用 conda 安装 opencv 即可,conda install -c conda-forge opencv
基本上所有的坑都踩了,历时 2 天,太不容易了 QAQ
如果你还遇到了其他的问题欢迎留言或者私信,我看到了基本上都会回复的