macOSにStanをインストールする方法
機械学習を基礎から学んでいると、ベイズ統計を避けて通るわけにはいかない。Stanはベイズ統計モデルの推論を行うための強力なプラットフォームで、RとPythonの両方で利用できる。この記事では、macOSにStanをインストールする方法を説明する。
Stanを利用するにはPythonまたはRが必要で、人によっては両方入れているかも知れない。本稿ではいずれの環境にも対応する。
準備
- Xcodeとそのコマンドラインツールをインストール
Stan本体はC++で記述されているため、Xcode(と対応するコマンドラインツール)が必要
- Stanを利用するPython, Rをインストール
既に入れているケースがほとんどだろう
-
Anacondaをインストール
Rを使う場合でもAnacondaを利用して入れるのが簡単
Stanのインストール
Stanの本家サイトのGetting Startedにいき、必要なものをインストールする。
ターミナルを起動した時、プロンプトが
(base) userId@your-mac present-directory %
のようになっていれば、Anacondaが有効になっている。この状態でサイトに指示された通り、インストールすれば良いのだが、macOS Sequoiaでは
Error while loading conda entry point: conda-libmamba-solver (dlopen(/opt/anaconda3/lib/python3.12/site-packages/libmambapy/bindings.cpython-312-darwin.so, 0x0002): Library not loaded: @rpath/libarchive.20.dylib
Referenced from: <496442DC-0EDE-3705-A2B5-401A4FC0D733> /opt/anaconda3/lib/libmamba.2.0.0.dylib
Reason: tried: '/opt/anaconda3/lib/libarchive.20.dylib' (no such file), '/opt/anaconda3/lib/python3.12/site-packages/libmambapy/../../../libarchive.20.dylib' (no such file), '/opt/anaconda3/lib/python3.12/site-packages/libmambapy/../../../libarchive.20.dylib' (no such file), '/opt/anaconda3/bin/../lib/libarchive.20.dylib' (no such file), '/opt/anaconda3/bin/../lib/libarchive.20.dylib' (no such file), '/usr/local/lib/libarchive.20.dylib' (no such file), '/usr/lib/libarchive.20.dylib' (no such file, not in dyld cache))
CondaValueError: You have chosen a non-default solver backend (libmamba) but it was not recognized. Choose one of: classic
のようなエラーが出て困った。
対策として
環境変数に
export DYLD_LIBRARY_PATH="/opt/anaconda3/lib:$DYLD_LIBRARY_PATH"
export LD_LIBRARY_PATH="/opt/anaconda3/lib:$LD_LIBRARY_PATH"
を追加、さらに
conda install --solver=classic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive
を実行することでエラーが解消した。
念の為、エラー解消時の環境をバックアップ(リストア)する方法も書いておく。
conda env export > environment.yml
conda env create -f environment.yml
これでエラーが出たパッケージのインストールを再度実行してみて欲しい。
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
のように表示され、うまくいくはずだ。
蛇足だが、condaは依存関係にコンフリクトを起こすことがあるので定期的にメンテしておいた方がいいだろう。やり方は以下の通り。
conda update --all
conda clean --all