01_基礎

セクション4 基礎 — モデルのサービングとスケール

📘 対象:新人エンジニア。バッチ推論とオンライン推論、Endpoint、Model Registry の基本フローを押さえる。


1. バッチ推論 vs オンライン推論

1.1 違い

バッチ推論 オンライン推論
入力 データセット(GCS/BQ) 単発リクエスト(API)
レイテンシ 数分〜時間(許容) 数 ms〜100ms(厳格)
スループット 一度に大量 高 QPS
用途 夜間スコアリング・レポート チャット・推薦・検知
コスト 安い(必要なときだけ起動) 高い(常時起動)

1.2 ユースケース別の使い分け

課題 推論方式 理由
毎日全顧客の解約スコアを計算 バッチ 即時性不要、コスト最優先
ECサイトの商品推薦(リクエスト時に表示) オンライン < 100ms 要件
メール分類(受信時に自動振り分け) オンライン リアルタイム性
マーケティング配信リストの作成(月次) バッチ 即時性不要
不正検知(決済時) オンライン 即時判定必要
ログ分析の異常検知(日次) バッチ 集計バッチで OK

2. サービング方法の選択肢

2.1 Agent Platform Inference(旧 Vertex AI Prediction / Endpoints)

2.2 Cloud Run

2.3 GKE (Google Kubernetes Engine)

2.4 Model Garden(Models as a Service)

2.5 使い分け

条件 推奨
標準的な ML 推論を最も簡単に Agent Platform Inference
軽量モデル + スケールゼロでコスト最適 Cloud Run
Kubernetes 既存資産・複雑な構成 GKE (with KServe / Triton)
基盤モデルそのまま使う Model Garden (MaaS)
エッジデバイス TFLite / Edge TPU / Coral

3. Model Registry

3.1 役割

3.2 基本操作

from google.cloud import aiplatform

# 訓練後にモデルをアップロード
model = aiplatform.Model.upload(
    display_name="churn-predictor",
    artifact_uri="gs://my-bucket/models/churn/v2/",
    serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/sklearn-cpu.1-3:latest",
)

# Endpoint にデプロイ
endpoint = model.deploy(
    machine_type="n1-standard-4",
    min_replica_count=1,
    max_replica_count=3,
    traffic_split={"0": 100},
)

3.3 バージョン管理の効能


4. エンドポイントとトラフィック分割

4.1 Endpoint の構造

Endpoint
├─ Model v1 (50% traffic)
├─ Model v2 (40% traffic)
└─ Model v3 (10% traffic) ← カナリア

4.2 デプロイの粒度

4.3 トラフィック分割の例


5. サービングコンテナ

5.1 Pre-built Container

5.2 Custom Container

5.3 主要なフォーマット

フォーマット 用途
SavedModel (TF) TensorFlow Serving / Agent Platform 標準
TorchScript / PyTorch state_dict PyTorch
ONNX フレームワーク間互換
JOBLIB / pickle scikit-learn
XGBoost JSON XGBoost
GGUF 量子化 LLM(llama.cpp)
TFLite エッジデプロイ

6. 推論の前処理・後処理

6.1 どこで実行するか

場所 利点 欠点
クライアント側 サーバ負荷軽減 バージョン管理難、Skew リスク
API ゲートウェイ層 言語横断 複雑化
推論コンテナ内(custom prediction) モデルとセットで管理 コンテナ複雑化
Feature Store 訓練と完全一致 レイテンシ追加

6.2 推奨パターン


7. Feature Store オンライン取得

7.1 役割

7.2 取得フロー

# 推論サーバ側のコード(疑似)
features = feature_store.get_online_features(
    entity_type="user",
    entity_ids=[user_id],
    feature_ids=["avg_purchase_30d", "session_count_7d", "ltv"],
)
prediction = model.predict([request_features + features])

7.3 Online Store の選択肢


8. パブリック / プライベートエンドポイント

8.1 パブリックエンドポイント

8.2 プライベートエンドポイント

8.3 使い分け


9. ハードウェア選定(サービング基礎)

シナリオ ハードウェア
軽量 ML(< 100MB) CPU
中規模 NN / 小型 LLM L4 GPU
大規模 LLM(Gemini Pro 級) A100 / H100 / TPU v5e
推論コスト最優先 L4 / TPU v5e
エッジ・モバイル Edge TPU / Coral / TFLite

10. このセクションで覚えるキーワード

次は 02_応用.md で A/B テスト・カナリア・スケーリング・コスト最適化・前後処理パターンを扱います。