【2019夏】エンドツーエンド機械学習のアーキテクチャの最適解はこれでは?

# 結論

![e2e arch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2137/7b9151b9-8281-4115-f1a2-f2c501b32156.png)

- 前処理や標準化等のデータの処理はDataflowで実行する
- 学習や評価、デプロイ等のモデルの処理はAI Platformのジョブで実行する
- 上記のワークフローをComposerが管理する

# 制約
- 学習処理は頻繁には実行しないので、サーバー等を常時起動したくない
- 学習処理はオートスケールしたい
- オンライン学習はしない

# 経緯
学習処理をローカルで実行するのではなくクラウドで実行したい。しかし、アルゴリズムは独自で組みたいので、いろいろ調べたところ以下のサービスで実行するパターンが多い。

1. Dataflowのパイプライン
2. ComposerのDAG
3. GCE

それぞれに長短があり決めてにかける。
例えばDataflowだとストリームデータの処理に向いているのでバッチだとワーカー数をコントロールできずスループットを出せない。
DAGだと直接重い処理を書くとスケジューラに影響与える。
GCEは起動やシャットダウンのコントロールが面倒。等々。
AI Platformだとジョブ管理はできるが、前処理が終わってから学習させたい等のコントロールが難しい。
そこで気づく。
**「それぞれの処理は、対象となるオブジェクトを扱うのが得意なサービスでやって、Composerでワークフローを管理すれば良いのでは?」**
気づいてしまえば、むしろなんでこんな当たり前のことに気づかなかったのかと…
そういう訳で、エンドツーエンドでの機械学習アプリケーションのアーキテクチャは、現時点ではこれが最適かも?

この記事が気に入ったらサポートをしてみませんか?