MCP HubMCP Hub
스킬 목록으로 돌아가기

deploy-ml-model-serving

pjt222
업데이트됨 Yesterday
3 조회
17
2
17
GitHub에서 보기
테스팅aitestingapi

정보

이 스킬은 MLflow, BentoML 또는 Seldon Core를 사용하여 ML 모델을 프로덕션에 배포하며, REST/gRPC 엔드포인트를 제공합니다. 자동 확장, 모니터링 및 A/B 테스트를 구현하여 대규모 고성능 실시간 추론을 지원합니다. 예측 API 설정, 가변 부하 처리 또는 배치 추론에서 실시간 추론으로 전환할 때 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/deploy-ml-model-serving

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서

部署 ML 模型服務

詳見 Extended Examples 全備之配置文件與模板。

部署機器學習模型至產,具可擴展服務設施、監視、A/B 測試。

用時

  • 部已訓模型供產之實時推理
  • 為模型預測立 REST 或 gRPC 之 API
  • 為變載行自動擴縮
  • 行模型版本間之 A/B 測
  • 由批量轉實時推理
  • 建低延時預測之服
  • 理產中之多模型版本

  • 必要:MLflow 模型冊中已冊者,或已訓模型產物
  • 必要:Kubernetes 集群或容器編排平臺
  • 必要:擇服務框架(MLflow、BentoML、Seldon Core、TorchServe)
  • 可選:深度學習之 GPU
  • 可選:監視設施(Prometheus、Grafana)
  • 可選:負載均衡與入口控制

第一步:以 MLflow 模型服務部署

用 MLflow 內建服務,速部 scikit-learn、PyTorch、TensorFlow 模型。

# 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);驗模型 flavor 兼容;察容器日誌(docker logs <container-id>)。

第二步:以 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 部署建三副本;負載均衡曝外端;健檢皆過。

敗則: 驗 BentoML 已裝(bentoml --version);察 BentoML 庫中模型存(bentoml models list);確 Docker 守護行;驗 Kubernetes 集群可訪(kubectl cluster-info);察資源限未超;察 pod 日誌(kubectl logs <pod-name>);驗服務選擇器合 pod 標籤。

第三步:以 Seldon Core 行進階特性

用 Seldon Core 以行多模型服、A/B 測、可釋性。

# 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 析錄度。

敗則: 驗 Seldon Core 操作者行(kubectl get pods -n seldon-system);察 SeldonDeployment 狀(kubectl describe seldondeployment);確集群可訪鏡像庫;驗模型 URI 解;察 Seldon 操作者之 RBAC;察模型容器日誌。

第四步:行監視與可觀測

為模型服設施加全面監視。

# 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 抓目 UP(http://prometheus:9090/targets);察 metrics 端可達(curl http://model-pod:8000/metrics);確 Kubernetes 服發現已配;驗 Grafana 數據源連;察度端口之防火牆律。

第五步:行自動擴縮

依請求載配水平 pod 擴縮。

# 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;察穩窗非過嚴。

第六步:行金絲雀部署策略

漸出新模型版本,轉移流量。

# 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 部署有多預測者;察流量百分和為 100;確金絲雀鏡存可取;驗健檢有 Prometheus 度;察回滾邏輯行之正;察二版 pod 日誌。

  • 模型服應預測請求
  • REST/gRPC 端可用且已文
  • Docker 容器成建且行
  • Kubernetes 部署生期副本
  • 負載均衡曝外端
  • 健檢(存/備)過
  • Prometheus 度已出且抓
  • Grafana 儀表盤示實時度
  • 載下自動擴縮觸
  • A/B 測正分流量
  • 金絲雀部署漸出
  • 金絲雀敗時回滾行

  • 冷啟延時:首請求因模型載而慢——用足延之備探,行模型緩
  • 內存漏:久行服累內存——察內存,周期重啟,剖析碼
  • 依賴衝:模型依賴與服框架不合——用鎖定版,於 Docker 中測後再部
  • 資源限過低:pod OOMKilled 或 CPU 節——剖析資源,依載測定合限
  • 缺健檢:Kubernetes 送流量至不健 pod——行適之存/備探
  • 無回滾策:壞部署無可易回之法——用金絲雀,留前版可用
  • 忽延時:唯聚焦精度不顧推理速——測延時,優化模型/碼,用批
  • 單副本:無高可用,部署時停機——用 minimum 2 副本,配反親和
  • 無監視:問題至客訴方現——首日即行全面度
  • GPU 不用:有 GPU 而未用——設 CUDA 可見設備,驗 Kubernetes 中 GPU 分

Related Skills

  • register-ml-model - 部前冊模型
  • run-ab-test-models - 模型版本間之 A/B 測
  • deploy-to-kubernetes - 通用 Kubernetes 部署模式
  • monitor-ml-model-performance - 察模型漂移與衰
  • orchestrate-ml-pipeline - 自動模型再訓與部

GitHub 저장소

pjt222/agent-almanac
경로: i18n/wenyan/skills/deploy-ml-model-serving
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

evaluating-llms-harness

테스팅

이 Claude Skill은 MMLU, GSM8K를 포함한 60개 이상의 표준화된 학술 과제에서 LLM 성능을 벤치마크하기 위해 lm-evaluation-harness를 실행합니다. 개발자들이 모델 품질을 비교하고, 학습 진행 상황을 추적하거나 학술 결과를 보고할 수 있도록 설계되었습니다. 이 도구는 HuggingFace와 vLLM 모델을 포함한 다양한 백엔드를 지원합니다.

스킬 보기

cloudflare-cron-triggers

테스팅

이 스킬은 cron 표현식을 사용하여 Worker를 스케줄링하기 위한 Cloudflare Cron Triggers 구현에 관한 포괄적인 지식을 제공합니다. 주기적 작업, 유지보수 작업, 자동화된 워크플로우 설정 방법을 다루며, 잘못된 cron 표현식이나 시간대 문제 같은 일반적인 이슈들을 해결하는 방법을 포함합니다. 개발자들은 이를 통해 스케줄된 핸들러 구성, cron 트리거 테스트, Workflows 및 Green Compute와의 연동 작업을 수행할 수 있습니다.

스킬 보기

webapp-testing

테스팅

이 Claude Skill은 Python 스크립트를 통해 로컬 웹 애플리케이션을 테스트하기 위한 Playwright 기반 툴킷을 제공합니다. 프론트엔드 검증, UI 디버깅, 스크린샷 캡처, 로그 확인 기능을 지원하며 서버 라이프사이클을 관리합니다. 브라우저 자동화 작업에 사용하되 컨텍스트 오염을 방지하기 위해 소스 코드를 읽지 않고 스크립트를 직접 실행하세요.

스킬 보기

finishing-a-development-branch

테스팅

이 스킬은 테스트 통과를 확인한 후 체계적인 통합 옵션을 제시하여 개발자가 완성된 작업을 마무리하도록 돕습니다. 구현이 완료된 후 머지, PR 생성, 브랜치 정리와 같은 워크플로우를 안내합니다. 코드가 준비되고 테스트가 완료되었을 때 개발 프로세스를 체계적으로 마무리하기 위해 사용하세요.

스킬 보기