MLOps
MLOps ・ えむえるおぷす
機械学習モデルの学習・デプロイ・監視・再学習を、継続的に回し続けるための実践。
✦ 30秒で試す — 航海コードを1行も変えていないのに、モデルが壊れていくこのとき、入力の分布を見張る警報は?予想してみる概要
MLOps(Machine Learning Operations)は、機械学習モデルの開発から本番運用までを、継続的かつ再現可能に回すための実践の総称です。データの収集と前処理、モデルの学習と評価、デプロイ、本番での監視、そして性能が落ちたときの再学習 — このサイクル全体をパイプラインとして自動化・標準化することを目指します。DevOps がアプリケーションの開発と運用の壁を壊したように、MLOps はデータサイエンティストの実験とエンジニアの本番運用の壁を壊す取り組みです。
機械学習プロジェクトの難しさは「モデルを作ること」よりも「作ったモデルを本番で動かし続けること」にあります。Notebook(Jupyter などの対話的な実験環境)では良い精度が出たのに本番に持っていけない、半年前のモデルを再現できない、いつの間にか精度が劣化していたことに誰も気づかない — こうした「本番化の谷」を埋める方法論として、MLOps は2010年代後半に急速に体系化されました。
なぜ生まれたか
ソフトウェアの世界には CI/CD やバージョン管理という成熟した仕組みがありましたが、機械学習はそのままでは乗りませんでした。理由は、システムの振る舞いを決める要素がコードだけではないからです。同じコードでも学習データが変われば別のモデルができ、同じデータでも乱数シードやハイパーパラメータ(学習率など、人が決める設定値)が違えば結果が変わります。成果物が「コード×データ×設定」の掛け算で決まるのに、Git で管理できるのはコードだけ。実験は Notebook に散らばり、「あの精度が出たモデル、どのデータとどの設定で作ったんだっけ」が誰にも分からなくなるのが常態でした。
さらに深刻なのは、デプロイして終わりにならないことです。普通のソフトウェアは仕様が変わらなければ動き続けますが、モデルは世界の側が変わると壊れます。ユーザーの行動、市場、季節 — 学習時のデータと本番の入力がずれていく「ドリフト」によって、コードを1行も変えていないのに精度が静かに落ちていくのです。Google の Sculley らは2014年のワークショップ論文「Machine Learning: The High-Interest Credit Card of Technical Debt」で、機械学習は技術的負債を高利で借りるクレジットカードのようなものだと警告し、2015年の NeurIPS 論文「Hidden Technical Debt in Machine Learning Systems」で、データへの依存、境界の曖昧さ、学習と配信のずれ、周辺のパイプラインの肥大化といった機械学習特有の負債を整理しました。こうした劣化と複雑さに対処する運用体系として、DevOps の思想を機械学習へ広げた MLOps が形になりました。
詳細
3軸のバージョン管理と継続的なループ
MLOps の出発点は、再現性のために「コード・データ・モデル」の3つを揃えてバージョン管理することです。コードは Git で管理できますが、数百 GB のデータセットや学習済みモデルはリポジトリに入りません。そこでデータには DVC や lakeFS のようなデータバージョニングの道具、モデルには「モデルレジストリ」(学習済みモデルを、使ったデータ・コード・設定・評価指標と紐付けて登録する台帳)を使います。この3軸が揃って初めて、「本番のモデル v12 は、データセット v5 とコード v3.1 から、この設定で学習された」という系譜(リネージ)をたどれるようになります。
実験管理とパイプラインの自動化
開発フェーズの中心は実験管理です。MLflow や Weights & Biases のような道具で、実験ごとのハイパーパラメータ・データ・評価メトリクスを自動で記録し、「どの条件で何が出たか」を後から比べられるようにします。Notebook での場当たり的な試行錯誤を、追跡できる実験に変えるのが狙いです。有望なモデルができたら、データ検証 → 前処理 → 学習 → 評価 → 登録という一連の流れをパイプライン(Kubeflow Pipelines、Vertex AI Pipelines、SageMaker Pipelines など)として定義し、人手を介さず再実行できるようにします。データの前処理では ETL 基盤と接続し、学習時と推論時で特徴量の計算ロジックがずれる事故(training-serving skew)を防ぐために、特徴量の計算と保管を一か所にまとめるフィーチャーストアを置く構成もよく採られます。
デプロイ — DevOps と同じところ
デプロイでは DevOps の手法がそのまま活きます。モデルをコンテナに詰めて API として配信し、カナリアリリースやブルーグリーンデプロイで段階的に切り替えます。新旧モデルを本番のトラフィックで比べる A/B テストや、新モデルに本番の入力を流すが結果は使わないシャドーデプロイで、切り替える前に安全を確かめます。
監視 — DevOps と違うところ
差分が大きいのは監視です。通常の監視がレイテンシやエラー率を見るのに対し、MLOps ではそれに加えて「モデルの精度」と「入力データの分布」を見る必要があります。モデルは例外も出さず、平然ともっともらしい予測を返し続けたまま壊れるからです。
壊れ方には大きく2種類あります。1つはデータドリフト(共変量シフト)で、入力 x の分布そのものが変わる場合です。若い利用者が急に増えた、新しい地域に展開した、センサーを交換した、といった変化で、モデルは学習時にほとんど見なかった領域の入力に答えることになります。もう1つはコンセプトドリフトで、入力の分布は同じなのに、入力と正解の関係が変わる場合です。景気の変化で同じ年収・同じ借入でも返済できる確率が変わる、詐欺の手口が変わって同じ取引パターンの意味が変わる、といった変化です。
厄介なのは、正解ラベルがすぐには手に入らないことです。与信モデルの予測が正しかったかは数か月後にしか分かりません。そこで、正解がなくても計算できる代理の指標として、入力の分布が学習時からずれていないか(PSI や KS 検定などの統計量)、予測値の分布が変わっていないかを監視し、アラートにつなげます。ただしこの方法で捕まるのはデータドリフトだけで、コンセプトドリフトは正解が届いてから精度を測るまで見えません。そのため、一部のデータに人手で正解を付けて評価し続ける仕組みを、入力の監視とは別に用意します。
下の部品で2種類のドリフトを起こしてみてください。本番の入力の雲をずらすと分布の警報が先に鳴り、精度は後から落ちます。世界の決まり(本当の境目)を動かすと、警報は黙ったまま精度だけが落ちます。
白い取っ手で本番の入力の雲をつかみ、右上へ少しずつずらしてください。青い取っ手(世界の決まり)を上下に動かすこともできます。
点の形と色は本当の正解(丸=継続、菱形=解約のような2クラス)、朱の輪はモデルの予測外れ。金の線は学習で得た境目、青の破線は世界の本当の境目です。PSI は学習時と本番の入力を区間ごとの割合で比べる指標で、0.25 以上を大きなずれとして警報にしています。
劣化を検知したら新しいデータで再学習し、評価をパスしたモデルを再デプロイします。この再学習のループは、最初は劣化に気づいた人が手で回し、成熟度に応じてスケジュール実行(毎週学び直すなど)、さらに監視の警報をきっかけに自動で走る形へと進めていくのが典型です。
実務での落とし穴
よくある失敗は、いきなり高度な自動化基盤を組もうとすることです。Google Cloud が2020年に示した成熟度の段階でも、レベル0(手作業でモデルを作り、手作業でデプロイ)から始まり、学習パイプラインの自動化(レベル1)、パイプライン自体を CI/CD で検証・デプロイする段階(レベル2)へと進むとされています。モデルの数が少ないうちは、実験管理と「コード・データ・モデルの紐付けの記録」だけでも十分に価値があります。
また、機械学習システムでは、モデル本体のコードは全体のごく一部で、周辺のデータ収集・検証・配信の仕組みが大半を占めます(先の2015年の論文の有名な図です)。モデルの精度改善だけに投資してパイプラインの信頼性をおろそかにすると、精度以前の問題 — データの欠損、上流のスキーマ変更、特徴量のずれ、静かな劣化 — でシステムが壊れていきます。モデルの予測が次の学習データを変えてしまうフィードバックループ(推薦したものだけがクリックされ、それを学ぶ)にも注意が要ります。
近年は LLM を組み込んだシステム向けに、プロンプトのバージョン管理や出力品質の評価・監視を扱う「LLMOps」という派生領域も生まれています。ファインチューニングや RAG の評価・運用にも、「継続的に計測し、劣化に気づき、改善を回す」という MLOps の考え方がそのまま引き継がれています。
試問
本番で動くモデルを見張るために、入力(本番に届くデータ)の分布が学習したときからずれたら鳴る警報を置いています。正解(予測が当たったか)は数か月遅れてしか届きません。次の8つの変化を、入力の分布の警報で先に気づけるものと、正解が届いて精度を測るまで気づけないものに振り分けてください。
本番で起きる8つの変化を、入力の分布の警報で気づけるものと、正解が届くまで気づけないものに仕分けよ
項目を選んでから、入れる箱を選びます
