はじめに
Machine Learning Production Pitch #5 に参加させていただいたときのメモです。
Machine Learning Production Pitchとは
機械学習について業務で培った知見や経験や苦労話を共有できる場を提供することを目的としたMeetupです。機械学習に取り組み、実社会への適用に日々もがき苦しみ楽しんでいる方々を対象としております。 第5回のテーマは機械学習の「基盤」となります。機械学習を支えるインフラやSaaSについて紹介頂きます。
当日資料
https://machine-learning-pitch.connpass.com/event/154343/presentation/
メモ
gokartの紹介とgokartで失敗した事例
- M3 笹川さん
- データエンジニア。機械学習以外全部やる。
- M3では、各案件には、MLエンジニアとデータエンジニアが二人セットで入る
- gokart = spotifyのluigeをラップしたワークフローライブラリ
- 各クラスは、require,output,run から構成される
- taskごとに中間ファイルが生成される
- パラメータが同じで、すでにファイルがある場合は、スキップする
- ログ、ジョブのSlack通知はライブラリ側でサポート
- 型にハマったコードになるので、レビューが楽に
- CSで難しいことは、キャッシュの無効化と名前付け
- そもそもキャッシュは人類には早すぎる!
- なぜluigeか
- Digdagはイメージが大きくなる
- air-flowは、重厚でバグが多かった
- 一番シンプルなのがluigeだった
- Metaflowは?
- 試している
フリーランスだらけのML基盤開発
- MLチームにフリーランスが多い。正社員2人で、フリー7人。
- Fargate推論環境
- EKS推論環境
- develop/master -> 開発/本番
- イメージビルドはCircleCI
- フリーランスが多いPJの悩み
- 必ずしもML/サーバサイドどちらもできる、訳ではない
- -> インターフェースを固めて、コミュニケーションコストを減らす
- 画像推定処理と、API側で認識をそろえる
- imageのpillowでいく、とか
- コードの書き方を規定する
- 人が入れ替わっても、動く、読める
- 画像推定処理と、API側で認識をそろえる
楽しむために楽するアーキテクチャ
- 小売のプロダクト
- カメラで、人を特定。来店回数とか
- 運用で楽するためには?を考えた
- 年に一回作り変えるつもりでいる
- ステートレスとステートフルが混在するところが難しい
- ゴールデンウィークとか土日に負荷がかかる。サービス成長も
- カメラが変わったり、画角が変わったり
- 動画解析処理を、マイクロサービスのDAGとして実装
- DAGとして組むことで、変更が容易に
- キューの負荷を見て、オートスケールするように
- 冪等性を保ってリトライする
- ステートレスはいるが、ステートフルは厄介
- ロジック層とデータ層に分ける
- データ層はシンプルに
- 全部やらないといけない。忙しい。だから楽をする。
クックパッドでの機械学習デプロイ&データフロー
- 実験が終わったら、実験コードをノートブックからスクリプトに
- 実験が終わったら、dockerで動くように
- アノテーションされたデータの管理
- 推論バッチコンテナデプロイの仕組み
- コンテナをインフラ基盤にのせる
- Hako OSS
- 必要なファイルをPRベースで追加するだけ
- ECS Fargate
- パラメータストアから秘匿情報はとる
- Slackへの通知設定は自動
- Codebuildでビルド
- ECRにpush -> Fargateに
- マイクロサービス化しているので、他に迷惑をかけない
- 社内ツールはSREが管理してるが、OSS
- パッケージの管理
- pipでバージョンをfix
- pipenv
- イメージはpushしておくと、少なくとも動いた断面に戻せる