StatsFragments

Python, R, Rust, 統計, 機械学習とか

RStan / PyStan 開発版を GitHub からインストールする

最近ちょっとした事情で Stan を使いたく、状態空間モデルの勉強とあわせて こんな感じ でやっている。その環境構築ネタ。

補足 Stan って何?という方は StanTutorial がわかりやすい。

Stan の公式バインディングとしては R 用の RStan、Python 用の Pystan、コマンドライン用の CmdStanと 3 つある。うち、自分が使うのは RStan と PyStan。

これらの標準版のインストールについては、上のドキュメントに OS 別のハマりどころも含めて整理されていてよい。標準版しか使わないよ、という方は上だけ読んでおけば OK。

自分はある issue の修正確認のために GitHub にある開発版をインストールしようとしたのだが、手順も見当たらずちょっとハマったのでメモ。

補足 自分の OS は Mac OSX 10.10.1 だが、Linux 系は同じ手順でいけると思う。

RStan

必要パッケージのインストール

一度 普通に RStan をインストールして、依存パッケージは入った状態になっている前提で。通常インストールされる依存パッケージに加え、make するには {RInside} が必要。

install.packages('RInside')
git リポジトリの clone

以降はシェルから。RStan のリポジトリは R のラッパー部分のみを管理しており、 Stan のコア部分は同梱されていない。そのため、Stan, RStan 両方を clone する必要がある。clone 後、Stan のコア部分を RStan の指定のフォルダにコピーする。

git clone git://github.com/stan-dev/stan.git
git clone git://github.com/stan-dev/rstan.git
cp -r stan/* rstan/stan
cd rstan/rstan
makefile の変更

自分は TeX 設定してないので、vignette, manual をビルドしないように設定 ( makefile 108 行目のコメントアウトを外す)。

ifeq ($(NOTBUILD),FALSE)
-    $(R) CMD build rstan --md5 $(BUILD_OPTS) # --no-build-vignettes --no-manual
+    $(R) CMD build rstan --md5 $(BUILD_OPTS) --no-build-vignettes --no-manual
endif
インストール
make build
make install
インストール結果の確認

リポジトリ上のバージョンはリリースまで書き変わらない (直前のリリースのバージョンになっている) ようなので、ライブラリインストールパスのタイムスタンプが書き換わっているかどうかを確認した。

02/01追記 rstan のロード時に、インストール時刻と git のリビジョン番号が出ていた。これで確認すればよい。

library(rstan)
# rstan (Version 2.5.0, packaged: 2015-01-24 06:59:27 UTC, GitRev: 7d6bf44c5b45)

PyStan

必要パッケージのインストール

標準版で必要なもの ( Numpy, Cython ) はインストールされている前提。

git リポジトリの clone

シェルから。コアとバインディング両方を clone するのは RStan と同様。必要なリポジトリを clone してコピーする。

git clone git://github.com/stan-dev/stan.git
git clone git://github.com/stan-dev/pystan.git
cp -r stan/* pystan/pystan/stan
cd pystan
(2015/01/31時点の情報) pystan/_chain.pyx の修正

PyStan と Stan は完全に同期してメンテナンスされているわけではないらしく、2015/01/31 時点でそのままではビルドできない。原因は pystan/_chain.pyx が Stan のリポジトリから削除されたファイル var_stack_def.hpp を読み込もうとしているため。とりあえず該当箇所をコメントアウトする。

参考 https://groups.google.com/forum/#!topic/stan-dev/5WMyEDliS0I

-  cdef extern from "stan/agrad/rev/var_stack_def.hpp":
-      pass
+ # cdef extern from "stan/agrad/rev/var_stack_def.hpp":
+ #     pass
インストール

自分は リポジトリからインストールするときは setup.py develop を指定している。これは、ソースファイルを site-packages 以下にコピーせず、現在のパスにあるものを利用するオプション。リポジトリに対して行った修正が再インストールなしで反映されるので便利。

参考 setuptools - Python setup.py develop vs install - Stack Overflow

ARCHFLAGS は PyStan Wiki を元に指定。

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future sudo python setup.py develop
インストール結果の確認

setup.py develop オプションでインストールしたとき、ライブラリのパスは git リポジトリのパスになる。

import pystan
pystan
# <module 'pystan' from '/Users/xxx/Documents/Git/pystan/pystan/__init__.py'>

終わり。