概要
筆者は数年前に以下の記事でMacにHomebrewを用いてRをインストールする方法を投稿しました。当時はしばしばRを利用していたのですが、暫くRから遠ざかっていました。しかし、最近またRを利用したいと思い立ち、過去記事が投稿から随分月日が経っていることに気付きました。よって、2023年5月現在最新の情報をまとめて投稿します。
環境情報
- macOS Monterey 12.6.5
- R version 4.3.0
RをHomebrewを用いてインストール
Homebrewを用いてRをインストールします。以下のコマンドを実行するだけでインストール出来ます。途中でrootユーザーのパスワードの入力を求められるので、入力します。
brew install --cask r
詳細
$ brew install --cask r
==> Downloading https://cloud.r-project.org/bin/macosx/big-sur-arm64/base/R-4.3.0-arm64.pkg
Already downloaded: /Users/yuhkiyano/Library/Caches/Homebrew/downloads/df13ef92bb01fdd21f929bfbde0a073973497e8d258380fc2067de2d5c580b31--R-4.3.0-arm64.pkg
==> Installing Cask r
==> Running installer for r; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is R 4.3.0 for macOS (ARM64)
installer: Installing at base path /
installer: The install was successful.
🍺 r was successfully installed!
起動確認
Rの起動確認を行います。ターミナル上でRを起動し、以下のプロンプトが表示されれば成功です。
$ r
R version 4.3.0 (2023-04-21) -- "Already Tomorrow"
Copyright (C) 2023 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin20 (64-bit)
R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。
R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
>
ソースビルド版OpenBLASを利用した時の効果を検証
デフォルトのOpenBLASはRのインストール時に既にビルド済みの状態のバイナリが格納されます。しかし、ソースからビルドしたOpenBLASを利用すると演算速度が改善するそうです。参考の方法に従ってベンチマークを実行して演算速度の改善が確認出来るか検証します。
デフォルトのOpenBLASを確認
参考の方法に従って、R上で利用されている行列計算ライブラリのOpenBLASを確認します。以下は筆者の環境の例です。
$ ps aux | grep exec/R
yuhkiyano 23672 0.0 0.0 408628368 1664 s001 S+ 4:09PM 0:00.00 grep exec/R
yuhkiyano 23119 0.0 0.3 408827424 58640 s000 S+ 4:09PM 0:00.11 /Library/Frameworks/R.framework/Resources/bin/exec/R
$ lsof -p 23119 | grep 'blas\|lapack'
R 23119 yuhkiyano txt REG 1,17 193872 195488700 /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.0.dylib
R 23119 yuhkiyano txt REG 1,17 1713120 195488715 /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib
ベンチマークの入手
行列演算の速度を測定出来るR-benchmark-25.R
を用います。ベンチマークのスクリプトは以下から入手出来ます。
筆者はwget
コマンドを用いてダウンロードしました。
wget https://mac.r-project.org/benchmarks/R-benchmark-25.R
ベンチマークスクリプトの編集
ベンチマークスクリプトを開き、以下のコード(42行目)をコメントアウトします。行列の削除を実行するコードですが、この部分では不要です。このまま実行するとエラーになります。
remove("a", "b")
SuppDistsパッケージのインストール
乱数生成パッケージのSuppDists
をインストールします。インストールしなくても実行出来ますが、パッケージがインストールされていないと警告が出ます。
要求されたパッケージ SuppDists をロード中です
警告メッセージ:
library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, で:
‘SuppDists’ という名前のパッケージはありません
CRANミラーサイトの設定
CRANのミラーサイトが未設定の場合、パッケージインストール時にミラーサイトの選択を求めるプロンプトが毎回表示されます。これを防ぐためにホームディレクトリ上に.Rprofile
を作成し、以下の様に追記します。
options(repos="https://cran.ism.ac.jp/")
国内ミラーサイトの詳細は以下を参照して下さい。
XQuartzのインストール
SuppDists
パッケージにはXQuartzが必要です。以下のコマンドを実行し、インストールします。インストール途中でルートパスワードを求められるので入力します。
brew install --cask xquartz
$ brew install --cask xquartz
==> Downloading https://formulae.brew.sh/api/cask.jws.json
############################################################################################################################################################### 100.0%
==> Downloading https://github.com/XQuartz/XQuartz/releases/download/XQuartz-2.8.5/XQuartz-2.8.5.pkg
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/201858552/619d0c12-2b10-4965-8ac3-62058ea775f1?X-Amz-Algorithm=AWS4-
############################################################################################################################################################### 100.0%
==> Installing Cask xquartz
==> Running installer for xquartz; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is
installer: Installing at base path /
installer: The install was successful.
installer: The install requires logging out now.
🍺 xquartz was successfully installed!
インストールされていない場合、以下の様なエラーメッセージがインストール時に表示されます。
警告メッセージ:
doTryCatch(return(expr), name, parentenv, handler) で:
共有ライブラリ '/Library/Frameworks/R.framework/Resources/modules//R_X11.so' を読み込めません:
dlopen(/Library/Frameworks/R.framework/Resources/modules//R_X11.so, 0x0006): Library not loaded: '/opt/X11/lib/libSM.6.dylib'
Referenced from: '/Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/modules/R_X11.so'
Reason: tried: '/opt/X11/lib/libSM.6.dylib' (no such file), '/Library/Frameworks/R.framework/Resources/lib/libSM.6.dylib' (no such file), '/Library/Java/JavaVirtualMachines/jdk-11.0.18+10/Contents/Home/lib/server/libSM.6.dylib' (no such file)
インストールの実行
Rのコンソールを起動し、install.packages("SuppDists")
コマンドを実行します。
$ r
R version 4.3.0 (2023-04-21) -- "Already Tomorrow"
Copyright (C) 2023 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin20 (64-bit)
R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。
R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
> install.packages("SuppDists")
URL 'https://cran.ism.ac.jp/bin/macosx/big-sur-arm64/contrib/4.3/SuppDists_1.1-9.7.tgz' を試しています
Content type 'application/x-gzip' length 332307 bytes (324 KB)
==================================================
downloaded 324 KB
ダウンロードされたパッケージは、以下にあります
/var/folders/3p/1yt5nmdx1zl_9l3p6_9tcv3r0000gn/T//RtmpyAStgd/downloaded_packages
これで漸くベンチマークスクリプト実行出来ます。
ベンチマークの実行(デフォルトOpenBLAS)
まずはデフォルトのOpenBLASでの性能を測定してみます。以下のコマンドを実行するだけです。
cat R-benchmark-25.R | time R --slave
筆者の環境では以下の様な結果となりました。
$ cat R-benchmark-25.R | time R --slave
要求されたパッケージ Matrix をロード中です
要求されたパッケージ SuppDists をロード中です
R Benchmark 2.5
===============
Number of times each test is run__________________________: 3
I. Matrix calculation
---------------------
Creation, transp., deformation of a 2500x2500 matrix (sec): 0.277333333333333
2400x2400 normal distributed random matrix ^1000____ (sec): 0.115
Sorting of 7,000,000 random values__________________ (sec): 0.592
2800x2800 cross-product matrix (b = a' * a)_________ (sec): 13.2793333333333
Linear regr. over a 3000x3000 matrix (c = a \ b')___ (sec): 6.254
--------------------------------------------
Trimmed geom. mean (2 extremes eliminated): 1.00885144039429
II. Matrix functions
--------------------
FFT over 2,400,000 random values____________________ (sec): 0.0786666666666633
Eigenvalues of a 640x640 random matrix______________ (sec): 0.416666666666667
Determinant of a 2500x2500 random matrix____________ (sec): 1.71933333333333
Cholesky decomposition of a 3000x3000 matrix________ (sec): 5.14366666666666
Inverse of a 1600x1600 random matrix________________ (sec): 1.39166666666667
--------------------------------------------
Trimmed geom. mean (2 extremes eliminated): 0.998990493585409
III. Programmation
------------------
3,500,000 Fibonacci numbers calculation (vector calc)(sec): 0.0986666666666641
Creation of a 3000x3000 Hilbert matrix (matrix calc) (sec): 0.110666666666674
Grand common divisors of 400,000 pairs (recursion)__ (sec): 0.0823333333333286
Creation of a 500x500 Toeplitz matrix (loops)_______ (sec): 0.0179999999999912
Escoufier's method on a 45x45 matrix (mixed)________ (sec): 0.144999999999982
--------------------------------------------
Trimmed geom. mean (2 extremes eliminated): 0.0965134102123727
Total time for all 15 tests_________________________ (sec): 29.7223333333333
Overall mean (sum of I, II and III trimmed means/3)_ (sec): 0.459895060497375
--- End of test ---
146.69 real 145.83 user 0.75 sys
ソースビルド版OpenBLASのインストール
ソースビルド版のOpenBLASをインストールします。
brew install --build-from-source openblas
以下の様な警告が出た場合、指示通りに実行するとインストールが完了します。
Warning: The post-install step did not complete successfully
You can try again using:
brew postinstall openblas
OpenBLASの入れ替え
デフォルトのOpenBLASは残しつつ、ソースビルド版のOpenBLASを格納します。以下のコマンドを実行します。
mv /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.dylib /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.dylib.org
ln -s /opt/homebrew/opt/openblas/lib/libopenblas.dylib /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRblas.dylib
ベンチマークの実行
ベンチマークを再実行します。入れ替えの効果が出ている(高速化している)ことが結果から分かります。
$ cat R-benchmark-25.R | time R --slave
要求されたパッケージ Matrix をロード中です
要求されたパッケージ SuppDists をロード中です
R Benchmark 2.5
===============
Number of times each test is run__________________________: 3
I. Matrix calculation
---------------------
Creation, transp., deformation of a 2500x2500 matrix (sec): 0.279666666666667
2400x2400 normal distributed random matrix ^1000____ (sec): 0.112666666666667
Sorting of 7,000,000 random values__________________ (sec): 0.601
2800x2800 cross-product matrix (b = a' * a)_________ (sec): 0.151
Linear regr. over a 3000x3000 matrix (c = a \ b')___ (sec): 0.247333333333333
--------------------------------------------
Trimmed geom. mean (2 extremes eliminated): 0.21859158274215
II. Matrix functions
--------------------
FFT over 2,400,000 random values____________________ (sec): 0.0810000000000001
Eigenvalues of a 640x640 random matrix______________ (sec): 1.328
Determinant of a 2500x2500 random matrix____________ (sec): 0.397666666666667
Cholesky decomposition of a 3000x3000 matrix________ (sec): 0.368666666666667
Inverse of a 1600x1600 random matrix________________ (sec): 0.71
--------------------------------------------
Trimmed geom. mean (2 extremes eliminated): 0.470403419369798
III. Programmation
------------------
3,500,000 Fibonacci numbers calculation (vector calc)(sec): 0.0993333333333339
Creation of a 3000x3000 Hilbert matrix (matrix calc) (sec): 0.110666666666667
Grand common divisors of 400,000 pairs (recursion)__ (sec): 0.0759999999999993
Creation of a 500x500 Toeplitz matrix (loops)_______ (sec): 0.0173333333333332
Escoufier's method on a 45x45 matrix (mixed)________ (sec): 0.0940000000000012
--------------------------------------------
Trimmed geom. mean (2 extremes eliminated): 0.0891960218173493
Total time for all 15 tests_________________________ (sec): 4.67433333333334
Overall mean (sum of I, II and III trimmed means/3)_ (sec): 0.209322765201754
--- End of test ---
23.33 real 86.63 user 2.59 sys
まとめ
久方振りにMacにRをインストールしました。Homebrewを用いてインストールしたアプリケーションが/opt/homebrew
直下に格納される仕様に変更された影響で、ファイルの場所を捜索するのに少々手間取りましたが、無事OpenBLAS入れ替えによる高速化も実現出来ました。
Reference