deploy-ml-model-serving
정보
이 스킬은 MLflow, BentoML 또는 Seldon Core를 사용하여 머신러닝 모델을 프로덕션 서빙 인프라에 배포하며, REST/gRPC 엔드포인트를 제공합니다. 고성능 모델 추론을 위해 오토스케일링, 모니터링 및 A/B 테스트를 구현합니다. 훈련된 모델을 실시간 예측에 배포하거나 예측 API를 설정하거나 배치 처리에서 실시간 추론으로 전환할 때 사용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/deploy-ml-model-servingClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
MLモデルサービングのデプロイ
完全な設定ファイルとテンプレートについては拡張例を参照。
スケーラブルなサービングインフラストラクチャ、モニタリング、A/Bテストを使用して機械学習モデルを本番環境にデプロイする。
使用タイミング
- 学習済みモデルをリアルタイム推論のために本番環境にデプロイする時
- モデル予測用のRESTまたはgRPC APIをセットアップする時
- 可変負荷パターンに対するオートスケーリングを実装する時
- モデルバージョン間のA/Bテストを実行する時
- バッチからリアルタイム推論に移行する時
- 低レイテンシの予測サービスを構築する時
- 本番環境で複数のモデルバージョンを管理する時
入力
- 必須: MLflow Model Registryに登録されたモデルまたは学習済みモデルアーティファクト
- 必須: Kubernetesクラスターまたはコンテナオーケストレーションプラットフォーム
- 必須: サービングフレームワークの選択(MLflow、BentoML、Seldon Core、TorchServe)
- 任意: ディープラーニングモデル用のGPUリソース
- 任意: モニタリングインフラストラクチャ(Prometheus、Grafana)
- 任意: ロードバランサーとIngressコントローラー
手順
ステップ1: MLflow Models Servingによるデプロイ
scikit-learn、PyTorch、TensorFlowモデルの迅速なデプロイにMLflowの組み込みサービングを使用する。
# Serve model locally for testing
mlflow models serve \
--model-uri models:/customer-churn-classifier/Production \
--port 5001 \
--host 0.0.0.0
# Test endpoint
curl -X POST http://localhost:5001/invocations \
-H 'Content-Type: application/json' \
-d '{
"dataframe_records": [
{"feature1": 1.0, "feature2": 2.0, "feature3": 3.0}
]
}'
Dockerデプロイメント:
# Dockerfile.mlflow-serving
FROM python:3.9-slim
# Install MLflow and dependencies
RUN pip install mlflow boto3 scikit-learn
# Set environment variables
ENV MLFLOW_TRACKING_URI=http://mlflow-server:5000
# ... (see EXAMPLES.md for complete implementation)
ローカルテスト用のDocker Compose:
# docker-compose.mlflow-serving.yml
version: '3.8'
services:
model-server:
build:
context: .
dockerfile: Dockerfile.mlflow-serving
# ... (see EXAMPLES.md for complete implementation)
デプロイメントのテスト:
# test_mlflow_serving.py
import requests
import json
def test_prediction():
url = "http://localhost:8080/invocations"
# Prepare input data
# ... (see EXAMPLES.md for complete implementation)
期待結果: モデルサーバーが正常に起動し、HTTP POSTリクエストに応答し、JSON形式で予測を返す。Dockerコンテナがエラーなく実行される。
失敗時: モデルURIが有効か確認(mlflow models list)、MLflowトラッキングサーバーへのアクセス可能性を確認、コンテナ内にすべてのモデル依存関係がインストールされているか確認、ポートの空き状況を確認(netstat -tulpn | grep 8080)、モデルフレーバーの互換性を確認、コンテナログを検査(docker logs <container-id>)。
ステップ2: 本番スケール向けBentoMLによるデプロイ
より高いパフォーマンスと機能を持つ高度なサービングにBentoMLを使用する。
# bentoml_service.py
import bentoml
from bentoml.io import JSON, NumpyNdarray
import numpy as np
import pandas as pd
# Load model from MLflow
import mlflow
# ... (see EXAMPLES.md for complete implementation)
ビルドとコンテナ化:
# Build Bento
bentoml build
# Containerize
bentoml containerize customer_churn_classifier:latest \
--image-tag customer-churn:v1.0
# Run container
docker run -p 3000:3000 customer-churn:v1.0
BentoML設定:
# bentofile.yaml
service: "bentoml_service:ChurnPredictionService"
include:
- "bentoml_service.py"
- "preprocessing.py"
python:
packages:
- scikit-learn==1.0.2
- pandas==1.4.0
- numpy==1.22.0
- mlflow==2.0.1
docker:
distro: debian
python_version: "3.9"
cuda_version: null # Set to "11.6" for GPU support
Kubernetesデプロイメント:
# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: churn-prediction
labels:
app: churn-prediction
spec:
# ... (see EXAMPLES.md for complete implementation)
Kubernetesへのデプロイ:
# Apply Kubernetes manifests
kubectl apply -f k8s/deployment.yaml
# Check deployment status
kubectl get deployments
kubectl get pods
kubectl get services
# Test endpoint
EXTERNAL_IP=$(kubectl get svc churn-prediction-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
curl -X POST http://$EXTERNAL_IP/predict \
-H 'Content-Type: application/json' \
-d '{"instances": [{"tenure": 12, "monthly_charges": 70.35}]}'
期待結果: BentoMLサービスが正常にビルドされ、コンテナが実行され予測をサーブし、Kubernetesデプロイメントが3レプリカを作成し、ロードバランサーが外部エンドポイントを公開し、ヘルスチェックがパスする。
失敗時: BentoMLのインストールを確認(bentoml --version)、BentoMLストアにモデルが存在するか確認(bentoml models list)、Dockerデーモンが実行中か確認、Kubernetesクラスターへのアクセスを確認(kubectl cluster-info)、リソース制限が超過していないか確認、Podログを検査(kubectl logs <pod-name>)、サービスセレクターがPodラベルに一致するか確認。
ステップ3: 高度な機能のためのSeldon Coreの実装
マルチモデルサービング、A/Bテスト、説明可能性にSeldon Coreを使用する。
# seldon_wrapper.py
import logging
from typing import Dict, List, Union
import numpy as np
import mlflow
logger = logging.getLogger(__name__)
# ... (see EXAMPLES.md for complete implementation)
Seldonデプロイメント設定:
# seldon-deployment.yaml
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: churn-classifier
namespace: seldon
spec:
name: churn-classifier
# ... (see EXAMPLES.md for complete implementation)
A/Bテスト設定:
# seldon-ab-test.yaml
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: churn-classifier-ab
spec:
name: churn-classifier-ab
predictors:
# ... (see EXAMPLES.md for complete implementation)
Kubernetesへのデプロイ:
# Install Seldon Core operator
kubectl create namespace seldon-system
helm install seldon-core seldon-core-operator \
--repo https://storage.googleapis.com/seldon-charts \
--namespace seldon-system \
--set usageMetrics.enabled=true
# Create namespace for models
# ... (see EXAMPLES.md for complete implementation)
期待結果: Seldon Coreオペレーターが正常にインストールされ、モデルデプロイメントがPodを作成し、RESTエンドポイントが予測に応答し、A/Bテストがトラフィックを正しく分割し、Seldon Analyticsがメトリクスを記録する。
失敗時: Seldon Coreオペレーターの実行を確認(kubectl get pods -n seldon-system)、SeldonDeploymentのステータスを確認(kubectl describe seldondeployment)、クラスターからイメージレジストリにアクセス可能か確認、モデルURIの解決を確認、SeldonオペレーターのRBAC権限を確認、モデルコンテナログを検査。
ステップ4: モニタリングとオブザーバビリティの実装
モデルサービングインフラストラクチャに包括的なモニタリングを追加する。
# monitoring.py
from prometheus_client import Counter, Histogram, Gauge, start_http_server
import time
import logging
logger = logging.getLogger(__name__)
# Prometheus metrics
# ... (see EXAMPLES.md for complete implementation)
Prometheus設定:
# prometheus-config.yaml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'model-serving'
kubernetes_sd_configs:
# ... (see EXAMPLES.md for complete implementation)
Grafanaダッシュボード JSON:
{
"dashboard": {
"title": "ML Model Serving Metrics",
"panels": [
{
"title": "Predictions Per Second",
"targets": [
{
# ... (see EXAMPLES.md for complete implementation)
期待結果: Prometheusがメトリクスを正常にスクレイプし、Grafanaダッシュボードが予測スループット、レイテンシパーセンタイル、エラー率、アクティブリクエストをリアルタイムで表示する。
失敗時: Prometheusのスクレイプターゲットがアクティブか確認(http://prometheus:9090/targets)、メトリクスエンドポイントへのアクセス可能性を確認(curl http://model-pod:8000/metrics)、Kubernetesサービスディスカバリーの設定を確認、Grafanaデータソース接続を確認、メトリクスポートのファイアウォールルールを確認。
ステップ5: オートスケーリングの実装
リクエスト負荷に基づくHorizontal Pod Autoscalingを設定する。
# hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: churn-prediction-hpa
namespace: seldon
spec:
scaleTargetRef:
# ... (see EXAMPLES.md for complete implementation)
オートスケーリングの適用:
# Enable metrics server (if not already installed)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# Apply HPA
kubectl apply -f hpa.yaml
# Check HPA status
kubectl get hpa -n seldon
kubectl describe hpa churn-prediction-hpa -n seldon
# Load test to trigger scaling
kubectl run -it --rm load-generator --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://churn-prediction-service/predict; done"
# Watch scaling
kubectl get hpa -n seldon --watch
期待結果: HPAがCPU/メモリ/カスタムメトリクスを監視し、負荷時にレプリカをスケールアップし、安定化期間後にスケールダウンし、最小/最大レプリカ制限が遵守される。
失敗時: metrics-serverの実行を確認(kubectl get deployment metrics-server -n kube-system)、Podリソースリクエストが定義されているか確認(HPAにはリクエストが必要)、カスタムメトリクスを使用する場合その利用可能性を確認、HPAコントローラーのRBAC権限を確認、安定化ウィンドウが制限的すぎないか確認。
ステップ6: カナリアデプロイメント戦略の実装
トラフィック移行による新モデルバージョンの段階的ロールアウト。
# canary-deployment.yaml
apiVersion: machinelearning.seldon.io/v1
kind: SeldonDeployment
metadata:
name: churn-classifier-canary
spec:
name: churn-classifier-canary
predictors:
# ... (see EXAMPLES.md for complete implementation)
段階的ロールアウトスクリプト:
# canary_rollout.py
import time
import subprocess
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# ... (see EXAMPLES.md for complete implementation)
期待結果: カナリアデプロイメントが0%のトラフィックで開始し、段階的なトラフィック移行が自動的に行われ、各段階でヘルスチェックがパスし、メトリクスが劣化した場合にロールバックが発動し、すべての段階がパスした後に完全ロールアウトされる。
失敗時: Seldonデプロイメントに複数のpredictorがあるか確認、トラフィック割合の合計が100であるか確認、カナリアイメージが存在しプル可能か確認、ヘルスチェック用のPrometheusメトリクスが利用可能か確認、ロールバックロジックが正しく実行されるか確認、両バージョンのPodログを検査。
バリデーション
- モデルサーバーが予測リクエストに応答する
- REST/gRPCエンドポイントが機能しドキュメント化されている
- Dockerコンテナが正常にビルド・実行される
- Kubernetesデプロイメントが期待されるレプリカを作成する
- ロードバランサーが外部エンドポイントを公開する
- ヘルスチェック(liveness/readiness)がパスする
- Prometheusメトリクスがエクスポート・スクレイプされている
- Grafanaダッシュボードがリアルタイムメトリクスを表示する
- 負荷下でオートスケーリングが発動する
- A/Bテストがトラフィックを正しく分割する
- カナリアデプロイメントが段階的にロールアウトされる
- カナリア失敗時にロールバックが機能する
よくある落とし穴
- コールドスタートレイテンシ: モデルロードによる最初のリクエストの遅延。適切な遅延を持つreadinessプローブを使用し、モデルキャッシングを実装する
- メモリリーク: 長期実行サーバーがメモリを蓄積する。メモリ使用量を監視し、定期的な再起動を実装し、コードをプロファイリングする
- 依存関係の競合: モデルの依存関係がサービングフレームワークと非互換。正確にピン留めされたバージョンを使用し、デプロイ前にDockerでテストする
- リソース制限が低すぎる: PodがOOMKilledまたはCPUスロットル。リソース使用量をプロファイリングし、負荷テストに基づいて適切な制限を設定する
- ヘルスチェックの欠如: Kubernetesが不健全なPodにトラフィックをルーティング。適切なliveness/readinessプローブを実装する
- ロールバック戦略がない: 簡単なロールバックなしの不良デプロイ。カナリアデプロイメントを使用し、前バージョンを利用可能に保つ
- レイテンシの無視: 精度のみに注目し推論速度を軽視。レイテンシをベンチマークし、モデル/コードを最適化し、バッチングを使用する
- 単一レプリカ: 高可用性がなくデプロイ中にダウンタイム。最低2レプリカを使用し、アンチアフィニティを設定する
- モニタリングなし: 顧客から苦情が来るまで問題が検知されない。初日から包括的なメトリクスを実装する
- GPUが活用されていない: GPUが利用可能だが使用されていない。CUDA visible devicesを設定し、KubernetesでのGPU割り当てを確認する
関連スキル
register-ml-model-- デプロイ前にモデルを登録するrun-ab-test-models-- モデルバージョン間のA/Bテストを実装するdeploy-to-kubernetes-- 一般的なKubernetesデプロイメントパターンmonitor-ml-model-performance-- モデルドリフトと劣化を監視するorchestrate-ml-pipeline-- モデルの再学習とデプロイを自動化する
GitHub 저장소
연관 스킬
qmd
개발qmd는 BM25, 벡터 임베딩, 재순위화를 결합한 하이브리드 검색을 통해 로컬 파일을 색인화하고 검색할 수 있는 로컬 검색 및 색인화 CLI 도구입니다. 명령줄 사용과 Claude 통합을 위한 MCP(Model Context Protocol) 모드를 모두 지원합니다. 이 도구는 임베딩에 Ollama를 사용하고 색인을 로컬에 저장하여 터미널에서 직접 문서나 코드베이스를 검색하는 데 이상적입니다.
subagent-driven-development
개발이 스킬은 각 독립적인 작업마다 새로운 하위 에이전트를 배치하고 작업 사이에 코드 리뷰를 진행하여 구현 계획을 실행합니다. 이 리뷰 프로세스를 통해 품질 게이트를 유지하면서 빠른 반복 작업을 가능하게 합니다. 동일한 세션 내에서 대부분 독립적인 작업을 진행할 때 내장된 품질 검증과 함께 지속적인 진행을 보장하기 위해 사용하세요.
mcporter
개발mcporter 스킬은 개발자가 Claude에서 직접 Model Context Protocol(MCP) 서버를 관리하고 호출할 수 있도록 합니다. 이 스킬은 사용 가능한 서버를 나열하고, 인수를 사용해 해당 서버의 도구를 호출하며, 인증 및 데몬 생명주기를 처리하는 명령어를 제공합니다. 개발 워크플로우에서 MCP 서버 기능을 통합하고 테스트할 때 이 스킬을 사용하세요.
adk-deployment-specialist
개발이 스킬은 A2A 프로토콜을 사용하여 Vertex AI ADK 에이전트를 배포하고 오케스트레이션하며, AgentCard 검색, 작업 제출, 코드 실행 샌드박스 및 메모리 뱅크와 같은 지원 도구를 관리합니다. Python, Java 또는 Go 언어로 순차, 병렬 또는 루프 오케스트레이션 패턴을 갖춘 다중 에이전트 시스템 구축을 가능하게 합니다. Google Cloud에서 ADK 에이전트 배포 또는 에이전트 워크플로우 오케스트레이션을 요청받았을 때 사용하세요.
