System R 和 RStudio 使用不同的库

the*_*box 6 r rstudio

在运行 R-devel 的 MacOS 上,我之前已将 Apple 的 Accelerate BLAS 和 LAPACK 库符号链接到我的 R 安装。我通过恢复符号链接返回到 R 的默认值,但是,在 RStudio 中(并且仅在 RStudio 中),sessionInfo()显示仍使用 Apple 的 BLAS 库。重新安装 R 和 RStudio 成功地将 LAPACK 返回到 R 的默认设置,但不是 BLAS(见下文)。

我尝试删除所有 R 安装(删除/Library/Frameworks/R.framework/)、RStudio 和~/.rstudio-desktop/(未找到任何.RProfile文件);然后重新启动;然后从 mac.r-project.org 重新安装最新的每晚版本;最后重新安装 RStudio Desktop (RStudio-1.2.5033),没有任何变化。

终端 R 会话:

> sessionInfo()
R Under development (unstable) (2020-01-10 r77651)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Catalina 10.15.2

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] compiler_4.0.0

> .Library
[1] "/Library/Frameworks/R.framework/Resources/library"

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/4.0/Resources/library"
Run Code Online (Sandbox Code Playgroud)

Rstudio R 会话:

> sessionInfo()
R Under development (unstable) (2020-01-10 r77651)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Catalina 10.15.2

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.0.0 tools_4.0.0   

> .Library
[1] "/Library/Frameworks/R.framework/Resources/library"

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/4.0/Resources/library"
Run Code Online (Sandbox Code Playgroud)

除了 BLAS 之外,唯一的其他区别是RStudio 会话中sessionInfo()存在命名空间。tools

/Library/Frameworks/R.framework/Resources/library符号链接到/Library/Frameworks/R.framework/Versions/4.0/Resources/lib

-rwxrwxr-x  1 root  admin  3696484 Jan 10 22:36 libR.dylib
drwxrwxr-x  3 root  admin       96 Jan 10 22:36 libR.dylib.dSYM
-rwxrwxr-x  1 root  admin   189496 Jan 10 22:36 libRblas.0.dylib
lrwxr-xr-x  1 root  admin       16 Jan 12 17:32 libRblas.dylib -> libRblas.0.dylib
drwxrwxr-x  3 root  admin       96 Jan 10 22:36 libRblas.dylib.dSYM
-rwxrwxr-x  1 root  admin  2182960 Jan 10 22:36 libRlapack.dylib
drwxrwxr-x  3 root  admin       96 Jan 10 22:36 libRlapack.dylib.dSYM
-rwxrwxr-x  1 root  admin   752876 Jan 10 22:36 libc++.1.dylib
-rwxrwxr-x  1 root  admin   240944 Jan 10 22:36 libc++abi.1.dylib
-rwxrwxr-x  1 root  admin   277696 Jan 10 22:36 libgcc_s.1.dylib
-rwxrwxr-x  1 root  admin  1617368 Jan 10 22:36 libgfortran.3.dylib
-rwxrwxr-x  1 root  admin   626712 Jan 10 22:36 libomp.dylib
-rwxrwxr-x  1 root  admin   284208 Jan 10 22:36 libquadmath.0.dylib
-rwxrwxr-x  1 root  admin   996788 Jan 10 22:36 libreadline.5.2.dylib
lrwxr-xr-x  1 root  admin       21 Jan 12 17:32 libreadline.dylib -> libreadline.5.2.dylib
-rwxrwxr-x  1 root  admin    66848 Jan 10 22:36 libunwind.1.dylib
Run Code Online (Sandbox Code Playgroud)

RStudio 如何启动仍在使用 Accelerate BLAS 库的 R 会话,以及如何停止这种情况?

小智 0

我今天遇到了同样的问题。就我而言,据我所知,sessionInfo()RStudio 错误地报告它正在使用 vecLib,而实际上并非如此。我使用多线程大型矩阵乘法的能力作为是否实际使用 vecLib 的指标。我可以根据 CPU 使用情况top和计算速度查看是否使用了多个线程。当我更改符号链接以指向 vecLib dylib 时,我得到了多线程行为。当符号链接指向原始 libRblas.0.dylib 时,我没有得到多线程行为。尽管行为明显不同,但 sessionInfo 的输出未更改。所以这看起来像是 sessionInfo 及其与 RStudio 环境交互中的一个错误???

cd /Library/Frameworks/R.framework/Resources/lib
ln -sf  /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib

# restart R in RStudio and test a large muatrix multiplication--multithreaded and fast
# sessionInfo() reports /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib


ln -sf libRblas.0.dylib libRblas.dylib
#restart R  in RStudio and test same matrix multiplication--slow and single threaded
# sessionInfo still reports /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Versions/Current/libBLAS.dylib
Run Code Online (Sandbox Code Playgroud)