Microsoft|Microsoft R Open 简介与非 root 用户安装指南

TL; DR

# 1. 安装 Conda wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh source Miniconda3-latest-Linux-x86_64.sh # 2. 镜像源设置 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/ conda config --set show_channel_urls yes # 3. 安装 MRO conda install mro-base r-essentials

更新信息 【Microsoft|Microsoft R Open 简介与非 root 用户安装指南】2019.07.29 添加 TL; DR 章节,更新 conda r channel 国内镜像源
2019.04.04 文章发布
写在前面 我使用 Microsoft R Open(MRO) 已经有很长一段时间了,我向身边很多朋友推荐过 MRO,前些日子又和思考问题的熊聊起这个问题,于是想写几篇文章与大家分享一下我使用 MRO 的经验,包括 MRO 的介绍与无root权限时的安装方式、MRO 与 Base R 的区别、使用 MRO 中值得注意的问题。
1. Microsoft R Open(MRO) 是什么? 在 2015 年 Microsoft 对外发布了 Revolution R Open 第一个正式版本对应 Base R 3.1.2,2016 年这个项目更名为 Microsoft R Open(MRO),目前的最新版本是 3.5.1。根据官方的介绍 MRO 是一个基于 Base R 的加强的完全开源、免费的 R 发行版,与原有的 Base R 完全适配,可以使用所有的 R 包和脚本。加强的地方主要体现在性能和再生性上,支持 Windows、Linux 和 macOS。值得注意的是 MRO 的数学库用了 Intel? Math Kernel Library(MKL) 仅支持 Intel 的 CPU,AMD 的机器用不了 MRO。
2. 为什么我要使用 MRO 平常我们用 Base R 的时候就只会在单线程下运行,很少有人会去自己编译 R 然后链接上多线程的 BLAS/LAPACK 库。MRO 提供了一个基于 MKL 的多线程数学库,在进行矩阵运算的时候会自动并行。这意味着所有在 Base R 下开发的包含矩阵运算的包在 MRO 下不需要做特殊的修改就能获得并行能力,在多核心机器上会大幅节约程序运行时间,性能对比可以参考这个。MRO 实际上是通过对接对 CRAN 的每日备份的 Microsoft CRAN mirror 来保证可再生性的,你可以回溯到任意一个备份来安装旧版本的 R 包。实际上我并没有感受到太多的好处,这一部分特性可能企业应用会比较看重。除了加强的计算性能和可再生性,兼容性强且易用也是 MRO 的一大优势。官方提供了二进制安装包和一键安装脚本安装起来十分方便,MRO 作为 Base R 的完全兼容替代,可以搭配你喜欢的任意前端工具来使用,比如 VS Code,Jupyter,Rstudio 或者 Rstudio Server。
3. 无 root 权限时的安装方法 在自己的笔记本上安装以及有 root 权限的服务器上的安装方法请参照官方安装指南。这里我主要介绍两种在服务器上没有 root 权限时安装 MRO 的方法,一是通过 Conda,二是通过分析 rpm 包的安装脚本。软件在安装时需要 root 权限的原因基本都是需要往 root 权限的文件夹里面写一些可执行文件,链接库文件,配置文件等等,其实这些文件不一定非要写在 root 权限的默认文件夹里面,是完全可以通过配置环境变量等方法放在任意文件夹里的,这也就是 Conda 可以不用 root 权限安装很多软件的原理。
3.1. 使用 Conda 安装 (推荐)
Conda 中的 Channel r 已经默认是 MRO 而不是 Base R 了,可以参见这篇公告,可以通过conda create -n mro_env r-essentials来创建一个 MRO 的环境。如果你不想装那么多包也可以在 Miniconda 的基础上用conda create -n mro_env mro-base 来最小化安装一个 MRO 的环境。目前 r 这个 Channel 还没有国内镜像,只能从 anaconda 的官方镜像站拉取软件包,可能会有点慢。 r 的 Channel 在 TUNA 是有镜像的,只是没有在文档中体现出来。
另外附带一个简单的安装配置 Conda 的方法:
# 1. 安装 Conda wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh source Miniconda3-latest-Linux-x86_64.sh # 2. 镜像源设置 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/ conda config --set show_channel_urls yes # 更多 Channel 的镜像请查看 https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

