Model Deployment
モデルのデプロイとは、学習済みモデルを本番環境に導入し、新しいデータに対する予測を提供することです。クラウドとエッジの実行環境、エクスポート、段階的なリリース、監視を解説します。
モデルデプロイとは、学習済みの機械学習モデルを本番環境に導入し、アプリケーションが新しいデータを送り、予測に基づいて動作できるようにするプロセスです。モデルの実行場所の選定、対象ランタイムが実行できる形式への変換、APIやアプリを通じた入出力との接続、新バージョンの安全なリリース、実ユーザーが利用し始めた後の動作監視などが含まれます。ノートブック上で高いスコアを出すモデルも、デプロイされるまでは実験にすぎません。デプロイは機械学習運用(MLOps)の段階の一つであり、データサイエンスがレイテンシ、コスト、稼働時間、セキュリティなどのソフトウェアエンジニアリング上の制約と交わる工程です。
モデルのデプロイ先#
- クラウドデプロイ: モデルはRESTまたはgRPCエンドポイントの背後にあるサーバーで実行されます。通常は、リクエストをバッチ処理し、需要に応じてレプリカ数を調整するモデルサービングシステムを介します。大規模モデルや変動するトラフィックに適していますが、リクエストごとにネットワークの往復が発生します。
- エッジデプロイ: モデルは、スマートフォン、カメラ、ロボット、NVIDIA Jetsonモジュールなど、データを取得するデバイス上で実行されます。入力がデバイス外に出ないためプライバシーを保護でき、オフラインでも動作します。一方、メモリと電力の制約があるため、通常はモデルの圧縮が必要です。
- サーバーレスデプロイ: プラットフォームは必要に応じてインスタンスを起動し、アイドル時にはゼロまでスケールします。最初のリクエストでコールドスタートによる遅延が発生する代わりに、リクエストがない間は料金がかかりません。
- バッチデプロイ: スケジュールされたジョブで大規模なデータセットを一括スコアリングします。たとえば、リクエストごとの応答速度よりスループットが重要な、夜間の商品レコメンデーションなどが該当します。
Ultralytics Platformでは、学習済みのYOLOモデルを専用エンドポイントにデプロイできます。42のいずれかのリージョンを選択でき、各エンドポイントには独自のURLと監視機能が備わっています。デフォルトのリソースサイズを使用するエンドポイントは、アイドル時にゼロまでスケールします。デプロイ先は、アプリケーションに関するいくつかの質問から決められます。
本番環境に向けたモデルの準備#
トレーニングフレームワークは柔軟性を重視しているため、本番環境用のモデルは通常、推論エンジンが効率よく実行できる形式にエクスポートします。たとえば、移植性にはONNX、NVIDIA GPUにはTensorRT、IntelハードウェアにはOpenVINO、スマートフォンにはLiteRTやCore MLを使用します。対象デバイスのリソースが限られる場合は、モデル量子化やモデルプルーニングによって、モデルをさらに小さくします。その後、エクスポートしたモデルと前処理コードを固定バージョンの依存関係とともにパッケージ化します。一般的には、ノートPC、サーバー、Kubernetesクラスターで同じように動作するDockerコンテナを使用します。学習済み検出器をエクスポートし、リリース前の簡易確認のためにエクスポートしたファイルを読み込む例は次のとおりです。
from ultralytics import YOLO
# Load a trained model (replace with your own best.pt)
model = YOLO("yolo26n.pt")
# Export to ONNX, a portable format that many inference engines run
path = model.export(format="onnx")
print(f"Deployable model: {path}")
# Smoke-test the exported file with the same API before shipping it
onnx_model = YOLO(path)
results = onnx_model("https://ultralytics.com/images/bus.jpg")
results[0].save(filename="bus_onnx.jpg")エクスポート呼び出しは新しいyolo26n.onnxファイルのパスを返し、保存された画像で、エクスポート済みファイルを読み込んで検出できることを確認できます。形式変換や低精度化によって出力がわずかに変わることがあるため、チームは検証セットでエクスポート済みモデルの精度と速度を元のモデルと比較します。
新しいモデルバージョンのリリース#
オフラインの指標では本番環境のすべての条件を把握できないため、新しいモデルバージョンはモデルレジストリに保存し、段階的にリリースします。シャドーデプロイでは、新しいモデルにライブトラフィックのコピーを送る一方、ユーザーへの応答には現行モデルを引き続き使うため、リスクを抑えて両者を比較できます。続いてカナリアリリースで実トラフィックの一部を新バージョンに振り分け、エラー率、レイテンシ、予測品質に問題がない場合に限って対象を拡大します。また、A/Bテストでビジネス成果への影響を測定します。以前のバージョンをデプロイ可能な状態に保てば、緊急の再ビルドをせず、設定変更だけでロールバックできます。
モデルデプロイと関連用語の比較#
- モデルのトレーニング: データセットからモデルの重みを学習します。デプロイは学習済みの重みを起点とします。
- モデルサービング: 予測リクエストに応答するランタイム層です。デプロイの一部であり、デプロイにはパッケージ化、リリース、監視も含まれます。
- 推論レイテンシ: デプロイ済みモデルが1回の予測を計算するのにかかる時間です。デプロイで満たす必要がある主要な要件の一つです。
デプロイ後の監視#
現実環境が変化すると、デプロイ済みモデルの性能は気付かれないまま低下します。モデル監視では、多くの場合、PrometheusやGrafanaなどのツールを使って、レイテンシ、スループット、エラー率、ハードウェア使用率などの運用指標に加え、入力や予測の統計情報も追跡します。監視で問題が検出されると、チームは新たな失敗事例にラベルを付けて再学習し、新しいバージョンを同じリリースプロセスに通します。入力統計は最も早い警告をもたらします。データドリフトとは、カメラの向きが変わった場合や冬季の照明に切り替わった場合などに見られる入力分布の変化であり、本番データの正解ラベルが届いて精度を測定できるようになる数日から数週間前に、入力統計に現れます。










