CybagerAgent AI事業本部 2023年度新卒研修 MLOps 基礎編で使用したスライドです。 MLOps応用編のスライド: https://speakerdeck.com/nsakki55/cyberagent-aishi-ye-ben-bu-mlopsyan-xiu-ying-yong-bian
©2023 CyberAgent Inc. Distribution prohibitedDynalyst 干飯 啓太MLOps基礎編
View Slide
©2023 CyberAgent Inc. Distribution prohibitedToday’s Schedule10: 00 - 12: 30: Container編13: 45 - 14: 45: MLOps基礎編15: 00 - 18: 30: MLOps応用編
©2023 CyberAgent Inc. Distribution prohibited本講義のゴール3持続可能なMLシステム
©2023 CyberAgent Inc. Distribution prohibited自己紹介干飯 啓太(ほしい けいた)略歴: 22卒 ML Engineer/Data Scientist所属: Dynalystタスク: DSPのロジック改善・MLOpsなど興味のある技術領域MLOps、ソフトウェアエンジニアリング4@hosimesi11_ @hosimesi
©2023 CyberAgent Inc. Distribution prohibitedアジェンダ51. MLOpsとは2. なぜMLOpsが必要なのか3. MLOpsレベル別紹介4. 推論システム紹介5. 学習ワークフロー紹介6. アンチパターン7. システムの品質担保8. 最後に
©2023 CyberAgent Inc. Distribution prohibitedアナウンス6本講義はMLOps基礎編で、実際に手を動かしてもらうのは応用編からになります実践編でもMLOpsの要件が入ってきますので、理解を深めておくとスムーズかと思います
©2023 CyberAgent Inc. Distribution prohibited01MLOpsとは7
©2023 CyberAgent Inc. Distribution prohibited01MLOpsとはの前にDevOpsとは8
©2023 CyberAgent Inc. Distribution prohibitedDevOpsとは9Googleによるとソフトウェアデリバリーの速度とサービスの信頼性の向上、ソフトウェアの関係者間で共有するオーナー権限の構築を目的とする、組織的で文化的な仕組み● デプロイの高速化● ソフトウェアの安定性の向上https://cloud.google.com/devops?hl=ja
©2023 CyberAgent Inc. Distribution prohibitedMLOpsとは10GoogleによるとMLOpsは、MLシステム開発(Dev)とシステム オペレーション(Ops)の統合を目的とする ML エンジニアリングの文化と手法MLOpsは、統合、テスト、リリース、デプロイ、インフラストラクチャ管理など、ML システム構築のすべてのステップで自動化とモニタリングを推進するhttps://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibitedMLOpsとは11GoogleによるとMLOpsは、MLシステム開発(Dev)とシステム オペレーション(Ops)の統合を目的とする ML エンジニアリングの文化と手法MLOpsは、統合、テスト、リリース、デプロイ、インフラストラクチャ管理など、ML システム構築のすべてのステップで自動化とモニタリングを推進する実際何すればいいの?https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibitedMLOpsを構成する要素12https://proceedings.neurips.cc/paper_files/paper/2015/file/86df7dcfd896fcaf2674f757a2463eba-Paper.pdfおおげさに書きすぎている部分もあるが、、、モデル作成はサービスの一部分であり、システム全体まで責務を持つ
©2023 CyberAgent Inc. Distribution prohibitedMLOpsのタスク13機械学習サービスを継続的に稼働させるために、他職種と協力して様々な基盤を構築する● データ基盤● ログ基盤● 学習基盤● 推論基盤● モニタリング基盤守備範囲が広すぎるように見えるが、1人ですべてできる必要はない
©2023 CyberAgent Inc. Distribution prohibited一般的に、機械学習サービスと呼ばれるものに対して思い浮かぶもの一般的な機械学習サービス14
©2023 CyberAgent Inc. Distribution prohibited実際の機械学習システム15
©2023 CyberAgent Inc. Distribution prohibitedMLOpsとは16つまり、MLOpsは● 継続的なテスト(CI)● 継続的なデプロイ(CD)● 継続的な学習(CT)● 継続的なモニタリング(CM)これらに+αでバージョン管理(コード、モデル)やインフラ管理もして、持続可能なMLシステムをつくること
©2023 CyberAgent Inc. Distribution prohibited02なぜMLOpsが必要なのか17
©2023 CyberAgent Inc. Distribution prohibited機械学習の価値18機械学習は推論して初めて価値を発揮● 推論した値そのもの○ CTR予測を使った入札● 推論した値を使った意思決定○ レコメンドオフライン検証での精度改善だけでは不十分で、実際にシステムに載せ、意図通りの推論をして初めてビジネス的な価値が生まれる
©2023 CyberAgent Inc. Distribution prohibited散乱する機械学習19このような経験はありませんか● 散乱したノートブック○ EDA的な部分も多くコードも複雑になりやすい● どのハイパラを使ったか分からない● どのモデルがどんな特徴量の処理を使ったか分からない● かろうじてコードはgitで管理
©2023 CyberAgent Inc. Distribution prohibitedMLシステム問題20この状態でシステムに載せた場合、様々な問題が起きる● モデルのバージョンが分からず、障害が起きた時に切り戻せない● 特徴量の変換が意図通り行われているか判断できない● 各個人のノートブックベースのコードになるので、コードの品質が担保できないその他にも● モデル精度の劣化に対応できない○ 時系列などで精度が劣化するため継続的に学習する必要性● テストの欠如
©2023 CyberAgent Inc. Distribution prohibitedなぜMLOpsが必要なのか21これらを全て手動ですると疲弊するかつ、実験サイクルのスピード低下➡ MLOpsを導入することで品質を担保しつつ、自動化してスケールさせる● 継続的なテスト(CI)● 継続的なデプロイ(CD)● 継続的な学習(CT)● 継続的なモニタリング(CM)
©2023 CyberAgent Inc. Distribution prohibited構成する要素と役割22CI/CD● 自動テスト・linterによるコード品質の担保、開発者体験の向上● 自動デプロイにより開発とデプロイのサイクルを高速化Continuous Training(CT)● 自動的なモデルの再学習● モデル精度の担保、評価Continuous Monitoring(CM)● 共変量シフトや意図しない入力による予測値の変化に対応する● レイテンシやリソースの異常に対応する
©2023 CyberAgent Inc. Distribution prohibited構成する要素(ML特有)23● ログ収集基盤・A/Bテスト基盤○ ログを貯めることで再学習に回す○ A/Bテストの結果を通じて意思決定する● バージョン管理○ 実験やモデルの再現性を担保○ システム・モデルを容易に元のバージョンに戻せる
©2023 CyberAgent Inc. Distribution prohibitedなぜMLOpsが必要なのか24いきなり全部はじめる必要はないモデルの更新頻度が多くないプロダクトの場合、ワークフローの優先度はそこまで高くない● モデルのバージョン管理等の方が優先度高い自分たちのプロダクトにあったものを優先度つけて取り入れることが重要
©2023 CyberAgent Inc. Distribution prohibited03レベル別MLOps25
©2023 CyberAgent Inc. Distribution prohibitedレベル別MLOps26Googleによると大きくMLOpsには大きく3つのフェーズレベル0: 手動プロセスレベル1: MLパイプラインの自動化レベル2: CI/CDパイプラインの自動化https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibitedレベル0: 手動フェーズ27https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibitedレベル0: 手動フェーズ28全てのプロセスを手動実行● データ準備・分析● モデル学習・モデルデプロイノートブック等でモデルを学習し、学習済みモデルを手動でデプロイモニタリングやバージョン管理は未導入DS/MLデータ収集・分析 モデル学習・評価 デプロイDS/MLDS/ML
©2023 CyberAgent Inc. Distribution prohibitedレベル1: MLパイプラインの自動化29https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibitedレベル1: MLパイプラインの自動化30自動化が進む● データ準備・分析: 自動化● モデル学習・モデルデプロイ: 自動化一方でパイプラインのテストやビルド・デプロイは手動のままデータ収集・分析 モデル学習・評価 デプロイ自動 自動 自動DS/MLコードのビルド・デプロイ
©2023 CyberAgent Inc. Distribution prohibitedレベル2: CI/CDパイプラインの自動化31https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibitedレベル2: CI/CDパイプラインの自動化32CI/CDが導入され、コードのテスト・ビルド・デプロイが自動化ワークフロー内での新モデルの検証やハイパーパラメータのチューニングなども自動化データ収集・分析 モデル学習・評価 デプロイ自動 自動 自動コードのビルド・デプロイ自動
©2023 CyberAgent Inc. Distribution prohibited実際に導入した後33MLシステムを作ったあと、MLシステムを定量的に評価したいオンラインで継続的に学習・推論を行う教師ありの機械学習システムの場合ML Test ScoreGoogleが提唱しているMLシステムを評価する仕組みhttps://storage.googleapis.com/pub-tools-public-publication-data/pdf/aad9f93b86b7addfea4c419b9100c6cdd26cacea.pdf
©2023 CyberAgent Inc. Distribution prohibitedML Test Score34以下の4つのカテゴリーでそれぞれ7項目あり、それらを点数づけ● 特徴量とデータについて● モデル開発について● MLのインフラについて● MLのモニタリングについてMLシステムを定量化することで、伸ばすべき部分を明確化興味のある方は以下のリンクを参考https://storage.googleapis.com/pub-tools-public-publication-data/pdf/aad9f93b86b7addfea4c419b9100c6cdd26cacea.pdf
©2023 CyberAgent Inc. Distribution prohibitedレベル別MLOps35紹介したMLOpsレベルはあくまで参考であり、これだけが正ではないBig Techを模倣するとオーバースペックになりがちなので、実際のプロダクトのニーズに優先度をつけて小さく取り組むことが大事
©2023 CyberAgent Inc. Distribution prohibitedMLOpsのコンポーネント36MLOpsを構成するもののうち、重要なコンポーネントについてもう少し詳しく紹介する1. 推論パターン2. 学習ワークフロー3. A/Bテストパターン
©2023 CyberAgent Inc. Distribution prohibited04推論パターン紹介37
©2023 CyberAgent Inc. Distribution prohibited推論パターンひとくちに推論といっても用途によって様々● 推論アーキテクチャも複数存在● モデルのデプロイ方法も複数存在機械学習システムデザインパターンを例に、一般的なWebアプリケーションや実践編で作るDSPを例に紹介コードをいくつか例示しますが、クレデンシャルや特徴量の前処理の部分は省略していますhttps://mercari.github.io/ml-system-design-pattern/README_ja.html
©2023 CyberAgent Inc. Distribution prohibited紹介するパターン推論アーキテクチャ● リアルタイム推論● バッチ推論● 非同期推論モデルデプロイ方法● モデルビルドイン● モデルロードA/Bテスト基盤● アプリケーションレベル● ネットワークレベル
©2023 CyberAgent Inc. Distribution prohibitedリアルタイム推論用途:インタラクティブに処理する必要がある場合や、推論結果を使用した処理が走る場合に使われる方法例● RTBにおけるCTR・CVR予測● リアルタイムでの異常検知https://mercari.github.io/ml-system-design-pattern/Serving-patterns/Synchronous-pattern/design_ja.html
©2023 CyberAgent Inc. Distribution prohibitedリアルタイム推論シンプルな推論アーキテクチャ特徴量変換・推論をパイプライン的にリアルタイムに行うhttps://mercari.github.io/ml-system-design-pattern/Serving-patterns/Synchronous-pattern/design_ja.html
©2023 CyberAgent Inc. Distribution prohibitedリアルタイム推論モデルを複数使いたい場合は前段に振り分けるためのProxyサーバを置いて、コンテナレベルで分けたり、同じアプリケーションで振り分けてもOK
©2023 CyberAgent Inc. Distribution prohibitedバッチ推論用途:リアルタイムに推論する必要がなく、毎時やデータ追加などイベントをトリガーに定期的に溜まったデータを推論した時に用いられる方法例● 広告文をデータが溜まったタイミングで一括で自動生成する● 推薦システムで一括でベクトルを更新するツール● DWH(Snowflake、Redshift)・Workflow Tool(Airflow、Prefect)https://mercari.github.io/ml-system-design-pattern/Serving-patterns/Batch-pattern/design_ja.html
©2023 CyberAgent Inc. Distribution prohibitedDWH等の推論対象を含むデータストアからデータを抽出し、特徴量変換・推論をして、DB等に格納する推論処理自体はリアルタイム推論と同じhttps://mercari.github.io/ml-system-design-pattern/Serving-patterns/Batch-pattern/design_ja.htmlバッチ推論
©2023 CyberAgent Inc. Distribution prohibited非同期推論用途:計算量が多く、推論してからレスポンスを返すとブラウザのタイムアウトに間に合わない場合などに非同期で処理する方法リクエストと推論器の間にMQやキャッシュを入れる例● ユーザからの設定や入力によって、MLモデルを学習させるWebサービスツール● キュー(RabbitMQ、Kafka)・キャッシュ(Redis)https://mercari.github.io/ml-system-design-pattern/Serving-patterns/Asynchronous-pattern/design_ja.html
©2023 CyberAgent Inc. Distribution prohibited非同期推論非同期で処理するため、キューにメッセージを送信し、クライアントにはリアルタイムでレスポンスを返す別サーバで推論を行い、クライアントとはDBやキューを介して結果を共有https://mercari.github.io/ml-system-design-pattern/Serving-patterns/Asynchronous-pattern/design_ja.html
©2023 CyberAgent Inc. Distribution prohibitedそれぞれのメリット● リアルタイム推論○ リアルタイムで処理する必要があるものは一択● バッチ推論○ サーバの常時稼働が必要ないことによるコスト削減○ 失敗した場合のリトライ○ 並列実行● 非同期推論○ 推論基盤を切り離せ、MLとその他で疎結合なシステム■ 依存関係■ サーバのリソース
©2023 CyberAgent Inc. Distribution prohibitedデプロイ方法1. モデルビルドインa. Dockerのビルド時にモデル保存先のフォルダごとコピーし、イメージの中にモデルごと入れ込む方法2. モデルロードa. Dockerのビルド時にはモデルを入れ込まず、エントリーポイントの実行時などに外部ストレージから取得
©2023 CyberAgent Inc. Distribution prohibitedモデルビルドパターンfiles直下の学習済みモデルをビルド時に入れる起動させる時に、ローカルフォルダに置いているモデルを展開するFROM python:3.9.16-slimWORKDIR /appCOPY requirements requirementsRUN pip install --upgrade pip \&& pip install -r requirements/requirements.bid.txtCOPY ../src /app/srcCOPY ../logs /var/logCOPY ../files /app/filesENV AWS_DEFAULT_REGION ap-northeast-1app = FastAPI()MODEL_FILE_DIR = "files"def load_model(model_file_name: str) -> object:with open(os.path.join(MODEL_FILE_DIR, model_file_name), "rb") as f:model = pickle.load(f)return modelmodel = load_model(model_file_name="model.pkl")@app.get("/")def health_check():return {"Hello": "World"}
©2023 CyberAgent Inc. Distribution prohibitedモデルビルドインメリット● サーバとモデルを一つのイメージで管理可能なため、イメージのバージョン管理のみに集約可能デメリット● イメージ分のサイズがモデル分大きくなるのでビルドに時間がかかる○ 複数モデルは載せにくい○ 一般的にイメージは軽量の方が良いので、この方法だとあまりスケールしない
©2023 CyberAgent Inc. Distribution prohibitedモデルロードモデルは外部ストレージ(S3など)においておき、起動時にダウンロードして展開FROM python:3.9.16-slimWORKDIR /appCOPY requirements requirementsRUN pip install --upgrade pip \&& pip install -r requirements/requirements.bid.txtCOPY ../src /app/srcCOPY ../logs /var/logRUN mkdir /app/filesENV AWS_DEFAULT_REGION ap-northeast-1app = FastAPI()S3_BUCKET = "s3_bucket"def fetch_model(s3_bucket: str, s3_key: str) -> Any:s3 = boto3.resource("s3")bucket = s3.Bucket(s3_bucket)byte_obj = bucket.Object(s3_key).get()["Body"].read()return pickle.loads(byte_obj)model = fecth_model(s3_bucket=S3_BUCKET, s3_key="path/to/model")@app.get("/")def health_check():return {"Hello": "World"}
©2023 CyberAgent Inc. Distribution prohibitedモデルロードメリット● サーバとモデルを分離して管理可能なため、柔軟なイメージ管理が可能● サーバイメージの軽量化デメリット● サーバイメージとモデルのバージョン管理が必要になり、依存関係も注意する必要あり
©2023 CyberAgent Inc. Distribution prohibitedA/Bテスト基盤何かの施策の効果検証の際、A/Bテストがよく使用されるが、A/Bの基盤もいくつか存在CTR予測モデルAとBのA/Bテストをしたい時● トラフィックレベルの振り分け● アプリケーションレベルの振り分け
©2023 CyberAgent Inc. Distribution prohibitedトラフィック振り分けモデルごとにエンドポイントをわけ、プロキシサーバからのトラフィックを分割切り戻しが容易で他のモデルの影響(サーバのリソースなど)を受けにくい
©2023 CyberAgent Inc. Distribution prohibitedアプリケーション振り分け同一エンドポイントに複数モデルを載せ、アプリケーション内でどのモデルを使うかを振り分けスケール戦略やA/Bの設定が楽
©2023 CyberAgent Inc. Distribution prohibitedA/Bテストのログ収集A/Bテストや推論ログの蓄積のため、推論用のコンテナとログ収集用のコンテナをサイドカーとして一つのサーバにデプロイするような構成もある
©2023 CyberAgent Inc. Distribution prohibited05学習ワークフロー紹介57
©2023 CyberAgent Inc. Distribution prohibited学習ワークフロー概略学習ワークフローを構成するStep● Extract step● Validate data step● Preprocess step● Train step● Evaluate step● Validate model step
©2023 CyberAgent Inc. Distribution prohibited学習ワークフローExtract step● データをストレージ(DWHなど)から抽出Validate data step● データのスキーマが変わっていないか● 過去とデータの分布が変わっていないかPreprocess step● モデルを学習させるための前処理https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibited学習ワークフローTrain step● モデルの学習Evaluate step● 学習済みモデルのテストデータでの予測値を評価● 現在のモデルと新モデルの比較○ 優れている場合のみデプロイなどValidate model step● インフラとの互換性やAPIとの整合性を担保https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning?hl=ja
©2023 CyberAgent Inc. Distribution prohibited06アンチパターン61
©2023 CyberAgent Inc. Distribution prohibitedアンチパターン1いきなり大きく作り始める● 初めから全ての自動化に取り組むのは筋が悪い● MLOpsの開始時は投資的な意味合いが大きくなる(定量的に改善具合を示しにくい)のでPoCと同様に小さく作る● Big Techに寄せなくてよく、自分たちのプロダクトの重要な課題のみにフォーカスする
©2023 CyberAgent Inc. Distribution prohibitedアンチパターン2運用を考えた設計になっていない● 少人数なチームの場合、k8sなどリッチな環境を整えても運用できる人がいないと意味がない● 導入後の運用工数まで意識する
©2023 CyberAgent Inc. Distribution prohibitedアンチパターン3コストを度外視しており、とりあえず機械学習を入れようとする● 機械学習は負債になりやすいので、導入すべきかはよく検討する○ 機械学習導入による削減コストと人的コストの場合のみ導入する■ 機械学習導入による削減コスト > 人的コスト● 一般的に大規模モデルほど精度が向上するがコスト↑○ 精度向上による利益 > コスト(インフラ代)の場合のみ導入する■ 単純な線形モデル等も検討に入れる
©2023 CyberAgent Inc. Distribution prohibited07システムの品質を担保する65
©2023 CyberAgent Inc. Distribution prohibitedモニタリングシステムが正常に動作しているかモニタリングし、適切にアラートをあげる学習● データ数・分布● オフライン評価推論● 予測値● インフラのメトリクス● レスポンスタイム・QPS● オンライン評価
©2023 CyberAgent Inc. Distribution prohibited負荷試験いざ推論サーバを立てた時に性能が足りず頓挫しないように事前に必要要件を定義し、負荷試験をする実際の想定より厳しめに負荷試験をすることで、サービスの品質を担保する問題があった際、ボトルネックの切り分けを行う重要なことは、ボトルネックの特定のみならず、原因特定のための必要なメトリクスが取れていることも意識する→ 実運用時の早急な障害対応の観点
©2023 CyberAgent Inc. Distribution prohibitedボトルネックの解消アプリケーション側がボトルネックの場合、該当箇所を特定する1. Profiler(※)を使ってボトルネックを特定する2. ボトルネックを解消するa. コンピュートリソースを増強するb. アルゴリズムを変更するc. キャッシュを入れるd. コードレベルで最適化する(C++、Cython)※ Appendixに記載
©2023 CyberAgent Inc. Distribution prohibited08最後に69
©2023 CyberAgent Inc. Distribution prohibited最後に70○ MLを本当に使うべきかを考える○ ゴールはビジネス課題の解決であって、MLサービスを作ることではない○ MLを導入した時のコストと解決できるコストを評価する○ 小さく作り始める○ いきなり完成系を目指すのではなく、小さく作り始める■ デプロイは手動・簡単な線形モデルから○ コミュニケーションを忘れない○ 守備範囲が広く1人ではできないからこそ、チームメンバー(Biz、SWE、DS)と適切にコミュニケーションを取り、すり合わせる
©2023 CyberAgent Inc. Distribution prohibited09参考71
©2023 CyberAgent Inc. Distribution prohibited参考図書72機械学習システムデザインパターン● 本スライドの元にしている本● MLOpsのモチベーションからシステムまで実装多めに網羅しているClean Architecture● システム設計で気を付けるべきことを記述している興味があれば手に取ってみてください
©2023 CyberAgent Inc. Distribution prohibited参考リンク73● GoogleによるMLシステムの全体像● Google MLOps● Azure MLOps● AWS MLOps● メルカリ機械学習デザインパターン
©2023 CyberAgent Inc. Distribution prohibited10Appendix74
©2023 CyberAgent Inc. Distribution prohibitedプロファイラPythonではプロファイラとしてcProfileが提供されている各部分の呼び出し回数や実行時間の統計情報を記録(statsファイルとして吐き出せる)https://docs.python.org/ja/3/library/profile.htmlimport cProfiledef sum_func(a: int, b: int) -> int:return a + bdef main():profiler = cProfile.Profile()n = profiler.runcall(sum_func, 1, 2)profiler.dump_stats("./sum_func.stats")if __name__ == "__main__":main()
©2023 CyberAgent Inc. Distribution prohibitedプロファイラstatsをgprof2dotでpngに変換すると、ボトルネック箇所を特定可能$ gprof2dot -f pstats {stats_file_name}.stats | dot -Tpng -o output.png
©2023 CyberAgent Inc. Distribution prohibited