Slide 1

Slide 1 text

Airflow+SageMakerで安定稼動す る機械学習バッチインフラへ テク戦MLOpsチーム 古賀

Slide 2

Slide 2 text

自己紹介 古賀悠太(4年目)、テクノロジー戦略室 MLOpsチーム 機械学習周辺のシステムの開発 /運用 - レコメンドAPIの実装 - 機械学習パイプラインの実装 ほんと時間ないので、プロフィール貼っときます https://lvgs.docbase.io/posts/1267498

Slide 3

Slide 3 text

話すこと - 機械学習バッチが増えても、安定して動き、運用工数がなるべくかからないシステ ム構成

Slide 4

Slide 4 text

旧システムでのデータサイエンティスト開発/運用状況

Slide 5

Slide 5 text

旧システムでのデータサイエンティスト開発/運用状況 怪しい匂い ・開発環境と本番環境を兼ねてる ・なるべく被らないように、定期実行設定 (機械学習はメモリ食うので)

Slide 6

Slide 6 text

何が辛いの? - バッチ数が増えると、実行時間を被らせないのが大変に - 可用性の懸念 - 実行時間が被ると、共倒れする - 機械学習はリソース食うので、共倒れ発生しやすい - 運用工数の懸念 - そもそも何がいつ実行されているのか管理必要 - 一度書いて終わりじゃない サーバー使用表の抜粋

Slide 7

Slide 7 text

解決策 - 各バッチのインフラを分離 - 死んでも他へは影響しない →共倒れしない - 実行時間が被っても良いので、好きなタイミングで実行できる →他のバッチを考えなくて良い

Slide 8

Slide 8 text

導入技術 Airflow - スケジューラー - Pythonで実行タイミングと処理を記述 - 今回は順次ワーカーを起動するだけ AWS SageMaker Processing Job - ワーカー - ECSタスクみたいなもの - Dockerイメージをpullして実行 - CPU / GPU / メモリを指定可能

Slide 9

Slide 9 text

システム構成とデプロイフロー ※開発はまだGCE。許して。

Slide 10

Slide 10 text

Airflowの他のメリット - 依存関係定義が楽 - コストカット - 必要なリソースだけ稼動するので - リトライ設定簡単 - 通知設定簡単 - 実行履歴やログ見れる などなど Pythonでの定義 taskA >> [taskB, taskC] >> taskD

Slide 11

Slide 11 text

まとめ - 機械学習バッチが増えても、安定して動き、運用工数がなるべくかからないシステ ム構成にできた - 役割で分割して、負荷面のスケーラビリティを担保する手法はよくある - Message QueueとかDBのWriter / Readerとか - イケテナイシステムにも敬意を持ちたい