Machine Learning Operations (MLOps)
MLOpsは、バージョン管理されたデータ、自動化された学習パイプライン、品質ゲート、デプロイ、ドリフト監視など、DevOpsのプラクティスを機械学習に適用します。
機械学習運用 (MLOps) は、機械学習 (ML)モデルを本番環境で確実かつ再現可能に構築、デプロイ、保守するための実践とツールの総称です。ソフトウェアのテストやリリース方法を自動化するDevOpsを、コードだけでなくデータにも動作が左右されるシステムに拡張したものです。観測する世界が変化すれば、コードが1行も変わらなくてもモデルの性能は低下する可能性があります。このようなシステムでは、モデル自体はごく一部にすぎません。GoogleのMLOpsアーキテクチャガイドによると、実世界のMLシステムではMLコードが占める割合はごくわずかで、残りはデータの収集と検証、サービング基盤、モニタリングで構成されます。また、NeurIPSの論文Hidden Technical Debt in Machine Learning Systemsでは、周辺システムに蓄積する長期的な保守コストが説明されています。
主な実践方法#
MLOpsは、データエンジニアリング、モデル開発、運用をいくつかの実践を通じて結び付けます。それぞれの実践は、コードだけでなく学習データにも適用されます。
- データのバージョン管理:各データセットのスナップショットに変更不可能なバージョンを付与することで、どのモデルも、そのモデルを生成した正確なデータまで追跡できます。
- 実験の追跡:各学習実行では、コードのバージョン、データのバージョン、ハイパーパラメーター、メトリクス、アーティファクトを記録するため、結果を比較して再現できます。
- 継続的インテグレーションとデリバリー:自動化されたパイプラインでコードをテストし、受信データを検証し、モデルを再学習して、品質ゲートを満たさない候補をブロックします。
- モデルレジストリ:承認済みのモデルバージョンを、メタデータ、系譜、ステージ(ステージングや本番環境など)とともに保存し、デプロイやロールバックで正確なバージョンを指定できるようにします。
- モデルサービング:モデルを(多くの場合、コンテナに)パッケージ化し、API経由で公開するか、エッジデバイスにデプロイします。
- モデルのモニタリング:本番環境の入力、予測、レイテンシ、精度を追跡し、ドリフトを検出して再学習のタイミングを判断します。
Googleのガイドでは、成熟度を3段階で説明しています。レベル0では、データサイエンティストがモデルを手動で学習し、引き渡します。レベル1では、学習パイプライン自体を自動化し、新しいデータの到着時やデータドリフトの検出時にモデルを自動で再学習・サービングする継続的学習(CT)を追加します。レベル2ではさらに、CI/CDによってパイプラインコードの構築、テスト、デプロイも自動化し、新しいパイプラインのバージョンを新しいモデルと同様に安全に本番環境へ反映します。これらの実践によって、次のようなループが形成されます。
MLOpsの実践例#
- 製造業の検査:工場が製品ラインを追加すると、新たな欠陥画像にラベルを付けてバージョン管理します。パイプラインが検出モデルを再学習し、承認済みのバージョンを、稼働を止めることなく各ラインのエッジカメラに展開します。
- 小売店の棚モニタリング:パッケージのデザイン変更や店内照明の変化によって、カメラに映る内容が変わります。モニタリングで信頼度スコアの低下を検知し、信頼度の低い画像をアノテーションに回します。再学習済みモデルは、評価に合格すると店舗に展開されます。
品質ゲートによって、昇格の判断を自動化できます。次のスクリプトは物体検出モデルの候補を学習し、同じ検証データで候補モデルと現在の本番モデルを評価します。候補のmAP50-95がより高い場合にのみ、候補をONNXにエクスポートします。
from ultralytics import YOLO
# 候補を学習します。実行によって、重み、args.yaml、results.csvがproject/nameの下に保存されます
candidate = YOLO("yolo26n.pt")
candidate.train(data="coco8.yaml", epochs=10, project="mlops", name="candidate")
# 品質ゲート:同じ検証データで候補モデルと本番モデルを評価します
candidate_map = candidate.val(data="coco8.yaml").box.map
production_map = YOLO("yolo26n.pt").val(data="coco8.yaml").box.map
# 改善が確認された場合にのみ、サービングスタックで実行できる形式にエクスポートして昇格します
if candidate_map > production_map:
candidate.export(format="onnx")本番パイプラインでは、新しいラベル付きデータが追加されるたびにスケジューラーまたはCIジョブがこのようなスクリプトを実行し、エクスポート済みモデルをデータバージョンとメトリクスとともに登録します。Ultralytics Platformは、変更不可能なデータセットバージョン、ライブメトリクスを使ったクラウド学習、TensorRTなどの形式へのエクスポート、専用の推論エンドポイント、デプロイ済みモデルのモニタリングを備え、ビジョンモデルのライフサイクル全体を1つのワークスペースで管理できます。
MLOpsと関連用語の比較#
- DevOps:ソフトウェアの構築、テスト、リリースを自動化し、コード変更をきっかけにパイプラインを実行します。MLOpsではデータとモデルもバージョン管理対象のアセットに加えるため、新しいデータや本番環境での精度低下もパイプライン実行のきっかけになります。
- LLMOps:大規模言語モデルアプリケーションを対象とするMLOpsの分野で、プロンプト、検索、生成テキストの評価、トークンコストを中心に扱います。
- 自動機械学習 (AutoML):アルゴリズムやハイパーパラメーターの選択など、モデルの構築を自動化します。MLOpsはデータのバージョン管理からモニタリングまで、その周辺のライフサイクルを運用し、多くの場合、パイプラインの1ステップとしてAutoMLを呼び出します。
- MLflowとWeights & Biases:実験の追跡やモデルレジストリなど、ライフサイクルの一部をカバーするツールです。MLOpsは、こうしたツールをパイプライン、サービング、モニタリングと組み合わせる実践です。










