ML Model Deployment
ML モデルデプロイを 7 フェーズ・6 パターン・5 リリース戦略・5 環境・CT/CD・3 層ロールバック・12 AP・2026 フロンティアで俯瞰し tech-69 の上位プロセス層として配置。
article technology ja ML モデルデプロイを 7 フェーズ・6 パターン・5 リリース戦略・5 環境・CT/CD・3 層ロールバック・12 AP・2026 フロンティアで俯瞰し tech-69 の上位プロセス層として配置。ML Model Deployment(機械学習モデルのデプロイメント)
ML モデルデプロイメントは訓練済みアーティファクトを本番に到達・健全稼働させ必要時に安全ロールバックするライフサイクルで、推論サービング (tech-69) の上位プロセス層に位置する。本稿は 7 フェーズ・6 パターン・5 リリース戦略・5 環境・CT/CD・3 層ロールバック・12 AP・2026 フロンティアで俯瞰する。情報カットオフ ~2025-08 固定、バージョン・GA 日程は [VERIFY] 明示。
ライフサイクル全体像
7 フェーズで整理する。モデルレジストリが全フェーズ縦断の唯一 SoT として機能する。
| フェーズ | 作業 | 成果物 | 代表ツール |
|---|---|---|---|
| 1. Train | 学習・評価・実験追跡 | run_id, metrics, artifacts | MLflow, W&B |
| 2. Package | artifact + image + manifest 梱包 | OCI digest, MLmodel | BentoML, MLflow Models |
| 3. Register | バージョン登録 + 評価レポート | Model Version (semver + lineage) | MLflow / SageMaker / Vertex |
| 4. Stage | shadow / staging で smoke・bias 検証 | validation report | Argo Rollouts, Yatai, KServe |
| 5. Release | canary → progressive → 本番 | トラフィック重み, SLO ゲート | Flagger, Argo Rollouts |
| 6. Monitor | 品質・ドリフト・コスト・SLO 観測 | アラート | Evidently, Arize (tech-83) |
| 7. Rollback | SLO 違反・ドリフトで旧版即時切替 | status=Archived | Argo / SageMaker auto-rollback |
通常 CI/CD と異なるのはフェーズ 6 のドリフト検出が自動でフェーズ 1 の再訓練を駆動し Continuous Training (CT) ループを形成する点。
パッケージング
デプロイ可能単位はモデル重み単体ではなくバンドル:model/ (weights + config + tokenizer)、preprocessing/、postprocessing/、runtime/ (Dockerfile + requirements lock)、manifest/ (MLmodel / ServiceSpec)。形式詳細は tech-77 / tech-78 委譲。
再現性は 3 セット:(1) weights hash SHA-256 を manifest 記録 + SafeTensors ヘッダ検証で RCE 回避、(2) base image digest を FROM ...@sha256:<digest> 固定 [VERIFY]、(3) requirements lock を uv pip compile / pip-compile --generate-hashes で全推移依存ハッシュ含めロック。MLflow は pyfunc flavor、BentoML は bentofile.yaml 宣言記述 [VERIFY]。
モデルレジストリ & バージョニング
| レジストリ | バージョニング | ステージ管理 |
|---|---|---|
MLflow Model Registry 2.x [VERIFY] | semver + alias (champion/challenger) | Registered→Staging→Production→Archived(alias 主体へ) |
| SageMaker Model Registry | グループ + バージョン番号 | PendingManualApproval→Approved→Rejected |
Vertex AI Model Registry [VERIFY] | Model Resource + バージョン | なし(Endpoint 重み分割で管理) |
BentoML Yatai [VERIFY] | Bento バージョン (tag) | Deployment (K8s) 直結 |
| HF Hub Private | commit hash + tag | なし(Git ブランチ運用) |
リネージメタデータ必須 6 項目:training_dataset_hash / parent_model_version / evaluation_report_uri / bias_check_report_uri / training_pipeline_run_id / approved_by。揃わない登録は promotion 拒否の CI ゲートを置く。
デプロイメントパターン
| パターン | 説明 | 長所 / 短所 |
|---|---|---|
| Single-model Endpoint | 1 EP = 1 モデル専有 | 分離容易 / idle 課金 |
| Multi-model Endpoint (MME) | 多モデル動的ロード | コスト効率 / cold ロード遅延 |
| Multi-container Endpoint (MCE) | 前/推/後処理チェーン [VERIFY] | 柔軟 / 設定複雑 |
| Serverless | Lambda/Cloud Run/Modal/Replicate | scale-to-zero / cold start |
| Batch / Async | キューバッファ非同期 | GPU 利用率最大 / 非リアルタイム |
| Multi-LoRA EP | ベース 1 + 複数 LoRA 動的切替 (vLLM --enable-lora [VERIFY]) | GPU メモリ節約 / 管理複雑 |
Modal と Replicate (Cog/Docker) は LLM・画像生成系の迅速デプロイに適する [VERIFY]。エンジン比較は tech-69 委譲。
リリース戦略
| 戦略 | 切替 | SLO 違反時 | 特徴 |
|---|---|---|---|
| Shadow | 100% 旧 + コピーを新へ(結果破棄) | 影響なし | ゼロリスク検証 |
| Canary | 旧 90% + 新 10% → 段階拡大 | 自動 rollback | 最小ブラスト半径 |
| Blue-Green | Blue 100% → Green 100% 瞬時 | Blue に戻す | 即時切替・2 倍リソース |
| A/B | セグメント分割 | 手動判断 | 統計的有意差検証 |
| Interleaving | 同一ユーザに旧新混合提示 | 手動判断 | レコメンダ系で高統計効率 |
| Progressive | 1→5→25→50→100% | 各ステップで自動 rollback | 汎用標準 |
Argo Rollouts は AnalysisTemplate で successCondition: result >= 0.95 自動評価 [VERIFY]、Flagger は Istio メトリクスを Prometheus で判定 [VERIFY]。SLO ゲート例: p95 latency < 200ms (baseline +20% 以内)、error_rate < 0.5%、accuracy_delta > -2%、output_drift_score < threshold。SageMaker auto-rollback は CloudWatch アラーム発火で旧版へ自動復帰 [VERIFY]。
環境マトリクス
| カテゴリ | 代表実装 | 制御 | ロックイン | Scale-to-0 | 規制 |
|---|---|---|---|---|---|
| Cloud Managed (ML PaaS) | SageMaker / Vertex / Azure ML | 低 | 高 | 部分 | HIPAA/SOC2 標準 |
| Self-managed K8s | KServe v0.13 / Seldon v2 / Ray Serve / BentoML [VERIFY] | 高 | 低 | 可 (KEDA) | フル制御 |
| Serverless | Lambda / Cloud Run / Modal / Replicate | 中 | 中 | 完全 | Cloud Run CMEK [VERIFY] |
| Edge / On-device | CoreML / LiteRT / ExecuTorch (tech-81) | 最高 | 高 (OS) | N/A | デバイス内完結 |
| On-prem Bare-metal | Triton 25.x [VERIFY] + NVIDIA GPU | 最高 | なし | なし | 最高 (air-gap) |
選定軸 4 つ:(1) 制御 vs ロックイン、(2) scale-to-zero vs スループット (Serverless は cold start が p99 汚染)、(3) 規制 (医療・金融は VPC 内、air-gap は on-prem Triton 一択)、(4) コスト (GPU 専有/MME/serverless 使い分け)。K8s 基礎は tech-66、クラウド比較は tech-74。
CI/CD/CT パイプライン
ML CI/CD は通常 CI/CD に Continuous Training (CT) が加わる。データ検証→訓練→モデル評価→レジストリ登録→カナリア→progressive rollout の流れ。
| プラットフォーム | 特徴 |
|---|---|
Kubeflow Pipelines 2.x [VERIFY] | K8s ネイティブ、KFP SDK v2、Vertex 互換 |
| Vertex AI Pipelines | Kubeflow 互換、GCP マネージド |
| SageMaker Pipelines | Step Functions 風 DAG、SM ジョブ統合 |
MLflow Projects / Recipes [VERIFY] | シンプル、CI 統合容易 |
ZenML 0.6x [VERIFY] | マルチスタック抽象 (SM/Vertex/K8s 切替) |
| Metaflow | Netflix 発、@step デコレータ |
CI テスト 5 種:データ検証 (Great Expectations/Pandera) [VERIFY]、モデル検証 (accuracy/latency 閾値回帰)、偏り検査 (Fairlearn/Aequitas) [VERIFY]、セキュリティ (Trivy + SLSA、tech-66)、スモーク (ステージング疎通)。CT トリガー 4 種:ドリフトアラート (PSI > 0.2 / KS p < 0.05、Evidently/Arize Webhook)、スケジュール、データ閾値、ビジネスイベント。CT は tech-83 と密結合しフィードバックループを閉じる。
ロールバック & インシデント対応
| 層 | 対象 | 実行方法 | SLA |
|---|---|---|---|
| モデル | 重み + ランタイム | レジストリで前版 promote → 再デプロイ | < 5 分 |
| 前処理 | feature pipeline / tokenizer | preprocessing_version 連動アトミック復帰 | < 5 分 |
| トラフィック | ゲートウェイ重み | weight=0 で即時切替 (停止なし) | < 1 分 |
自動条件: SLO 違反 5 分継続、error_rate > baseline + 2σ、出力分布 KL divergence 超過。手動手順: PagerDuty → kubectl argo rollouts abort → SageMaker は update_endpoint() で旧 EndpointConfigArn → Grafana 回復確認。ブラスト半径最小化: per-tenant routing (LiteLLM/Envoy)、Feature Flag、Namespace per tier。
アンチパターン
| # | AP | 対策 |
|---|---|---|
| 1 | Notebook → 本番直コピー | パイプラインへ移行、CI ゲート必須 |
| 2 | pickle in prod (RCE) | SafeTensors + weights_only=True (tech-77) |
| 3 | モデルレジストリなし | MLflow Registry 最低、lineage + approval |
| 4 | Training-Serving Skew | 前処理コードをモデルと同一バンドル |
| 5 | shadow なしで canary 直行 | shadow→canary→progressive 順序遵守 |
| 6 | 全テナント共有 EP | per-tenant rate limit + routing or MME |
| 7 | 手動 rollback のみ | SLO ゲートで自動 rollback |
| 8 | 後付けオブザーバビリティ | デプロイ前に監視設計完了 (tech-83) |
| 9 | 前処理バージョン未ピン留め | preprocessing_version ↔ model_version 1:1 |
| 10 | ドリフト信号なし再訓練 | CT トリガーは drift 根拠条件のみ |
| 11 | :latest タグ | image digest (@sha256:...) ピン留め |
| 12 | 評価なし promotion | レジストリ Staging ゲート + CI 通過必須 |
2026 フロンティア
LLM 特有: vLLM V1 の Disaggregated PD で prefill/decode 分離 + KVCache 転送が実験的、KServe v0.13+ との production 展開が 2025 後半から [VERIFY](tech-69/tech-46/tech-79)。Multi-LoRA hot-swap はテナント別 FT を 1 GPU 多重化、デプロイ層は アダプタレジストリ と バージョニング が課題。Prefix-cache-aware routing はゲートウェイがプレフィックスハッシュで同一キャッシュ保持ワーカーへ優先ルーティング [VERIFY]。
エージェントデプロイ: 数分〜数時間セッション維持で Pod lifecycle と整合せず StatefulSet + PVC または外部セッションストア (Redis) が必要 [VERIFY]。ツールレジストリ がモデルレジストリとは別レイヤとして登場 [VERIFY]。ループ高額請求は per-session token budget + hard cutoff (LiteLLM Budget Manager 等 [VERIFY]) で抑制。
Confidential Inference: AWS Nitro Enclaves 隔離、AMD SEV-SNP Confidential VM (Azure + AMD EPYC)、NVIDIA H100 Confidential Computing ハードウェア TEE で重み隔離 + 証明書発行 [VERIFY]。
Green Deployment: Carbon-aware scheduling で再エネ発電が多い地域・時間帯に batch をシフト、WattTime / Electricity Maps API + Kubeflow scheduler 統合の実験的実装 [VERIFY]。