Python チュートリアル:ワークフローツール
https://gyazo.com/153a339305d78fc4fa4850753e4b1594
はじめに
この資料はワークフローツールについて説明するものです。まずは、関連する用語から説明することにします。
パイプライン
パイプライン(Pipeline) とは、複数の処理プログラムを直列に連結し、ある処理プログラムの出力が次の処理プログラムの入力となるようにしたものです。複数のプログラムを並行処理させる場合もあります。
バイオインフォマティックスや機械学習の領域では、データの前処理、学習、分析など工程がいくつか必要になるため、
パイプライン処理でデータを扱う場合が多くなります。
ワークフロー
ワークフロー(Workflow) は有向非巡回グラフ(DAG: Directed Acyclic Graph)で処理を繋げます。つまり、線形のDAGはパイプラインとなります。
パイプラインはデータが対象であるのに対して、ワークフローではデータを処理するタスクが対象となると考えると理解しやすいでしょう。
対象がタスクであるため、次のような機能を必要とされることが多くなります。
周期実行などのスケジューリング
タスク失敗時のリトライ
タスクの成功/失敗をSlackなどに通知
DAGの可視化
クラウドサービス
ワークフローを扱えるクラウドサービスも多数みつかります。
この資料では取り上げていませんが、紹介のリンクを提示しておきます。
アプリケーション
アプリケーションについても比較的規模が大きく機能も豊富であるためここでは紹介にとどめています。別のチュートリアルで独立したものとして作成することにします。
Airbnb が開発したDAGベースのワークフローツール
Luigi はバッチジョブの複雑なパイプラインを構築を手助けするアプリケーションです。依存関係の解決、ワークフローの管理、視覚化、障害の処理、コマンドラインの統合などを行います。
Netflix が開発したワークフローツール
ソリッドと呼ばれる論理的なコンポーネント間のデータフローをパイプラインで結合します。
Python で実装されているオープンソースのワークフローベースのデータマイニングツール
無料のオープンソースと商業バージョンのデュアルライセンスで提供されている、ワークフローベースのデータマイニングツール
ライブラリ
Jugは、タスクに分割されたコードを書き、異なるプロセッサで異なるタスクを実行することができます。
現在、2つのバックエンドを持っています。
1つ目は、プロセス間の通信にファイルシステムを使用し、NFS上で正しく動作するので、異なるマシン上のプロセスを調整することができます。
2つ目はredisをベースにしているので、プロセスは共通のredisサーバーに接続する機能だけを必要とします。
Jugはまた、すべての中間結果を、後で取得できるようにバックエンドに保存することを引き受けます。
ParslはPythonのための並列プログラミングライブラリです。ParslはPythonに並列処理をエンコードするためのシンプルでスケーラブル、かつ柔軟な構造を追加します。開発者はPythonの関数にアノテーションを付け、並列実行の機会を指定します。これらのアノテーションされた関数はアプリと呼ばれ、純粋なPython関数や、シーケンシャル、マルチコア(CPU、GPU、アクセラレータなど)、マルチノードMPIなどの外部アプリケーションへのコールを表すことができます。さらにParslは、これらのアプリへの呼び出しをタスクと呼び、共有された入出力データ(Pythonオブジェクトやファイルなど)で接続することができ、Parslはタスクのダイナミックな依存関係グラフを構築することができます。
参考