Datascience notebookに、パイプライン管理ツール`Elyra`を追加した。
要旨
DockerHubのjupyter/datascience-notebookで配布されているイメージに、Jupyter公式で開発されているPipeline管理ツールElyraを導入して、Pipelineでノートブックを管理できるようにしました。その実行手順と実行サンプルを書いていますので、皆さん試してみてください。
序論
皆さん、データサイエンスしてますか。データサイエンスのお供といえば、JupyterNotebookです。とりあえず書いて即実行できるので、PDCAが非常に回しやすいですよね。また、Dockerイメージとして、開発環境が公開されており、これを利用すれば、どんなPCでもあっという間に環境を構築して、作業を始めることができます。でも、お手軽な分、ファイル管理に困ったりしますよね。例えば、こんな感じ。
root/
├ 前処理1.ipynb # とりあえずで名前をつけとこ...。
├ 前処理1.5.ipynb # 途中で処理が必要だった!後から追加した
├ 前処理2.ipynb
├ 学習1.ipynb # 実は関係ないノートブックだから実行する意味はないんだよね
├ 学習ver2.ipynb
├ 中間処理.ipynb # どこで実行するんだっけ
└data/result.csv
ノートブック単体が大きすぎたり、再利用したくなるとノートブックを分けたくなりますが、上のようにノートブックを量産していくとあっという間にカオスが生まれます。これでは次のような問題を孕んでしまいます。
- 実行順序を覚えておくのが大変
- いつ実行すればよいのか分からないファイルが出来る
- 実は実行に関係ないファイルが出来る
このようなファイルの管理に時間を取られてデータサイエンスに集中できないのは良いことではありません。
今回は、この「実行方法が整理されていない」問題に着目して、Elyra
を使って解決を図ります。
Elyraについて
Elyra
はIBM社がOSSとして開発しているパイプライン管理ツールで、2020/8/6にバージョン1.0.0が発表されました。この記事によれば
Jupyterノートブックがデータサイエンスの定番になりつつある中、IBMはElyra AIツールキットを公開してパーティに参加することを決めた。
このプロジェクトは、「Jupyter NotebooksへのAI中心の拡張機能」と、AI開発プロセスを簡素化するための新しいユーザー・インターフェースを提供することを目的としています。
最初のイテレーションでは、Elyraはパイプライン用のビジュアルエディタ、ハイブリッドランタイムのサポート、ノートブックをバッチジョブとして実行する機能などを備えています。
また、バージョン管理システムのgitとの統合もパッケージに含まれており、何が変更されたのか、どこで何かがうまくいかなかったのかを追跡できるようになっています。
と書かれています。(DeepLを用いて翻訳)
Elyraと他のpipeline管理ツール
ElyraはJupyterNotebookと簡単に連携できる点が一番の強みです。特に実装前の調査や仮組みに威力を発揮します。Elyraを比較検討するために、pythonのエコシステムに視座を広げると、Luigi, Metaflow, Kedro, Airflow, Kubeflowといった競合も存在します。これらと比較すると、特に実行したpipeline毎の管理や実行状況の管理に難があると言えそうです。逆に、Elyraはpipeline Editorのおかげで「pipeline設定にほとんどコストをかけずに済む」という点で非常に優れています。特にプロダクションコードに落とし込む前の不定形な調査では、なるべくコストをかけたくないため、そういった環境下で複雑な処理を実行できる強みがあります。また、kaggleや各種分析サービスを提供する場合など、稼働がある時期に集中して、その後はほとんどコードを動かさない場面でも重宝するでしょう。
本稿で実施すること
このElyra
をdatascience-notebook
に導入することで「実行方法が整理されていない」問題を解決します。具体的には、jupyter/datascience-notebook
をベースにElyra
を導入するDockerfileを用意してbuildすることで環境を構築しました。また、buildしたイメージをDockerHubにアップロードしておき、いつでも誰でも使えるようにしています。
解決した問題
Elyra
を導入したjupyter/datascience-notebook
を用いることで、以下の問題が次のように解決されました。
- 実行順序を覚えておくのが大変
- pipeline editorを使うことで、実行順序を
.pipeline
ファイルに保存できる。 - ファイルで保存されているので、
git
を用いて同僚に頒布もできる
- pipeline editorを使うことで、実行順序を
- いつ実行すればよいのか分からないファイルが出来る
-
.pipeline
を確認すればいつ実行すれば良いか分かるし、そもそもpipeline
を実行すれば順番どおりに実施してくれる
-
- 実は実行に関係ないファイルが出来る
-
.pipeline
にないファイルは実行に関係ないことがわかる。 - 切り替えたいときはpipeline editorを使えばすぐに切り替えられる。
-
すばやく試すには
あなたも、以下のコードを実行して、http://localhost:8888
でいつでもその威力を試すことができます。
docker run -p 8888:8888 ghcr.io/amazyra/elyra-in-datasciencebook/elyra-in-datasciencebook:latest
もし、サンプルファイルを作るのが面倒くさければ、ここにElyra
開発チームが作ったサンプルコードが有るので以下のコマンドを実行してサンプルを手に入れましょう。
git clone git@github.com:elyra-ai/examples.git
先に提示したイメージは、このリポジトリで作られています。もし、気に入ったらスターを追加してください!他に良いツールや、バグなどがあれば、是非コメント欄で教えて下さいね!
環境構築
概要
本節では、elyra
をjupyter/datascience-notebook
上に導入するプロセスについて説明したいと思います。この章を全て読むことで、elyra
を含むDockerfile
とそれを起動するためのdocker-compose.yml
を手に入れることができます。また、この結果は、このリポジトリに含まれています。
Dockefileの作成
ここでは、実際にDockerfileを用いてjupyter/datascience-notebook
上に、elyra
を導入してみましょう。ソースコードは以下のとおりです。
FROM jupyter/datascience-notebook
# install elyra
RUN conda install -c conda-forge elyra
RUN jupyter lab build --dev-build=False --minimize=False
RUN jupyter serverextension list
ここでは、各レイヤーでの実行結果を明示するために、3つのレイヤーに分けて書いていますが、本番環境に導入するなど、キャッシュが気になる場合は別途調整するべきであることをお伝えしておきます。
さて、各行で何を実行しているのかを説明していきます。
RUN conda install -c conda-forge elyra
ここでは、elyra
をconda-forge
からダウンロードしてきています。jupyter/datescience-notebook
はpythonのパッケージ管理ツールとして、Anaconda
を利用しています。Anaconda
とconda-forge
については、それぞれAnacondaリファレンス, conda-forge公式サイトを確認してください。
RUN jupyter lab build --dev-build=False --minimize=False
ここで、インストールしたelyra
をjupyter環境に組み込んでいます。オプションをつけずとも実行できますが、メモリが不足している環境では、--dev-build=False
と--minimize=False
をONすることでビルドが可能になる場合があります。筆者のPCでは、このオプションをつけないと失敗したため、つけています。
RUN jupyter serverextension list
elyra
がインストールされているか確認するために、このコマンドを利用しています。もし、elyra
が有効になっていない場合はjupyter serverextension enable elyra
を実行するようにしてください。
Docker-composeの作成
先程作ったDockerfile
があれば、Dockerコマンドを用いるコンテナを立てることができますが、せっかくなのでdocker-compose.yml
を作っておきましょう。(筆者はオプションを毎回書くのが嫌いなので、docker-composeをすぐに作りたがります。)
version: '3'
services:
notebook:
build: .
environment:
- "TZ=Asia/Tokyo"
volumes:
- ./data:/home/jovyan/data/
ports:
- "8888:8888"
特別に言及すべき点はありません。先程作ったDockerfile
と同じディレクトリに配置して、docker-compoose up
を実行し、ターミナルに表示されたトークン付きURLからアクセスしましょう。
使い方を学ぶ
サンプルコードは、公式が用意しています。このリポジトリを参照すると良いでしょう。/pipelines/hello-world
にpipeline Editorを用いたチュートリアルが存在します。
終わりに
Elyraを使ったpipeline管理について一通り説明をしました。これらを使って良きデータサイエンスライフを送ることができれば幸いです。
Discussion