离线安装支持Intel MKL的R-3.6

时间:2022-07-22
本文章向大家介绍离线安装支持Intel MKL的R-3.6,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

R是一个常用于统计学问题和画图的免费软件(https://www.r-project.org/)。在线安装十分简单,本文主要介绍离线安装,且让R使用Intel编译器编译、调用Intel MKL库,以期提高计算速度。笔者测试安装和使用R时,所用Linux系统为CentOS 7,R版本为R-3.6.1,Intel编译器(含MKL)2018和2019都用过(分别在两台机器上)。

1. 下载R及其常用包

可以在官网(https://cloud.r-project.org/)或其镜像下载R的压缩包,笔者下载的是最新版R-3.6.1.tar.gz。R默认内含了一些包(或库),比如MASS包,可以通过命令行R,然后输入library(MASS)查看是否已安装;官网上还有许多他人写好的包可供使用,较为方便。点左侧Packages可显示出按字母排序的所有包,笔者下载了其中(根据自己所需挑选下载)

MatrixModels_0.4-1.tar.gz

Rcpp_1.0.2.tar.gz

RcppArmadillo_0.9.700.2.0.tar.gz

gtools_3.8.1.tar.gz

SparseM_1.77.tar.gz

quantreg_5.51.tar.gz

在成功安装R后我们再将其一个个安装进R目录。

2. 安装

R的安装需要一些系统库及其头文件(如libicudata.so, liblzma.so, zlib.h, bzlib.h等),为避免系统上缺失某些库/头文件,亦或去手动一个个检查、安装,笔者采取一劳永逸的办法:安装Anaconda Python“全家桶”(笔者用的是Anaconda3,装在/opt/anaconda3目录下),装完之后安装R所需的库和头文件在anaconda/include和anaconda/lib目录下都有。在~/.bashrc里写上环境变量

export PATH=/opt/anaconda3/bin:$PATH
export CPATH=/opt/anaconda3/include:$CPATH
export LD_LIBRARY_PATH=/opt/anaconda3/lib:$LD_LIBRARY_PATH

如果以前装过Anaconda,但是没写上面这三行全环境变量,只需将缺的补上即可。接着还要写一个系统库路径,

export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH

这样所需的库和头文件路径就都有了,执行source ~/.bashrc(或退出、重登陆)。然后依次执行以下四步即可

MKL="-L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -ldl "

./configure -prefix=`pwd` --with-blas="$MKL" --with-lapack 
--with-readline=no --with-x=no 
CFLAGS="-I/opt/anaconda3/include/" LDFLAGS="-L/opt/anaconda3/lib" 
F77=ifort FC=ifort CC=icc CXX=icpc

make

make install

第一步是指定Intel MKL的库路径。第二步`pwd`(`是键盘横排数字1左边的按键)表示安装于当前目录,可自行修改。--with-lapack后不用加参数,它也会使用--with-blas的"$MKL",--with-readline=no --with-x=no这两个是为了避免其使用系统上的readline和X11库及头文件。安装GNU readline库倒不难,但X11可能会依赖于其他库,笔者安装时就碰到了库依赖,反复折腾很是麻烦,于是直接写了no。CFLAGS和LDFLAGS分别指定编译所需头文件路径和库路径。最后四个参数指定使用Intel编译器。

完成后在~/.bashrc里写上R的环境变量

export PATH=/home/$USER/software/R-3.6.1/bin:$PATH

通过which R可以检查R所在的路径。最后安装R的常用包,这十分简单,格式都是R CMD INSTALL xxx.tar.gz:

R CMD INSTALL MatrixModels_0.4-1.tar.gz
R CMD INSTALL Rcpp_1.0.2.tar.gz
R CMD INSTALL RcppArmadillo_0.9.700.2.0.tar.gz
R CMD INSTALL gtools_3.8.1.tar.gz
R CMD INSTALL SparseM_1.77.tar.gz
R CMD INSTALL quantreg_5.51.tar.gz

不过要注意,上面这些包之间也可能有依赖关系。安装时若缺包会有提示应该先装哪个包。笔者展示的安装顺序是经过测试、不会有前后依赖问题的。

3. 可能的报错

(1)如果不利用anaconda3的头文件和库,可能会出现如下报错

checking whether zlib support suffices... configure: error: zlib library and headers are required

和/或

checking whether bzip2 support suffices... configure: error: bzip2 library and headers are required

和/或

configure: error: "liblzma library and headers are required"

分别表示系统缺zlib.h头文件,bzlib.h头文件和lzma.h头文件及其对应的库。解决方法:例如对于zlib.h,可去官网或其他镜像

https://www.zlib.net/zlib-1.2.11.tar.gz

下载。安装过程是标准的./configure, make, make install三部曲。若在configure步骤不指定--prefix安装目录,则默认安装至/usr/local/include/(头文件目录)和/usr/local/lib/(库文件目录)下。有root权限建议用root安装;若用普通用户安装,记得在~/.bashrc里写上环境变量(包括头文件和库文件)。如若解决了zlib的问题还报bzip2的错,说明系统缺bzlib.h头文件。可依次操作、安装所需库,略为繁琐。

(2)如果不指定--with-readline=no,有的机器可能出现如下报错

checking for rl_callback_read_char in -lreadline... no

configure: error: --with-readline=yes (default) and headers/libs are not available

说明当前系统缺readline库和相应头文件,可去官网

ftp://ftp.gnu.org/gnu/readline/readline-8.0.tar.gz

或其他镜像下载。安装过程和默认安装目录同(1)中所述。

(3)若不指定--with-x=no,有的机器可能会出现如下报错

configure: error: --with-x=yes (default) and X11 headers/libs are not available

说明系统缺X11库的部分头文件,可去官网

https://www.x.org/releases/X11R7.7/src/everything/libX11-1.5.0.tar.gz

或其他镜像下载。这个库安装过程中可能还会依赖于其他库、导致其他报错,比较繁琐,笔者就没有进一步尝试了。

Reference

https://software.intel.com/en-us/articles/using-intel-mkl-with-r