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

更新信息

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}

检验安装

在终端输入:

$ R

R 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 locale

R 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 Corporation

Using 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/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容