Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Machine learning microservice_management

Machine learning microservice_management

Machine learning system in production, deployed as microservice architecture and managed with DevOps method.

shibuiwilliam

March 15, 2022
Tweet

More Decks by shibuiwilliam

Other Decks in Technology

Transcript

  1. 自己紹介 Yusuke Shibui ◦ @shibuiwilliam or @cvusk ◦ AI Engineering

    SysML Engineering Manager Platform Engineer ML Engineer cat : 0.55 dog: 0.45 human : 0.70 megane : 0.30 Object Detection 2
  2. メルカリの機械学習 簡単な 売買 安心な 売買 3月 出品検知システム(商品) 7月 商品通報の識別 12月

    出品検知システム(商品)    アップデート 8月 価格推定 10月 AI出品 10月 AI商品サイズ推定( US) 11月 Kaggleコンペ開催 (US価格推定) 3月 AI出品(US) 4月 AI出品(本, CD, DVD等) 6月 (バーコード出品) 2月 違反検知システム(取引) 3月 年齢確認商品の検出 7月 違反検知システム(取引) 1月 登録情報監視 3月 AI写真検索 春 価格推定機能の   アップデート 2017 2018 2019 7
  3. メルカリのMLエンジニアとSysml データ収集 モデル作成 予測サーバ作成 システム運用 ML Engineer SysML / ML

    Ops 画像 テキスト インテグレーション プラットフォーム開発 約20名 約10名 9
  4. MLプラットフォームLykeion Istio & Kubernetes Sysmlとは Istio & Kubernetes • 機械学習のワークフローをカバーするプラットフォーム

    Lykeion(リュケイオン)を独自開発 • コンテナ・ワークフローによる学習プロセス • オンライン・アップデートを可能とする推論システム k8s job k8s job k8s job k8s job Docker Image with model Data retrieval Preprocess Training Evaluation Deployment A/B Test Serving Ready to go! Build Improve Model file Deploy A Deploy B Virtualservice Destinationrule Gateway Mercari 11
  5. ビジネスで考える • 機械学習の価値 ◦ ✕ テストデータのパフォーマンス(AccuracyやRMSE等) ◦ ◦ ビジネスへの還元 • 機械学習を実用的に使えるようにすることがSysmlのミッション

    • 良い機械学習システム ◦ モデルを簡単にリリースし、改善することができる ◦ システムが安定稼働し、システム、モデル両方の障害対応ができる 13
  6. システムで考える Lykeion Istio & Kubernetes Istio & Kubernetes • 個々のサービスがマイクロサービスとなった拡張性あるアーキテクチャ

    • 複数のモデルで構成されるサービスは内部もマイクロサービスとなっている • 今日はこのアーキテクチャにたどり着くまでの汗と涙に満ちた話をします MLプラットフォーム Lykeion 価格推定 出品検知 写真検索 kyc 14 AI出品
  7. 出品検知 • 出品された商品から特定種類のものを検知する。 • 1システムで複数の機械学習モデルを稼働。 出品検知のワークフロー ② 規約違反や分類対象の   商品を検知

    ① 商品出品 ③ カスタマーサポートで 通知された商品を確認 通常商品 検知システム 16 規約違反商品 × カスタマー サポート
  8. • 出品された商品から特定種類のものを検知する。 • 履歴 ◦ 2017年12月 第1.0版 リリース ◦ 2018年4月

    第1.1版 拡張 ◦ 2018年10月 第1.2版 ディープラーニングモデル稼働 ◦ 2019年2月 第2.0版 マイクロサービス化 出品検知 17
  9. • 第1.0版のシステム構成 ◦ 1deploymentに多クラス分類が1個 ◦ モノリシックな非同期推論システム ◦ 運用は楽 出品検知 違反A

    10% 違反B 30% 違反C 20% ・・・ xx% Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess multiclass classifier Queue CS dataset Docker Image with model Data retrieval Preprocess Training Evaluation 学習 推論 multiclass classifier 18
  10. • 第1.0版の課題 ◦ もっと高精度に検知したい出品がある 出品検知 違反A 10% 違反B 30% 違反C

    20% ・・・ xx% Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess multiclass classifier Queue CS dataset Docker Image with model Data retrieval Preprocess Training Evaluation 学習 推論 multiclass classifier 要改善 19
  11. • 第1.1版のシステム構成 ◦ 特定の検知を2値分類にして強化 ◦ 多クラス分類+2値分類 ◦ まだモノリシックだけど、運用は楽 出品検知 違反A

    10% 違反B 30% 違反C 20% ・・・ xx% Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess Queue CS dataset Docker Image with model Data retrieval Preprocess Training Evaluation 学習 multiclass classifier binary classifier multiclass classifier binary classifier 推論 20
  12. • 第1.1版の課題 ◦ もっと高精度に検知するために画像、テキストによる出品検知が必要 最優先 ◦ 個別モデルの再学習、更新ができない ◦ モデル追加・更新には全モデルの再学習が必要になる 出品検知

    違反A 10% 違反B 30% 違反C 20% ・・・ xx% Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess Queue CS dataset Docker Image with model Data retrieval Preprocess Training Evaluation 学習 推論 multiclass classifier binary classifier multiclass classifier binary classifier 要改善 21
  13. • 第1.2版:ディープラーニングと Istioの投入 ◦ TF serving推論Docker imageを個々のディープラーニングモデル用にビルド ◦ 前処理とsklearnモデルは1個のDocker imagesに集約し、リソース効率化

    ◦ ディープラーニングのみ独立した Docker imageとする ◦ IstioによるA/Bテストのサポート 出品検知 dataset Docker Image with model and preprocess for DL 学習 multiclass classifier binary classifier Docker Image with model deeplearning classifier 22 Data retrieval Training Evaluation Training Evaluation Preprocess Preprocess Docker Image with model deeplearning classifier Training Evaluation Preprocess
  14. 出品検知 違反A 10% 違反B 30% 違反C 20% ・・・ xx% CS

    推論 Queue Istio virtualservice destinationrule • 第1.2版:ディープラーニングと Istioの投入 ◦ TF serving推論Docker imageを個々のディープラーニングモデル用にビルド ◦ 前処理とsklearnモデルは1個のDocker imagesに集約し、リソース効率化 ◦ ディープラーニングのみ独立した Docker imageとする ◦ IstioによるA/Bテストのサポート 90% 10% 23 旧モデル 新モデル
  15. Group deployment proxy • 第1.2版のシステム構成 ◦ ディープラーニングを複数投入:画像、テキストによる検知 ◦ Istioとプロキシ追加:複数推論器へのアクセスを集約 出品検知

    違反A 10% 違反B 30% 違反C 20% ・・・ xx% CS dataset 学習 推論 Docker Image with model deeplearning classifier Queue Istio virtualservice destinationrule Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess multiclass classifier binary classifier image preprocess Deploy uwsgi+flask Deploy uwsgi+flask Deploy tfserving deeplearning classifier Docker Image with model and preprocess for DL multiclass classifier binary classifier 24 Data retrieval Training Evaluation Training Evaluation Preprocess Preprocess Docker Image with model deeplearning classifier
  16. Group deployment proxy • 第1.2版の課題 ◦ 個別モデルの再学習、更新ができない ◦ モデル追加には全モデルの再学習が必要になる ◦

    前処理とディープラーニングが 1:1のデプロイになっていない 出品検知 違反A 10% 違反B 30% 違反C 20% ・・・ xx% CS dataset 学習 推論 Queue Istio virtualservice destinationrule Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess multiclass classifier binary classifier image preprocess Deploy uwsgi+flask Deploy uwsgi+flask Deploy tfserving deeplearning classifier Docker Image with model and preprocess for DL multiclass classifier binary classifier 25 Data retrieval Training Evaluation Training Evaluation Preprocess Preprocess 要改善 Docker Image with model deeplearning classifier Docker Image with model deeplearning classifier モノリ シック
  17. 出品検知 • 第1.2版の課題例:学習と推論で精度が大きく違うことがある ◦ 学習データの境界値サンプリング不足  ▪ 犬っぽい犬、猫っぽい猫だけでなく、猫っぽい犬、犬っぽい猫が必要。 ◦ 学習と推論でデータ型やスケールを一致させない誤り dataset

    学習 Docker Image with model Accuracy 99% Precision 98% Recall 99% →毎日数千件の  誤検知 Group deployment proxy 推論 Queue Istio virtualservice destinationrule Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess multiclass classifier binary classifier image preprocess Deploy uwsgi+flask Deploy uwsgi+flask Deploy tfserving deeplearning classifier float32で学習 float16で推論 しかしこの修正を リリースするには 1ヶ月かかる 27 Data retrieval Training Evaluation Training Evaluation Preprocess Preprocess 間違いやすい境界値 を無視したランダム サンプリング
  18. Group deployment proxy 推論 Queue Istio virtualservice destinationrule Deployment uwsgi+flask categorical

    preprocess text preprocess numerical preprocess multiclass classifier binary classifier image preprocess Deploy uwsgi+flask Deploy uwsgi+flask Deploy tfserving deeplearning classifier 出品検知 dataset 学習 Docker Image with model Accuracy 99% Precision 98% Recall 97% OOM! • 第1.2版の課題例:起動の遅い前処理と Out of memory ◦ Tfidf vectorizerのpickleが不要なstop-wordで容量肥大化 ◦ 細長い画像のリサイズで RAM圧迫 最小限の CPU/RAM 豊富な リソース 28 しかしこの修正を リリースするには 1ヶ月かかる Data retrieval Training Evaluation Training Evaluation Preprocess Preprocess
  19. 出品検知 違反A 10% 違反B 30% 違反C 20% ・・・ xx% CS

    推論 Queue Istio virtualservice destinationrule • 第1.2版の課題例:Istio Virtualserviceの分散ロードによるA/Bテスト、オンラインリリース ◦ この実装だと全デプロイメントを A/Bテストすることになる ◦ 学習結果が安定しないから A/Bテストしつつ並行して再学習 Virtualserviceにより 複数エンドポイントに 分散ロード可能 10% 90% 学習 いろいろやり直すため、 1ヶ月かかる dataset 29 旧モデル 新モデル Data retrieval Training Evaluation Training Evaluation Preprocess Preprocess
  20. Group deployment proxy • 第1.2版の課題 ◦ 個別モデルの再学習、更新ができない ◦ モデル追加には全モデルの再学習が必要になる ◦

    前処理とディープラーニングが分かれた構成 出品検知 違反A 10% 違反B 30% 違反C 20% ・・・ xx% CS dataset Docker Image with model 学習 推論 multiclass classifier binary classifier Docker Image with model deeplearning classifier ... Queue Istio virtualservice destinationrule Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess multiclass classifier binary classifier image preprocess Deploy uwsgi+flask Deploy uwsgi+flask Deploy tfserving deeplearning classifier 要改善 Data retrieval Preprocess Training Evaluation Training Evaluation Road to release and update deep learning (つまりは愚痴) • grpc, tfserving用のライブラリ、 Docker Image開発 • 不安定な学習 ◦ 同じデータとパラメータで学習しても同じ評価値のモデルができるとは限らない • 一括デプロイメント ◦ 全モデルを一括してリリースするアーキテクチャのため、一つでも悪いモデルがあると全モデルの学習をやり直し • データ型 ◦ 学習と推論で異なるコーディングになる一方、入力と前処理は型を一致させる( Pythonで忘れがち) • ディープラーニングの推論スピード ◦ ピーク時間での出品数を処理しきれないからモデルをダイエットしたいが、更新に 1ヶ月かかるからスケジュールが組めない • 各デプロイメントに分散しているログ ◦ 障害箇所の特定に時間がかかる • 学習では概ね良い結果がでているけど、特定の出品に弱い推論器 ◦ 学習、評価時に誤検知しやすいデータのサンプリングが不充分 • その他、トラブルシューティングしまくってリリースした後の謎の達成感 ◦ 「こんな難しいことできるオレかっこいい」症候群 Data retrieval Preprocess Training Evaluation Deployment A/B Test Serving Ready to go! Build Improve 30
  21. Lykeion Istio & Kubernetes システムで考える Istio & Kubernetes • A/Bテスト以前に、学習と推論の差異(開発環境と本番環境の差異)を埋める

    QAが必要 ◦ オフラインテストの結果がオンライン推論と大きく乖離 ◦ ユニットテストを書けない機械学習モデルこそ、マニュアルでのオンラインテストが必要 Docker Image with model Data retrieval Preprocess Training Evaluation A/B Test Serving Ready to go! Build Improve Deploy A Deploy B Virtualservice Destinationrule Gateway Mercari QA Deployment k8s job k8s job k8s job k8s job Model file 31
  22. システムで考える • 機械学習モデルを本番システムにリリースするための QAを用意 ◦ Kubernetesのマニフェスト ◦ REST APIはGETとPOST必須 ▪

    GRPC、RESTのLiveness Probe、Readiness Probe ◦ オンラインでの推論試験、境界値試験 ▪ 正例、負例 ▪ 間違いやすい正例、間違いやすい負例 ▪ 画像:白黒、異常に細長い、被写体が真ん中にない、「〜〜様専用」のみ ▪ テキスト:顔文字、単語の羅列、スペック表、異常に短い or長い ◦ オンラインでのパフォーマンス試験、負荷試験 ◦ 可読性のあるログ ◦ 障害監視、アラート ◦ 結合試験 32
  23. 出品検知 • 推論デプロイメントの分割 • そのために学習プロセスの依存関係を分割 dataset 学習 Group deployment proxy

    推論 Queue Istio virtualservice destinationrule Deployment uwsgi+flask categorical preprocess text preprocess numerical preprocess multiclass classifier binary classifier image preprocess Deploy uwsgi+flask Deploy uwsgi+flask Deploy tfserving deeplearning classifier 推論器を分 割 依存関係を 分割 Docker Image with model and preprocess for DL multiclass classifier binary classifier 33 Data retrieval Training Evaluation Training Evaluation Preprocess Preprocess Docker Image with model deeplearning classifier Docker Image with model deeplearning classifier
  24. • 第2.0版のシステム構成 ◦ 全モデルを個別学習、個別デプロイメントにするマイクロサービス・アーキテクチャ 出品検知 違反A 10% 違反B 30% 違反C

    20% ・・・ xx% CS 推論 proxy ML model deployment Istio virtualservice ML model deployment Istio virtualservice Queue dataset 学習 Data retrieval Preprocess Training Evaluation Preprocess Image Model Image Data retrieval Preprocess Training Evaluation Preprocess Image Model Image Data retrieval Preprocess Training Evaluation Preprocess Image Model Image ML model deployment Istio virtualservice Preprocess deployment ML model deployment Istio virtualservice Preprocess deployment 34
  25. • 第2.0版のシステム構成 ◦ 全モデルを個別学習、個別デプロイメントにするマイクロサービス・アーキテクチャ ◦ 個別モデルのオンライン A/Bテストと無停止アップデート 出品検知 違反A 10%

    違反B 30% 違反C 20% ・・・ xx% CS 推論 proxy ML model deployment Istio virtualservice Queue dataset 学習 Data retrieval Preprocess Training Evaluation Preprocess Image Model Image ML model deployment Istio virtualservice Preprocess deployment ML model deployment Preprocess deployment 90% 10% 35 1リリース10分に短縮