布雷特·克拉默

目录

R中更快的BLAS

R使用BLAS(基本线性代数子程序)和LAPACK(线性代数程序包)库进行线性代数操作。由于默认库尚未完全优化,对于依赖线性代数计算的代码,通过切换到不同的BLAS库,您可以看到速度大幅提高。传统的开源解决方案阿特拉斯,数学库(不再开发),以及最近OpenBLAS(开放BLAS)(转到BLAS2叉)。

这个数学库(数学内核库)提供了上述选项的封闭源代码替代方案。“英特尔MKL”非常棒,因为它是为英特尔处理器设计的通过英特尔,但它有自己的许可条款,在AMD处理器上可能没有那么好的性能。

通常,您会从源代码编译R和BLAS库,以实现最佳优化。然而,这样做的过程是动态的,可能会导致意外的行为。即使在R的默认值之外使用参考BLAS库也可能不是最好的(请参阅). 有鉴于此,以下应提供一种简单而保守的方法来替换标准BLAS。

Ubuntu R中更快的BLAS

在Ubuntu中,有两个免费的开源解决方案,ATLAS和OpenBLAS。要安装ATLAS和OpenBLAS,请使用

#安装OpenBLASsudo apt-get安装libopenblas库#安装ATLASsudo apt-get安装libatlas3-base liblapack3

幸运的是,如果你同时安装了这两个,你可以使用

sudo update-alternatives--配置libblas.so.3-x86_64-linux-gnu

应该显示

@ubuntu:~$sudo更新替代--配置libblas.so.3-x86_64-linux-gnu替代libblas.so.3-x86_64-linux-gnu有三种选择(提供/usr/lib/x86_64-linux-gnu/libblas.so.3)。选择路径优先级状态------------------------------------------------------------*0/usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 100自动模式1/usr/lib/x86_64-linux-gnu/atlas/libblas.so.3 35手动模式2/usr/lib/x86_64-linux-gnu/blas/libblas.so.3 10手动模式3/usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 100手动模式按<enter>保留当前选择[*],或键入选择编号:

然后确保选择相应的LAPACK。运行

sudo update-alternatives--配置liblapack.so.3-x86_64-linux-gnu

应该显示

@ubuntu:~$sudo更新替代--config liblapack.so.3-x86_64-linux-gnu可选的liblapack.so.3-x86_64-linux-gnu有三种选择(提供/usr/lib/x86_64-linux-gnu/liblapack.so.3)。选择路径优先级状态------------------------------------------------------------*0/usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3 100自动模式1/usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3 35手动模式2/usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 10手动模式3/usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3 100手动模式按<enter>保留当前选择[*],或键入选择编号:

要检查R会话中当前使用的LAPACK和BLAS,请运行

#这些功能在windows操作系统上不起作用La_库()extSoftVersion()[“BLAS”]

更复杂的是,OpenBLAS实际上有三个不同版本:串行、OpenMP和pthread(POSIX线程)。OpenMP和pthreads允许并行处理。看起来libopenblas-base库默认情况下安装pthreads。共识似乎支持OpenMP?

有关Stan(CmdStan和CmdStanR)中的其他OpenBLAS支持,请参阅此处https://discourse.mc-stan.org/t/speedup-by-using-external-blas-pack-with-cmdstan-and-cmdstanr-py/25441(https://discourse.mc-stan.org/t/speedup-by-using-external-blas-pack-with-cmdstan-and-cmdstanr-py/25441)

要使用英特尔MKL,您可以

确保添加了以下环境变量:MKL_THREADING_LAYER=GNU。否则,使用英特尔的MKL会出现数字错误。

R for Windows中更快的BLAS

这对Windows来说有点困难。我不知道当前有什么预编译的ATLAS或OpenBLAS文件可以放入。有两种较旧的优化BLAS文件来源,在这里在这里,但它可能不是你想依赖的东西。更糟糕的是,Microsoft R Open截至2021年6月不再存在。当前最佳方法可能是手动安装英特尔的MKL,或从旧的MRO安装中复制“英特尔MKL”库。MRO将MKL文件安装在

C: \Program Files\Microsoft\R打开\R-4.0.2\bin\x64\libiomp5md.dllC: \Program Files\Microsoft\R打开\R-4.0.2\bin\x64\Rblas.dllC: \Program Files\Microsoft\R打开\R-4.0.2\bin\x64\Rlapack.dll

这三个文件可以放入并替换Rblas.dll软件拉帕克.dll位于的开源R的文件

C: \程序文件\R\R-4.0.2\bin\x64\

还有一些特定于MRO的R包(请参阅雷沃*)虽然我还没有测试过,但也可能会被转移。

但是,这在企业环境中可能会很麻烦:

Microsoft R服务MKL最终用户许可协议R Services MKL是一个与Microsoft R Server一起使用的软件包,Microsoft R Open以及由发布的任何后续版本或其他软件应用程序可与英特尔&#xAE;数学内核库一起使用的us(“许可产品”)(“MKL”)(有关详细信息,请参阅https://software.intel.com/en-us/intel-mkl).  此软件包在此称为“R服务MKL”Intel Corporation简称为“Intel”1.许可。R服务MKL被授权与许可方一起专用产品。根据本协议的所有条款和条件,Microsoft授予用户使用R的非决定性、不可转让、不可发布的权利服务MKL。R Services MKL必须作为单个集成软件使用应用程序,不得将其分为组成部分。

基准

使用以下脚本的一些人工基准测试:

这个一个也很有趣(来自在这里).

以下时间是少数跑步的大致平均值。没有精确或严格的内容。我会忽略10%左右的差异。

R基准25

Revo脚本矩阵乘法

Revo脚本Cholesky

Revo脚本SVD

吊销脚本PCA

Revo脚本LDA

发布日期:2014-10-23
上次更新时间:2021-09-12