Up

CmdStanPy試用記

 

StanWindowsで利用するためにCmdStanPyをインストールしたが、動作しなかった。WindowsにインストールしたUbuntu上でCmdStanPyをインストールすると、Ubuntu上では利用できた。以下は、その備忘録である。

なお、WSLでは他のOS、例えばFedoraを試してみることもできる。FedoraWSLでインストールする方法は、で説明している。

 

1つのOSの下でCmdStanPyによりコンパイルしたとき、コンパイルの結果がファイルに残されている。この状態で、同じスクリプトを別のOSの下でCmdStanPyによる実行を行おうとするとエラーが出る。先のOSの下でコンパイルした結果を削除すれば、エラーは出なくなる。削除するファイル名は、Stanスクリプトファイル名から拡張子を除いたものである。bin_model.stanであれば、bin_modelである。

あるいは、削除せずに、強制的にコンパイルすることもできる。強制的にコンパイルするときは、「force_compile=True」パラメータを付ければよい。例えば、

 

model = CmdStanModel(stan_file="bin_model.stan", force_compile=True) 

 

である。強制的にコンパイルすれば、そのとき使用している環境に合わせてコンパイルされ、実行できる。

 

 

 

WindowsへのUbuntuのインストール

 

WindowsへのUbuntuのインストールについては、このウェブサイトでも説明している。

インストールしたUbuntuMiniCondaをインストールする。このウェブサイトではAnacondaが説明されているが、MiniCondaも同様である。

 

 

UbuntuでのCmdStanPyのインストール

 

CmdStanPyのインストールの前に、g++が使えることを確認しておく。

Ubuntuの端末において、コマンドg++を入力したときに、入力ファイル名が指定されていませんというようなメッセージが返ってきたらOKである。コマンドg++はありませんというようなメッセージが返ってきたときは、メッセージとともにインストールコマンドも示されているので、それを実行する。簡単なコマンドでg++のインストールができる。

 

 

CmdStanPyを、MiniCondaの仮想環境としてmystanという名前の仮想環境を用意して、mystanCmdStanPyをインストールするときは、次のコマンドを実行すればよい。

 

(base) yasuh@pcyo:/$ conda create -n mystan -c conda-forge cmdstanpy

 

仮想環境mystanが作成されたら、次のコマンドでmystanをアクティブにした後、アップデートを行う。

 

(base) yasuh@pcyo:/$ conda activate mystan

(mystan) yasuh@pcyo:/$ conda update --all

 

アップデートが終了したら、ライブラリarvizを追加インストールしておく。

 

(mystan) yasuh@pcyo:/$ conda install arviz

 

以上の準備で、次のサンプルスクリプトが実行できる。

Stanスクリプトのファイルbin_model.stanと、それを用いてMCMCサンプリングを行うPythonスクリプトのファイルbin_model.pyを同じフォルダ内に作成する。

 

 

リスト1 Stanスクリプトファイル(bin_model.stan

 

data {

    int k;

    int n;

}

parameters {

    real<lower=0, upper=1> p;

}

model {

    p ~ beta(1,1);

    k ~ binomial(n, p);

}

 

 

リスト1のStanスクリプトのファイルbin_model.stanを用いるPythonスクリプトをリスト2のように用意した。

 

 

リスト2 Stanスクリプトファイルを実行するPythonスクリプト(bin_model.py

 

from cmdstanpy import CmdStanModel

import arviz as az

import matplotlib.pyplot as plt

 

 

model = CmdStanModel(stan_file="bin_model.stan")    #   コンパイル

fit = model.sample(data={'n':10, 'k':7})            #   サンプリング

 

print(fit.summary())

 

dframe = fit.draws_pd()                     #   Pandas DataFrameへ変換

print('\nPandas DataFrame format\n',dframe)

 

inf_data = az.from_cmdstanpy(fit)           #   Arviz(az)用のデータに変換

az.plot_trace(inf_data, figsize=(10,3))     #   トレースプロット

plt.tight_layout()

plt.show()

 

 

リスト1とリスト2のスクリプトbin_model.pyの格納されているフォルダにカレントディレクトリを移して、次のコマンドで実行する。

 

(mystan) *****/samplefiles$ python bin_model.py

 

リスト1のStanスクリプトがコンパイルされ(多少時間が掛かる)、実行されると、図1のようにトレース図が表示される。

 

図1

 

トレース図の右上のX印アイコンをクリックして閉じると、スクリプトの実行終了となる(図2)。

 

図2

 

 

Fedoraの利用

 

WSLではいろいろなOSが用意されている。コマンドwsl --list --onlineを実行すると以下のリストが表示される。

 

PS C:\Users\yasuh> wsl --list --online

インストールできる有効なディストリビューションの一覧を次に示します。

'wsl.exe --install <Distro>' を使用してインストールします。

 

NAME                            FRIENDLY NAME

AlmaLinux-8                     AlmaLinux OS 8

AlmaLinux-9                     AlmaLinux OS 9

AlmaLinux-Kitten-10             AlmaLinux OS Kitten 10

AlmaLinux-10                    AlmaLinux OS 10

Debian                          Debian GNU/Linux

FedoraLinux-42                  Fedora Linux 42

SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6

SUSE-Linux-Enterprise-15-SP7    SUSE Linux Enterprise 15 SP7

Ubuntu                          Ubuntu

Ubuntu-24.04                    Ubuntu 24.04 LTS

archlinux                       Arch Linux

kali-linux                      Kali Linux Rolling

openSUSE-Tumbleweed             openSUSE Tumbleweed

openSUSE-Leap-16.0              openSUSE Leap 16.0

Ubuntu-20.04                    Ubuntu 20.04 LTS

Ubuntu-22.04                    Ubuntu 22.04 LTS

OracleLinux_7_9                 Oracle Linux 7.9

OracleLinux_8_10                Oracle Linux 8.10

OracleLinux_9_5                 Oracle Linux 9.5

openSUSE-Leap-15.6              openSUSE Leap 15.6

PS C:\Users\yasuh>

 

 

Fedoraをインストールするときは、次のコマンドを実行すればよい。

 

wsl.exe  --install  FedoraLinux-42

 

 

インストールの途中で、画面に何の変化も無く長時間待たされたときは、Enterキーを押すと次に進むようである。

 

インストール後、再起動してアップデートするときは、コマンド

 

sudo dnf update

 

である。再起動は、コマンドexitで一旦端末を閉じてから、WindowsのスタートメニューでFedoraLinux-42を選べばよい。

他は、Ubuntuのときと同じ要領である。

 

 

Home