2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

久方振りにMacにRをインストールするので最新の情報をまとめてみる

Posted at

概要

筆者は数年前に以下の記事で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を作成し、以下の様に追記します。

.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

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?