CmdStanPyのインストール

MCMCのライブラリとして昔はPyMC3を使っていましたが、仕様がコロコロ変わったり、TensorFlowベースになる予定だったPyMC4を開発中止したりと、何かと悪い印象がありました。そんなわけで、半年前くらいからStanに切り替えました。RのStanかcolaboratory上からPyStanを使っています。「Stanは使いやすくていいな」なんて思いながらしばらく使っていましたが、最近CmdStanPyというのを見つけて、インストールしようとしました。CmdStanPyというのは下記のものです。
www.wenyanet.com

公式ドキュメントに沿ってインストールしたつもりですが、苦戦しました。
StanをPythonで呼び出そうとすると何かと苦労する印象です。そういえば、何年か前にMCMCの勉強会がありました。PythonユーザはPyStanを使おうと頑張りましたが、結局インストールできた人は居なかった気が・・・。Pythonユーザは諦めてreticulateでRのStanを呼び出していました。(その時は私はPyMC3を使っていました)
例に倣ってCmdStanPyのインストールもすんなり行きませんでした。いろいろ試行錯誤した結果よさそうな方法を模索したので、メモしておきます。


インストール

デスクトップにインストール

私のデスクトップ環境は下記のとおりです

手順としては最初にcmdstanpyをインストールしてから、次にcmdstanをインストールするようです。
まずはターミナルからconda-forgeでCmdStanPyをインストールしました。というかconda-forgeからはインストール出来ますが、pipからではインストールできませんでした。コマンドは下記のとおりです。

conda install -c conda-forge cmdstanpy

その次に、下記のようにCオプションを使ってCmdStanをインストールしました。

python -c 'import cmdstanpy; cmdstanpy.install_cmdstan()'

もしくは、

python -m cmdstanpy.install_cmdstan

これでなんとか行けました。

試したこと

すんなりインストール出来たわけではなく、色々と試行錯誤しました。
pipからcmdstanpyをインストールすると、次段階のcmdstanがインストール出来ません。原因不明です。
なので、公式ドキュメントに書いてある、

pip install --upgrade cmdstanpy

とか

pip install --upgrade cmdstanpy[all]

からインストールすると、次段階のcmdstanをインストールする際に、「ファイルがありません」というようなエラーが出力されます。
下記も同じです。

install_cmdstan

同じくPythonから下記を呼び出してもダメでした。

import cmdstanpy
cmdstanpy.install_cmdstan()

なぜ駄目なのかソースコードを見てみましたが、段々面倒になってきてやめました。

Dockerを利用してインストールする

('23/1/5追記)
Cmdstanpyを再インストールしたところ、ローカルの環境がぐちゃぐちゃになってしまいました・・・。こういうのに時間を取られるのが嫌なので、Docker上にインストールします。というかDocker上にインストールするのが一番楽だと思います。
巻末の参考3を参照してDockerfileを下記のように書いてインストールしました。参考元はubuntuのイメージを使っていますが、私はminicondaを使いました。

FROM continuumio/miniconda3 
# conda create 
RUN conda create -n chemodel python==3.9
# install conda package 

RUN conda install -c conda-forge cmdstanpy=1.0.4
RUN conda install -c conda-forge cmdstan=2.30.0