ドーモ、ミナ=サン。
機械学習エンジニアの @hurutoriya です。
先日PFNさんのオフィスで開催された Kubeflow Meetup #1(Cloud Native Meetup Tokyo #5) – connpass に登壇してきました。
発表内容は Kubeflow Family の一つである コンテナネイティブなワークフローエンジン Argoについての紹介をさせていただきました。
Kubeflow/Katib Owner の @overs_5121 さん、ご招待いただきありがとうございました!
発表資料は公開しているので、ぜひご覧下さい。
*発表動画も公開される予定なので、公開され次第追記します。
機械学習システムにおけるワークフローエンジンの必要性
Argo自体まだ発展途上のOSSですが、機械学習システム構築においてコンテナネイティブなワークフローエンジンは
- パイプラインジャングル (ETL→Preprocessing→Learning→Serving)
- グルーコード
- 設定ファイル
など上記の機械学習システムにおいてよくある問題を解決するためにも必須です。
コンテナで機械学習システム構築において何が嬉しい?
- Container as a Package
- コンテナを一つのパッケージとして取り扱う
- 同一の処理をデータに依存しない状態で運用可能
- 環境依存性があるものをコンテナとして隔離可能
- Python2しか対応していないが便利なパッケージをコンテナとして隔離して使用可能に!
- Go, R, Julia, Rust などもワークフローの一つとして使える?! (用法用量を適切に守りましょう)
- ワークフローの各ステップで最適化した計算機リソースを割当可能
機械学習システムはパイプラインごとに要求される計算機リソースに大きな違いあります。
その違いをコンテナの Resource Allocation を採用することで吸収することが可能になります。
- 学習時: GPUモリモリ (高速だが高価)
- 推論時: CPU(低速だが安価)
Argoについて
Argoは最初期はワークフローエンジンだけだったのですが、最近は
- argo-ci : Githubと連携したワークフローエンジン起動
- argo-cd : GitOpsによる継続的開発
- argo-events : スケジューリング実行や特定のメッセージをトリガーして argoを実行可能 (絶賛開発中)
と派生するプロジェクトが開発されてきており、非常にこれからの動きが楽しみですね。
まとめ
Argo Project 自体発展途上ですが、コンテナワークフローというパラダイムは、機械学習システムにおいて大きなメリットがあります。
機械学習システムの開発には不確実性が高い要因が増えがちですが、どのようにその要因に対して対処していくかが肝だと考えています。