Airflow+SageMakerで安定稼動する機械学習バッチインフラへ
Airflow+SageMakerで安定稼動する機械学習バッチインフラへテク戦MLOpsチーム 古賀
View Slide
自己紹介古賀悠太(4年目)、テクノロジー戦略室MLOpsチーム機械学習周辺のシステムの開発/運用- レコメンドAPIの実装- 機械学習パイプラインの実装ほんと時間ないので、プロフィール貼っときますhttps://lvgs.docbase.io/posts/1267498
話すこと- 機械学習バッチが増えても、安定して動き、運用工数がなるべくかからないシステム構成
旧システムでのデータサイエンティスト開発/運用状況
旧システムでのデータサイエンティスト開発/運用状況怪しい匂い・開発環境と本番環境を兼ねてる・なるべく被らないように、定期実行設定(機械学習はメモリ食うので)
何が辛いの?- バッチ数が増えると、実行時間を被らせないのが大変に- 可用性の懸念- 実行時間が被ると、共倒れする- 機械学習はリソース食うので、共倒れ発生しやすい- 運用工数の懸念- そもそも何がいつ実行されているのか管理必要- 一度書いて終わりじゃないサーバー使用表の抜粋
解決策- 各バッチのインフラを分離- 死んでも他へは影響しない →共倒れしない- 実行時間が被っても良いので、好きなタイミングで実行できる →他のバッチを考えなくて良い
導入技術Airflow- スケジューラー- Pythonで実行タイミングと処理を記述- 今回は順次ワーカーを起動するだけAWS SageMaker Processing Job- ワーカー- ECSタスクみたいなもの- Dockerイメージをpullして実行- CPU / GPU / メモリを指定可能
システム構成とデプロイフロー※開発はまだGCE。許して。
Airflowの他のメリット- 依存関係定義が楽- コストカット- 必要なリソースだけ稼動するので- リトライ設定簡単- 通知設定簡単- 実行履歴やログ見れるなどなど Pythonでの定義taskA >> [taskB, taskC] >> taskD
まとめ- 機械学習バッチが増えても、安定して動き、運用工数がなるべくかからないシステム構成にできた- 役割で分割して、負荷面のスケーラビリティを担保する手法はよくある- Message QueueとかDBのWriter / Readerとか- イケテナイシステムにも敬意を持ちたい