MLモデルの展開
1)役割と目標
導入=RG/AML/法的および予算を満たしながら、製品と操作に確実に推論を提供します。
目標:低遅延、高可用性、再現性、安全性、迅速なロールバック。
2)サービングアーキテクチャ
2.1パターン
オンライン(リアルタイム):REST/gRPC、 p95 50-150 msパーソナライズ;RG/AMLアラートの≤ 2-5 s。
ほぼリアルタイム:マイクロマッチ1-5分(OLAPショーケース)。
バッチ/オフライン:ゴールドナイトショーケース、規制当局のWORM輸出。
プロセス内スコアリング:ライトモデルをサービスに埋め込む(低遅延)。
サーバーレス:まれなタスクのコールドスタート機能。
2.2トポロジー
シングルモデルサービス→シンプルで高速。
アンサンブル/グラフ(ルータ→前処理→モデル→後処理)→複雑なパイプライン。
Sidecar Feature Fetcher→は、キャッシュ(Redis/Scylla)からオンライン機能を引き出します。
3)モデルレジスタとバージョン
レジストリ:'model_id'、 'version'、 'stage={Staging、 Production、 Archived}'、アーティファクト(weights、 preprocessor、 calibration)、要件(CPU/GPU/memory)、モデルカード(data、 metrics、 risk、 fairness)。
不変アーティファクト:content-hash;リリースのWORMコピー。
出力ポリシー:レジストリおよび宣言マニフェストのみを使用します。
4)容器化および包装
Dockerfile:dockerfile
FROM python:3. 11-slim
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements. txt.
RUN pip install -r requirements. txt --no-cache-dir
COPY artifacts/./artifacts/
COPY src/./src/
CMD ["python", "src/serve. py"]
サーバー(FastAPI+gRPC、アイデア):
python serve. py from fastapi import FastAPI import joblib, time app = FastAPI()
model = joblib. load("artifacts/model. joblib")
scaler = joblib. load("artifacts/scaler. joblib")
@app. post("/score")
def score(payload: dict):
t0 = time. time()
x = preprocess(payload, scaler)
y = float(model. predict_proba([x])[0,1])
return {"score": y, "latency_ms": int((time. time()-t0)1000), "model_version": "1. 8. 3"}
5) Kubernetes/HelmとAutoscaling
展開(フラグメント):yaml apiVersion: apps/v1 kind: Deployment metadata: {name: ml-score, labels: {app: ml-score}}
spec:
replicas: 3 selector: {matchLabels: {app: ml-score}}
template:
metadata: {labels: {app: ml-score}}
spec:
containers:
- name: api image: registry/ml-score:1. 8. 3@sha256:...
ports: [{containerPort: 8080}]
resources:
requests: {cpu: "500m", memory: "512Mi"}
limits: {cpu: "2", memory: "2Gi"}
envFrom: [{secretRef: {name: ml-secrets}}]
readinessProbe: {httpGet: {path: /healthz, port: 8080}, periodSeconds: 5}
livenessProbe: {httpGet: {path: /livez, port: 8080}, periodSeconds: 10}
HPA (RPS/CPUによる):
yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: {name: ml-score-hpa}
spec:
scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: ml-score}
minReplicas: 3 maxReplicas: 50 metrics:
- type: Pods pods:
metric: {name: requests_per_second}
target: {type: AverageValue, averageValue: "15"}
- type: Resource resource: {name: cpu, target: {type: Utilization, averageUtilization: 70}}
6)ロールアウト戦略
Shadow:新しいモデルはリクエストのコピーを処理し、応答は無視されます。メトリクス/レイテンシ/コストの比較。
カナリア:トラフィックの1-10%→25%→50%→緑色のSLOで100%;劣化の自動ロールバック。
青緑:平行スタック;即刻のルーティングスイッチ。
段階的な機能フラグ:マーケット/テナント/デバイスルーティング。
A/B/n:連続テストによるオンライン実験。
yaml routes:
- match: {tenant: "EEA"} # feature-flags/rules to: {model: "1. 8. 3", weight: 20}
- match: {tenant: "EEA"}
to: {model: "1. 7. 9", weight: 80}
7)特徴オンライン/オフライン: 等価
統合変換ライブラリとフィーチャーストア(オンライン+オフライン)。
同等性のテスト:参照サンプルのオンライン特徴そしてオフライン参照の間のMAE/MAPE。
キャッシュ機能:Redis/Scylla、ウィンドウ機能のTTL;タイムアウトとフォールバック。
8)観察可能性、SLOおよび警報
8.1 SLI/SLOベンチマーク
レイテンシー:p95 ≤ 150ミリ秒(パーソナライゼーション)、p99 ≤ 300ミリ秒。RG/AMLアラート≤エンドツーエンドで5。
空室状況: ≥ 99。9%.
エラー推論:≤ 0。5% 5xx;適用範囲≥ 99%です。
ドリフト:PSI特性/レート<しきい値、ECE(キャリブレーション)は安定しています。
当期純利益の増加、詐欺の保存、時間の介入。
8.2メトリクス(Prometheus)
yaml
- http_request_duration_seconds{quantile="0. 95"}
- http_requests_total{code=~"5.."}
- model_inference_latency_ms_bucket
- feature_fetch_latency_ms_bucket
- model_score_distribution_bucket
- psi_feature_{name}
- expected_cost_live
アラート(フラグメント):
yaml
- alert: HighP95Latency expr: histogram_quantile(0. 95, sum(rate(model_inference_latency_ms_bucket[5m])) by (le)) > 0. 15 for: 10m
- alert: DriftDetected expr: psi_feature_amount_base > 0. 25 for: 15m
OpenTelemetry-span''feature_fetch'、'score'、'postprocess'、'guardrail'。
9) RG/AMLのガードレールおよび保証方針
前/後フィルター:禁止されたアクションのマスク(インプレッションの頻度、クールダウン、積極的なオファーの禁止)。
ポリシーシールド:RGスレッショルド→ソフトインターベンション/ポーズの上の速度。
監査:'policy_id'、 'propensity'、 'mask'、 'decision'、 'reason'のログを記録します。
PIIとレジデンシー:IDの代わりにトークン、EEA/UK/BR上の個別の暗号化とクラスタキー;正当化せずにクロスリージョンの結合を禁止します。
秘密:KMS/CMK、シークレットマネージャー;ログ/トラックにPIIがありません。
10)キャリブレーション、しきい値、意思決定ポリシー
アーティファクトとしてのキャリブレーション(Platt/Isotonic)。
期待された費用による閾値;レジストリ/フィーチャーフラグで設定可能。
安全帽子:上下の行為の限界、コンプライアンスのための手動上書き。
11)ロールバック、劣化およびDR
ワンクリックロールバック-ルートを以前の'model_version'に切り替えます。
Runbook:スクリプト"latentnost"、 "5xx"エラー"、"ドリフト/キャリブレーションが壊れた"、"外部フィーチャープロバイダが利用できません"。
欠陥の分離:遮断器、再試行/バックオフ、最後の有効な解決のキャッシュ。
DR:アーティファクト/レジストリのバックアップ、「暖かい」領域へのレプリケーション、演習。
python try:
features = fetch_features(timeout=30)
except TimeoutError:
features = last_known_good(user_id) # fallback
12)コストエンジニアリングとパフォーマンス
パスのプロファイリング:特徴(30-60%)、モデル(20-40%)、 ネットワーク/IO (10-30%)。
コスト削減:ホット機能のキャッシュ、リプレイクォータ、軽量モデル、INT8/FP16(必要に応じて)、遅延後処理。
RPS/CPU/レイテンシのHPA、ストリーム機能のステートサイズ制限。
チャージバック:コスト/リクエスト、コスト/機能;市場/チームの予算。
13)安全なリリースとコンプライアンス
製品準備基準:影のSLOグリーン、ドリフト/リークなし、モデルカードがいっぱい、公平性スライスが正常です。
レギュレータ:リリースのWORMアーカイブ(重み、キャリブレーション、しきい値、メトリック、テストログ)、変更できないエクスポートレポート。
DSAR/RTBF:特定のユーザーのトレースをキャッシュ/ログ/フィーチャーから削除する手順。
14)ロールアウトする前のQA
統合テスト:API契約、機能図、空/極端なケース。
負荷:p99の配分の尾、破裂の交通。
オンライン/オフラインの等価性テスト。
カオステスト:フィーチャーキャッシュ/ベース、外部サービスのタイムアウトをオフにします。
15)構成例
カナリアルーティング(アイデア)の入力:yaml
- match: [headers: {x-exp: "canary"}]
route:
- destination: {host: ml-score-v1-8-3, weight: 20}
- destination: {host: ml-score-v1-7-9, weight: 80}
モデルの状態(エンドポイント):
python
@app. get("/healthz")
def health():
return {"ok": True, "model_version": "1. 8. 3", "registry_sig_ok": verify_signature()}
16)プロセスとRACI
R(責任ある):MLOps(サービング/オーケストレーション/オブザバビリティ)、Data Eng(フィーチャー/キャッシュ/コントラクト)、Data Science(モデルカード/キャリブレーション/しきい値)。
A(説明責任):データ/CDOの責任者。
C(コンサルティング):コンプライアンス/DPO (PII/RG/AML/DSAR)、セキュリティ(KMS/シークレット/監査)、 SRE (SLO/インシデント)、ファイナンス(ROI/予算)。
I (Informed):製品/マーケティング/オペレーション/サポート。
17)実装ロードマップ
MVP (3-6週):1.モデルレジストリと不変アーティファクト;FastAPI/gRPC service+K8s/Helm。
2.p95/5xx/ドリフトモニタリングによるシャドウ起動、機能等価テスト。
3.カナリア10%→50%→100%自動スクリプトのロールバックとアラート。
4.モデルカード、キャリブレーション、予想コストのしきい値、ガードレールv1。
フェーズ2(6-12週間):- 特徴キャッシュ、遮断器、runbooks/DRの練習。
- RPS/レイテンシ、コストダッシュボード、チャージバックでの自動スケーリング。
- 公平性スライスモニタリング、WORMリリースアーカイブ。
- サービングのグラフ(候補者→再ランク)、スレートロギングの傾向。
- 複数の地域、個々のキーを持つ居住地(EEA/UK/BR)。
- 自動ロール/オーバードライブ、オートジェン品質/校正レポート。
18)配達チェックリスト
- モデルカードがいっぱいです。data/features/calibration/thresholdsはバージョン管理されています。
- 契約機能とオンライン/オフライン等価テストは緑色です。
- SLO: p95、 5xx、カバレッジ-影に緑色と10%カナリア≥ 24 h。
- アラートとダッシュボード(レイテンシ/エラー/ドリフト/予想コスト)が含まれています。
- ガードレールのRG/AMLおよび解決の監査は活動的です;PII/レジデンスが参加しました。
- ワンクリックロールバックとランブックのインシデントをテストしました。
- 費用は予算に合います。HPAとキャッシュが設定されています。
19)アンチパターンとリスク
レジストリと不変のアーティファクトのない手動ロールアウト。
オンライン/オフライン機能の一貫性のない→販売における不一致。
影/カナリア→隠された回帰はありません。
しきい値は予想コストではなく、校正はありません。
タイムアウト/キャッシュなしの同期外部参照。
DR/ロールバックなし、WORMリリースアーカイブなし。
20)ボトムライン
ML生産は「モデルチャレンジ」ではなく、エンジニアリングプラットフォームです。レジストリとバージョン、安全なロールアウト(シャドウ/カナリア/ブルーグリーン)、機能と校正規律、観測性とSLO、 RG/AML用のガードレール、明確なロールバック計画です。このプレイブックに従うことで、迅速で信頼性が高く、準拠した推論が得られ、一貫してビジネス価値を管理されたコストで提供されます。