はじめに
『Jupyter だけで機械学習を実サービス展開できる基盤』を読んで、基盤にjupyter notebookを直接組み込むなんてことが出来るのかととても感心しました。記事の中でjupyter notebookを外部から実行できる 『papermill』というライブラリが登場したので、これを使ってみたいと思います。
参考
環境
- macOS Catalina 10.15.3(19D76)
- python 3.7.5
手順
インストール
pip install papermill
実行
フォルダ構成は下記のようにしました。input.ipynb
が実行したいnotebookで、実行コードをmain.py
に書きます。
work/
├ main.py
└ input.ipynb
input.ipynb
の中身はごくシンプルに下記のようにしました。
ここで、1つ目のセルにparameters
というタグがついています。タグはメニューのView-Cell Toolbar - Tags
と選択するとセル右上のテキストボックスが表示されるので、ここにparameters
と入力しAdd tag
をクリックして追加します。papermillはnotebook内のparameters
タグが付いたをセルを探しに行って、セル内の変数を書き換えることができます。
python APIでの実行は次のようにします。実行後のnotebookが./output.ipynb
として出力されます。
import papermill as pm
pm.execute_notebook(
'./input.ipynb',
'./output.ipynb',
parameters = dict(alpha=0.6, ratio=0.1)
)
python main.py
で実行します。
$ python main.py
Executing: 100%|████████████████████████████████| 3/3 [00:01<00:00, 1.80cell/s]
./output.ipynb
を開いてみると次のようになっています。Injected-parameters
というタグが付いたセルが追加されていて、パラメーターが上書きされています。
CLIから実行するには次のようにします。booleanや数値はpapermillが勝手に判断してくれます。
$ papermill ./input.ipynb ./output.ipynb -p alpha 0.6 -p ratio 0.1
Input Notebook: ./input.ipynb
Output Notebook: ./output.ipynb
Executing: 100%|████████████████████████████████| 3/3 [00:01<00:00, 2.67cell/s]
パラメーターはyamlファイルでも指定できます。
work/
├ main.py
├ input.ipynb
└ parameters.yaml
CLIで次のように実行します。
papermill ./input.ipynb ./output.ipynb -f ./parameters.yaml
クラウドストレージに保存することもできます。その場合、オプションもインストールする必要があります。
pip install papermill[all]
./output.ipynb
の部分をクラウドの宛先に変えてやります。下記はAWSのS3の例です。CLIでconfigureされていれば実行できます。
papermill ./input.ipynb s3://xxxxxxxxxx/output.ipynb -f ./parameters.yaml
おまけ
出力先を入力と同じにすると上書きになります。
papermill ./input.ipynb ./input.ipynb -f ./parameters.yaml
複数回繰り返してもInjected-parameters
のセルが上書きされるだけなので、きちんとパラメータは書き換えられます。
おわりに
flaskで管理画面を作って学習とか管理できると面白そうです。