Mooの技術メモ

技術的なメモ中心。

DockerでCmdStanが使えるRStudio Server環境を作った話

ベイズ統計を最近また勉強しはじめたのでDockerを使ってRStudio ServerでCmdStanが利用できる環境を作った。

環境を作る上で実現したかったことは以下のとおり。

Dockerfile等

以下GitHubに置いてあります。

github.com

Dockerfileを書く際に工夫?した点は次のとおりです。

  • Rstudioの設定ファイル (rstudio-prefs.json)
    • 以下でコンテナ内のディレクトリにコピーしています。
      • COPY ./rstudio-prefs.json /home/rstudio/.config/rstudio/rstudio-prefs.json
  • Localeの日本語化
    • 以下の記事を参考にさせていただきました。フォントはIPAexフォントを使わせていただいています。

oki2a24.com

qiita.com

  • 各パッケージのインストール
    • install2.rを使ってインストールしています。詳細を書いてくださっているわかりやすい記事があるので詳しくはそちらをご覧下さい。
    • CmdStanRのGetting startedで使われているパッケージの他に、EDAが楽にできるDataExoloreもインストールしています。
    • CmdStanRのインストールについては、以下のコードでレポジトリを指定しています。
      • install2.r --error --deps TRUE --repos https://mc-stan.org/r-packages/ cmdstanr
    • 以下のコードで (1) CmdStanのインストールディレクトリの作成、(2) CmdStanのインストール、(3) ディレクトリ所有者を実行ユーザー(rstudio)に変更、を行っています。コンテナ起動後すぐにCmdStanRを使えます。
mkdir /home/rstudio/.cmdstanr/ \
&& Rscript -e "cmdstanr::install_cmdstan(dir = '/home/rstudio/.cmdstanr/', cores = 2)" \
&& Rscript -e "cmdstanr::set_cmdstan_path(path = '/home/rstudio/.cmdstanr/cmdstan-2.28.0')" \
&& chown rstudio -R /home/rstudio/

起動方法

docker-compose up した後、localhost:8787/にブラウザでアクセスしてください。

所感

サンプリングがrstanよりずっと早い。

f:id:hiromoooo:20211110225518g:plain
Sampling
ちゃんとパラメータ推定できていますね。
f:id:hiromoooo:20211110225209p:plain
Parameters

注意点

  • docker-compose.yml内でAuthenticate stepが無効化されています。Publicに利用される環境ではAuthenticationをきちんと設定してください。
  • WSL2のディレクトリをdocker-compose.yml内でボリュームのマウントを設定しています。任意のディレクトリに変更してください。