Giter Site home page Giter Site logo

stanenv-docker's Introduction

Docker-composeによる CmdStanPy & PyStan2 環境

  • docker-composeコマンド一発で、Stan付きJupyterLabを使用可能にする

利用法

  1. 使いたい環境のディレクトリに移動しdocker-compose up
    • cmdstanpy

      cd cmdstanpy
      docker-compose up

    • pystan2

      cd pystan2
      docker-compose up

    • simple-cmdstanpy
      • condaではなくpipでcmdstanpyの環境を構築した版
        • 当初condaでのセットアップが上手くいかなかったため、@komiya_____さんの記事を参考に用意した代替資料。

      cd simple-cmdstan
      docker-compose up

  2. ブラウザからJupyter Labを開く
    • localhost:8080/lab

詳細

  • 共通

    • いずれもdocker-composeから起動している
    • 起動の際、カレントディレクトリの内容をコンテナ内のworkdir/にマウントしている
      • 試したいJupyter Notebookがあれば、 起動するディレクトリ下に置けばすぐ試行できる
  • pystan2

    • minicondaを使ってmyenv.yaml内のパッケージをインストールしている
      • Dockerfile内でのconda activateが失敗するため、conda env createではなく conda env update --pruneでbase環境に各パッケージをインストールしている
        • この方法を思いつくまでが長かった…
    • ライセンス対策でanacondaを避ける場合は、Dockerfile内に下記を追加すれば良い

      RUN conda config --add channels conda-forge
      RUN conda config --remove channels anaconda

    • ライブラリの変更・バージョン指定はmyenv.yamlを編集する
  • cmdstanpy

    • 上記のpystan2と同様に、minicondaを使ってmyenv.yaml`内のパッケージをインストールしている
      • CmdStanPyはanacondaリポジトリには登録されていないため、conda config --append channels conda-forgeしている。
      • install_cmdstanまでをDockerfile内で済ませており、コンテナ起動後のセットアップは不要
    • ライブラリの変更・バージョン指定はmyenv.yamlを編集する
  • simple-cmdstan

    • Dockerfile内でcmdstanpy + requirements.txtにあるパッケージをpip installしている
      • 当初conda(miniconda)によるインストールが上手くいかず、cmdstanpyインストール後のinstall_cmdstanが失敗していたため、代わりにpipでの環境を養子したもの。
      • @amber_kshzさんのqiita記事を参考にした。
      • その後condaによる環境を上記の通り作成できたため、すでに使用していない。
    • 必要なライブラリの変更 or バージョン指定はrequirements.txtを編集する

速度比較

  • 8schoolsを実行し、コンパイルおよびサンプリングの速度比較

    • 各ディレクトリ下/demo内のhello_world.ipynb参照
  • コンパイル

    • 前評判通り、コンパイル速度はCmdStanPyの方がかなり(3倍強)速い
    • CmdStanPy

      CPU times: user 5.14 ms, sys: 4.22 ms, total: 9.37 ms
      Wall time: 17.5 s

    • PyStan2

      CPU times: user 1.09 s, sys: 73.1 ms, total: 1.16 s
      Wall time: 1min 5s

  • サンプリング

    • サンプリング速度は大差ない (PyStan側にcondaを使用している影響はあるかもCondaで環境構築した場合も同様であった)
    • CmdStanPy

      CPU times: user 48.1 ms, sys: 30.6 ms, total: 78.7 ms
      Wall time: 238 ms

    • PyStan2

      CPU times: user 52.8 ms, sys: 21.1 ms, total: 73.9 ms
      Wall time: 163 ms

TODO

  • PyStan3が正式リリースされた後、PyStan3用のDockerfileも追加する予定
    • 機能制限がキツすぎるのでやらないかも…

stanenv-docker's People

Contributors

narrowlyapplicable avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.