✍️ 필사 모드: MLOps 完全ガイド — Model Serving・Feature Store・Drift・A/B Test・GPU Economics (Season 2 Ep 7, 2025)
日本語はじめに — MLOps が「DevOps + ML」ではない理由
DevOps はコードをデプロイする。MLOps は コード + データ + モデル の 3 つを同時にデプロイ・監視・バージョン管理する。
MLOps が特に難しい 4 つの理由:
- 再現性: 同じコード + 同じデータで異なるモデル (乱数・ハードウェア差)
- Drift: データ分布が変われば、モデルはリアルタイムで腐る
- レイテンシ: 学習はバッチ / 推論はリアルタイム → アーキテクチャ分離
- コスト: GPU 1 台で月 30,000。設計を誤るとスタートアップの予算が蒸発
2024〜2025 年、LLM 時代に入り MLOps は LLMOps へ拡張。本稿は両領域をカバーする。
第 1 部 — MLOps 成熟度 5 段階 (Google 2021 フレームワーク)
| Level | 特徴 |
|---|---|
| Lv.0 | 手動: notebook → 手動デプロイ。小規模実験用 |
| Lv.1 | 自動学習パイプライン + 手動デプロイ |
| Lv.2 | 自動学習 + 自動デプロイ + 監視 |
| Lv.3 | 自動再学習 (Drift 検知時にトリガー) |
| Lv.4 | 完全自動 + ビジネス指標まで連携 |
現実の多くの企業は Lv.1〜2。Lv.3+ は Netflix・Uber・Airbnb レベル。
第 2 部 — Model Serving: 推論システム
2.1 一般 ML Serving
| ツール | 強み | 用途 |
|---|---|---|
| TorchServe | PyTorch ネイティブ | PyTorch 標準 |
| TensorFlow Serving | 古参で成熟 | TF モデル |
| Triton Inference Server (NVIDIA) | マルチフレームワーク、動的バッチ | 本番標準 |
| BentoML | Python フレンドリー | 高速プロトタイピング |
| KServe | Kubernetes ネイティブ | K8s 環境 |
2.2 LLM Serving (2024〜2025 標準)
| ツール | 特徴 |
|---|---|
| vLLM | PagedAttention、圧倒的スループット、OSS 標準 |
| TGI (HuggingFace) | Rust 実装、安定 |
| TensorRT-LLM | NVIDIA 最適化、最高性能 |
| SGLang | 複雑ワークフロー最適化 |
| llama.cpp | CPU・Mac・エッジ |
2025 年 OSS LLM 本番のデフォルト: vLLM。
2.3 vLLM の革新: PagedAttention
伝統的 Attention KV Cache: 連続メモリ割当 → 断片化、GPU メモリの 60〜80% を浪費。
PagedAttention: OS の仮想メモリのように ブロック単位 管理 → 無駄 4% 未満、同時リクエストのスループット 2〜4 倍。
2.4 Serving パターン 4 種
- Online (リアルタイム): ms 単位応答。API サーバ。
- Batch: 大量推論 (夜間ジョブ)。効率重視。
- Streaming: イベント駆動 (Kafka → モデル)。
- Edge: デバイス側で直接 (モバイル・IoT)。
2.5 Serving 性能指標
- Latency (P50, P95, P99): 応答時間
- Throughput (QPS): 秒間リクエスト数
- TTFT (Time to First Token, LLM): 初トークン到達時間
- TPS (Tokens Per Second, LLM): 生成速度
- GPU Utilization: 目標 60〜80% (低すぎは浪費、高すぎはレイテンシ爆発)
第 3 部 — Feature Store: ML の特徴計算層
3.1 なぜ Feature Store か
学習時点と推論時点で Feature 計算がズレて失敗するのを防ぐため。
例: 「直近 7 日の購入金額」 — 学習データと実時間リクエストで時間境界や集計ロジックが 0.001% でもズレると、モデル性能は激減する。
3.2 Feature Store 3 つの役割
- Offline Store (学習用): Parquet、BigQuery、Snowflake — 学習用の大量参照
- Online Store (Serving 用): Redis、DynamoDB — 低レイテンシ参照
- Feature Definition: 「この Feature は何でどう計算するか」の中央管理
3.3 2025 Feature Store 選択肢
| ツール | 特徴 |
|---|---|
| Feast | OSS 標準、軽量 |
| Tecton | 商用、エンタープライズ |
| Hopsworks | End-to-end プラットフォーム |
| Databricks Feature Store | Delta Lake 統合 |
| 自前構築 | Redis + S3 + メタデータ DB |
3.4 Feast 例
from feast import Entity, FeatureView, Field
from feast.types import Float32, Int64
user = Entity(name="user_id", value_type=Int64)
user_activity = FeatureView(
name="user_activity_7d",
entities=[user],
features=[
Field(name="purchase_amount_7d", dtype=Float32),
Field(name="click_count_7d", dtype=Int64),
],
source=bigquery_source,
online=True,
ttl=timedelta(days=7),
)
# 学習時
features = store.get_historical_features(entity_df, feature_refs).to_df()
# Serving 時
features = store.get_online_features(
features=feature_refs, entity_rows=[{"user_id": 1}]
).to_dict()
第 4 部 — Training Infra: 大規模学習
4.1 Single GPU → 分散学習の段階
- Single GPU (〜7B パラメータ)
- Data Parallel (DP): 複数 GPU が同モデル複製 + 異なるデータ
- Distributed Data Parallel (DDP): DP 改良、All-Reduce で勾配同期
- Model Parallel: モデルが巨大で分割
- Tensor Parallel: 1 層の中でも分割 (Megatron-LM)
- Pipeline Parallel: レイヤ単位で GPU 分配
- 3D Parallel: DP + TP + PP の組み合わせ (GPT-4 級)
4.2 2025 分散学習ツール
| ツール | 特徴 |
|---|---|
| PyTorch DDP | 標準 |
| DeepSpeed (MS) | ZeRO 最適化、LLM 必須 |
| FSDP (Meta) | PyTorch ネイティブ、DeepSpeed 代替 |
| Megatron-LM (NVIDIA) | 超大規模モデル |
| Ray Train | 統合インターフェース |
| Determined AI | 実験管理統合 |
4.3 ZeRO (Zero Redundancy Optimizer)
Optimizer State を GPU 間で分割 → メモリ使用量を大幅削減:
- ZeRO-1: Optimizer State 分割
- ZeRO-2: + Gradient 分割
- ZeRO-3: + Model Parameter 分割 (FSDP と類似)
4.4 Fine-tuning 軽量化技法
| 技法 | 節約 |
|---|---|
| LoRA | 学習パラメータ 〜1% のみ |
| QLoRA | LoRA + 4bit 量子化 → 単一 GPU で 70B を fine-tune |
| DoRA | LoRA 改良 (大きさ・方向分離) |
| Galore | フルパラメータ学習類似性能 + メモリ節約 |
第 5 部 — Experiment Tracking: 実験記録
5.1 なぜ必要か
「3 ヶ月前のあのモデル、なぜ良かった?」 → 答えられない = 再現不能 = 無意味。
5.2 2025 ツール比較
| ツール | 長所 | 短所 |
|---|---|---|
| MLflow | OSS、セルフホスト可能 | UI 平凡 |
| Weights & Biases | UI 最高、協業に強い | SaaS、費用 |
| Neptune.ai | メタデータに強い | 中小規模 |
| Comet | W&B 代替 | 中小規模 |
| ClearML | OSS、パイプラインも含む | 学習曲線 |
5.3 MLflow 基本
import mlflow
import mlflow.pytorch
mlflow.set_experiment("image_classifier")
with mlflow.start_run():
mlflow.log_params({"lr": 0.001, "batch_size": 64})
for epoch in range(epochs):
train_loss = train(model, loader)
val_acc = validate(model, val_loader)
mlflow.log_metrics({"train_loss": train_loss, "val_acc": val_acc}, step=epoch)
mlflow.pytorch.log_model(model, "model")
mlflow.log_artifact("confusion_matrix.png")
5.4 追跡すべき 10 項目
- Hyperparameter: LR、batch size、optimizer
- Data Version: DVC または Delta Lake ハッシュ
- Code Version: git commit hash
- Metric: train/val loss、acc、AUC など
- Model Artifact: weights、architecture
- Environment: Python バージョン、GPU 種類、requirements
- Training Time: 総時間、エポックあたり時間
- Resource: GPU メモリ、CPU 使用
- Random Seed: 再現性
- Dataset Stats: クラス分布、サンプル数
第 6 部 — Drift 検知: モデルが腐る仕組み
6.1 Drift の 3 種類
- Data Drift (Covariate Shift): 入力分布の変化
- 例: コロナ前後のショッピングパターン
- Concept Drift: 入力→出力関係の変化
- 例: スパムの定義自体が変わる
- Label Drift: ラベル分布の変化
- 例: 不正率が 1% から 5% に急増
6.2 検知方法
統計的:
- KS Test (単一特徴)
- PSI (Population Stability Index)
- Wasserstein Distance
- Chi-Square (カテゴリ)
ML ベース:
- Domain Classifier (学習/本番データ分類器)
- Autoencoder Reconstruction Error
性能ベース:
- 遅延ラベル到着後の実性能追跡
- Proxy Metric (CTR、CVR)
6.3 2025 Drift ツール
- Evidently AI: OSS、ダッシュボード
- Arize AI: 商用、LLM・ML 統合
- WhyLabs: データ品質 + Drift
- Fiddler: エンタープライズ
6.4 LLM 特有の問題
- Prompt Drift: プロンプト分布変化 (ユーザ動向)
- Response Drift: 応答品質低下 (モデル更新の影響)
- Cost Drift: 平均トークン数の増加 → コスト爆発
第 7 部 — Model A/B Test とデプロイ戦略
7.1 デプロイ戦略 5 種
| 戦略 | 説明 | リスク |
|---|---|---|
| Blue-Green | 旧/新環境を全体切替 | 中 |
| Canary | N% のみ新モデル、段階拡大 | 低 |
| A/B | ユーザを正確に二分 | 低 (統計必要) |
| Shadow | 新モデルが実トラフィック処理、応答は旧モデル | 最も安全 |
| Multi-armed Bandit | 自動トラフィック再配分 | 知的 |
7.2 A/B Test 設計
- Hypothesis: 「新モデルは CTR を 5% 以上向上」
- Sample Size 計算: Statistical Power 80%、有意水準 5%
- Randomization: User ID ハッシュ
- Duration: 週次パターン含む (最低 1 週間)
- Guardrail Metric: 主指標 + 安全網指標 (latency、error rate)
- 分析: 有意な効果か + サブグループ影響
7.3 Shadow Deployment
User Request
|
[Router]
|-- Prod Model --> User Response (返却)
+-- Shadow Model --> Log (ユーザには非表示)
長所: リスク 0、実トラフィックで検証。 短所: 2 倍コスト、ロジック変更時の副作用検知が難しい。
7.4 2024〜2025 実験プラットフォーム
- Eppo: 統計厳格
- GrowthBook: OSS
- Statsig: Facebook 出身起業
- 自前構築: 大企業志向
第 8 部 — GPU Economics 2025
8.1 GPU オプション比較
| オプション | 価格 (H100 基準) | 柔軟性 | 適合 |
|---|---|---|---|
| On-demand Cloud | 〜$3/時 | 最高 | 小規模・不規則 |
| Spot/Preemptible | $1〜1.5/時 (60〜70% 割引) | 低 | バッチ学習 |
| Reserved (1〜3 年) | 〜$1.5〜2/時 | 中 | 予測可能ワークロード |
| 専用 (Dedicated) | 数十万円/月〜 | 高 | 長期本番 |
| 自前購入 | H100 〜400K | 最高 | 大規模・長期 |
8.2 2024〜2025 トレンド
- H100 → B200 (Blackwell): 2.5 倍性能、価格同等
- AMD MI300X: H100 代替、メモリ 192GB
- Groq LPU: 推論特化、トークン/秒最高
- AWS Trainium/Inferentia: 自社チップ、コスパ高
- Google TPU v5: 学習・推論特化
8.3 コスト最適化 10 戦術
- Spot + Checkpoint: 学習は再開可能。70% 割引
- Mixed Precision (FP16/BF16): 速度・メモリ 2 倍
- Gradient Accumulation: 小 GPU で大 batch 効果
- Gradient Checkpointing: メモリ半減、速度 20% 損失
- Quantization (INT8/INT4): 推論メモリ 2〜4 倍削減
- LoRA/QLoRA: fine-tuning コスト 99% 削減
- Model Distillation: 小モデルで性能複製
- Batching + Dynamic Batching: Serving スループット向上
- Request Caching: 同プロンプト結果の再利用
- Right-sizing: 過剰 GPU を避ける (A10 で済むのに A100 を使わない)
8.4 Cloud vs 自前購入の損益分岐点
簡易ルール: 24/7 使用の GPU が 3 台以上 + 1 年以上 予想 → 自前購入を検討。
現実: インフラチーム人件費、電力・冷却、更新サイクル (3〜4 年) まで計算が必要。
第 9 部 — データパイプライン
9.1 Batch vs Streaming
| Batch | Streaming |
|---|---|
| Airflow、Prefect、Dagster | Kafka、Flink、Spark Streaming |
| 時間ごと/日次バッチ | リアルタイム |
| 低コスト | 高コスト |
| 遅延許容 | ms〜s 要求 |
9.2 2025 オーケストレーション
- Airflow 2.x: 標準、成熟
- Prefect: Pythonic、UX 良好
- Dagster: 型安全、データ認識
- Temporal: ワークフロー特化、再起動可能
9.3 ML データ品質チェック
- 欠損値: 比率閾値
- 異常値: Z-score または Isolation Forest
- スキーマドリフト: カラム追加/削除/型変更
- 範囲チェック: age > 0、price > 0
- 分布: ベースラインとの比較
- 一意性: ID 重複なし
- 関係: FK 整合性
9.4 Great Expectations・Soda
import great_expectations as ge
df = ge.from_pandas(df)
df.expect_column_values_to_not_be_null("user_id")
df.expect_column_values_to_be_between("age", 0, 150)
df.expect_column_value_lengths_to_be_between("email", 5, 100)
第 10 部 — 可観測性とデバッグ
10.1 3 軸 + ML 固有
一般アプリ:
- Metric (Prometheus)
- Log (Loki、Elasticsearch)
- Trace (OpenTelemetry)
ML 追加:
- Prediction Log: 入力 + 出力 + モデルバージョン
- Feature Log: Feature Store 参照記録
- Drift Metric: 分布統計
- Explanation: SHAP、LIME
10.2 LLM 可観測性ツール
- LangSmith: LangChain チーム
- Langfuse: OSS
- Helicone: プロキシ型
- Phoenix (Arize): OSS で強力
第 11 部 — MLOps マスターロードマップ 6 ヶ月
Month 1: 基礎 + Serving
- FastAPI + PyTorch モデル Serving
- Docker + K8s 基本
Month 2: Training Infra
- PyTorch DDP
- Ray Train または DeepSpeed 体験
- MLflow で実験追跡
Month 3: Feature Store + Data
- Feast 導入・運用
- Airflow または Dagster パイプライン
- Great Expectations データ品質
Month 4: LLM 特化
- vLLM 運用
- プロンプト管理 (Langfuse)
- LLM-as-a-Judge eval
Month 5: Drift + A/B
- Evidently AI で Drift 検知
- GrowthBook で A/B Test
- Shadow Deployment 実戦
Month 6: 最適化・スケール
- GPU コスト監視
- LoRA fine-tuning
- Model Distillation 実験
第 12 部 — MLOps チェックリスト 12
- MLOps 成熟度 5 段階で自チームの位置を知る
- vLLM が既存 Serving より速い理由を知る (PagedAttention)
- Feature Store 3 つの役割を言える
- DDP vs FSDP vs ZeRO の差を知る
- LoRA vs QLoRA のメモリ節約原理を知る
- MLflow の 5 つのログ対象を知る
- 3 種の Drift (Data/Concept/Label) の違いを説明できる
- Shadow Deployment の長短を知る
- Canary vs A/B Test の選択基準を知る
- GPU Spot インスタンスで学習する際の注意点を知る
- Batch vs Dynamic Batching の違いを知る
- LLM 可観測性 3 要素 (prompt・completion・metadata) を知る
第 13 部 — MLOps アンチパターン 10
- Notebook のみでデプロイ: 再現性 0。パイプライン化
- Feature 計算を学習・Serving で分離: 必ず Feature Store または共有ライブラリ
- Eval セットなしでデプロイ: 性能低下検知不能
- Drift 監視なし: 6 ヶ月後に静かに破綻
- 単一 A/B 指標: Guardrail 必須
- GPU を「適当に」選ぶ: A10・A100・H100 に明確な基準
- Spot インスタンスに Checkpoint なし: 終了で学習消滅
- Shadow Deploy なしの Big Bang: リスク過小評価
- 可観測性を後回し: 最初から組み込む
- MLOps を ML チームだけの仕事に: DevOps・Data チーム協業必須
おわりに — MLOps は「見えない 70%」
論文の美は、モデル構造にある。本番の美は 30 個の見えないシステムが噛み合って動くこと にある。
2025 年 AI/ML エンジニアの区分点:
- 「モデルを動かせる」 = 入口レベル
- 「パイプライン・Serving アーキテクチャを描ける」 = シニア
- 「Drift・Cost・Eval まで設計できる」 = スタッフ+
論文は公開されるが、運用ノウハウは公開されない。だからこの領域が年収差を生む。
次回予告 — 「データエンジニアリング完全ガイド: Lakehouse・Streaming・dbt・Orchestration・Data Mesh」
Season 2 Ep 8 は、ML の下にある基盤、データエンジニアリング。次回は:
- Lakehouse アーキテクチャ (Iceberg・Delta・Hudi)
- Batch vs Streaming (Flink、Kafka Streams、Spark Structured Streaming)
- dbt + Elementary でデータモデリング
- Airflow vs Prefect vs Dagster vs Temporal
- Data Mesh の本当の意味
- Data Contract と Schema Registry
「データが働く方式」が変わった 2025 年。次回に続く。
현재 단락 (1/282)
DevOps はコードをデプロイする。MLOps は **コード + データ + モデル** の 3 つを同時にデプロイ・監視・バージョン管理する。