論文を書くとき、実験が必ず必要になる。この実験にworkflowフレームワークのLuigiを使い始めたが、いい感じなので、布教しようかと思い記事を書いてみた。
ほしかった要件
個人的に、実験スクリプトで求める要件としては以下のようなもの。
- デバッグ容易さ
- 処理の依存関係の制御
- 処理が完了しているスクリプトは再実行しない
- 処理ごとにIDの自動割り当て
今まで論文の実験はシェルスクリプト等を使っていたが、実験を追加していくとどんどんスパゲッティーになっていくし、上記の機能を全部自前で作るのは面倒。
ということで、Luigiを使って始めた。
Luigiの基本的な使い方は本家のチュートリアルを見るのがわかりやすい。
http://luigi.readthedocs.io/en/stable/example_top_artists.html
また、練習に私がいつも書いているような配列相同性検索の実験スクリプトを書いてみた。
https://github.com/shu65/sequence_alinger_evaluation
実際にLuigiを実験スクリプトに使った際に感じた良い点
ほしかった機能以外に感じた良かった点は以下の通り。
Pythonのパッケージを活用できる
テンプレートエンジンであるJinjaやパラメータの列挙が簡単にできるsklearnなどのPythonのパッケージをそのままワークフローで活用できる。このため、特殊なconfigファイルを生成や、パラメータのグリッドサーチなども簡単にできる。
実行に特殊なサーバーがいらない
Pythonがあれば、基本的には実行できるので、特殊なサーバーを立てる必要がないので、ローカルでもぱっと実行できる。このため、試行錯誤が非常にしやすい
Luigiを使った際に気を付けないといけないこと
あとから探索するパラメータを追加したい場合、コードを改良して、新しいパラメータを入力として加えるという変更を加えると思われるが、これをすると、すでに実行済みの処理も別ものとされ再度実行される。今回のサンプルでは特に対処しなかったが、この辺りを少し工夫しないと、実験に余計な時間がかかるので、実験スクリプトの作成には注意が必要。
まとめ
Luigiを使った実験スクリプトのサンプルと、Luigiを使った良かった点等を紹介した。
是非、シェルスクリプトで疲れている人はLuigiを使って見るのを勧める。
もし、Luigiで合わなければ、Luigi以外のworkflowフレームワークもあるので、状況によってはそれも検討してみても良いかもしれない。