3.2. 手工安装 RPM 包
MRO 官网提供的的安装包里面包含 rpm 和 deb 的两套二进制文件,install.sh 脚本会识别你的操作系统并安装上正确的程序,安装 rpm 或者 deb 的包是需要 root 权限的,但是我们可以通过解析 rpm/deb 中的安装脚本并进行修改,手工的执行这一过程绕开往需要 root 权限的文件夹里写东西的过程。这种方法对于大多数的 rpm/deb 包都是有效的,也可以推广应用到你想装的其他包。但是一般情况下 conda 是能够满足需求的,没有必要采用这种手工的方式。
# 1.下载并解压官方安装包 wget https://mran.blob.core.windows.net/install/mro/3.5.1/microsoft-r-open-3.5.1.tar.gz tar -xf microsoft-r-open-3.5.1.tar.gz cd microsoft-r-open/# 2. 查看 install.sh 内容 less install.sh # 分析发现脚本判断了当前操作系统然后依次安装(以 YUM 为例) # ${SCRIPT_DIR}/rpm/microsoft-r-open-mro*.rpm # ${SCRIPT_DIR}/rpm/microsoft-r-open-foreachiterators*.rpm # ${SCRIPT_DIR}/rpm/microsoft-r-open-mkl*.rpm# 3. 分别查看三个 rpm 包的安装脚本,重点看 postinstall scriptlet 部分的内容 rpm -qp --scripts rpm/microsoft-r-open-mro*.rpm rpm -qp --scripts rpm/microsoft-r-open-foreachiterators*.rpm rpm -qp --scripts rpm/microsoft-r-open-mkl*.rpm # 分析发现 mro* 包是在往 /usr/bin/ 下面写链接文件 # foreachiterators* 没有做任何事情 # mkl* 备份了原有的 R/lib/*.so 文件,并拷贝了一套新的动态链接库文件覆盖到了安装路径中# 4. 手工解压 rpm 包 rpm2cpio rpm/microsoft-r-open-mro*.rpm |cpio -idmv rpm2cpio rpm/microsoft-r-open-foreachiterators*.rpm |cpio -idmv rpm2cpio rpm/microsoft-r-open-mkl*.rpm |cpio -idmv# 5. 手工执行 postinstall scriptlet INSTALL_PREFIX="./opt/microsoft/ropen/3.5.1/" # 从前面解压的路径可以看出来 mkdir -p ${INSTALL_PREFIX}/lib64/R/backup/lib mv ${INSTALL_PREFIX}/lib64/R/lib/*.so ${INSTALL_PREFIX}/lib64/R/backup/lib cp ${INSTALL_PREFIX}/lib64/R/backup/lib/libR.so ${INSTALL_PREFIX}/lib64/R/lib cp ${INSTALL_PREFIX}/stage/Linux/bin/x64/*.so ${INSTALL_PREFIX}/lib64/R/lib# 6. 拷贝解压完的目录到指定安装位置 MRO_HOME="~/mro" cp ${INSTALL_PREFIX} ${MRO_HOME}# 7. 设置环境变量 # 注:R_HOME 会影响含 C++ 的 package 编译安装时寻找的头文件和链接库,详见 ${INSTALL_PREFIX}/lib64/R/etc/Makevars。 export R_HOME=${MRO_HOME}/lib64/R export PATH=${MRO_HOME}/bin:${PATH}

检验安装 在终端输入:
$ RR version 3.5.1 (2018-07-02) -- "Feather Spray" Copyright (C) 2018 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit)R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details.Natural language support but running in an English localeR is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications.Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R.Microsoft R Open 3.5.1 The enhanced R distribution from Microsoft Microsoft packages Copyright (C) 2018 Microsoft CorporationUsing the Intel MKL for parallel mathematical computing (using 16 cores).Default CRAN mirror snapshot taken on 2018-08-01. See: https://mran.microsoft.com/.

如果回显中除了 Base R 正常启动时的回显还包括最后 Microsoft R Open 这一段就说明安装成功了。下一篇计划写一写 MRO 与 Base R 的区别和一些注意事项。
参考链接
  1. Microsoft R Open 官方网站:https://mran.microsoft.com/open/
  2. Microsoft R Open 官方安装指南:https://mran.microsoft.com/documents/rro/installation/
  3. Microsoft R Open 与 Base R 性能对比:https://mran.microsoft.com/documents/rro/multithread
  4. Introducing Microsoft R Open as Default R for Anaconda Distribution: https://www.anaconda.com/introducing-microsoft-r-open-as-default-r-for-anaconda-distribution/

    推荐阅读