← Назад к вопросам
Как выпустить модель в production?
2.0 Middle🔥 61 комментариев
#MLOps и инфраструктура
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Развертывание ML модели в Production: полный процесс
Развертывание модели в production — это комплексный процесс, который включает подготовку модели, создание инфраструктуры, мониторинг и масштабирование. Это критическая фаза жизненного цикла машинного обучения.
Этап 1: Подготовка модели
Шаг 1: Сохранение модели
import joblib
import torch
# Для scikit-learn
joblib.dump(model, 'model.pkl')
loaded_model = joblib.load('model.pkl')
# Для PyTorch
torch.save(model.state_dict(), 'model.pth')
# Для TensorFlow
model.save('model.h5')
Шаг 2: Версионирование модели
import mlflow
mlflow.start_run()
mlflow.log_model(model, 'model')
mlflow.log_metrics({'accuracy': 0.95})
mlflow.end_run()
Шаг 3: Контейнеризация
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY model.pkl .
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]
Этап 2: API для модели
FastAPI сервис
from fastapi import FastAPI
import joblib
import numpy as np
from pydantic import BaseModel
app = FastAPI()
model = joblib.load('model.pkl')
class PredictionInput(BaseModel):
features: list[float]
@app.post("/predict")
async def predict(data: PredictionInput):
X = np.array([data.features])
prediction = model.predict(X)
return {"prediction": prediction[0]}
@app.get("/health")
async def health():
return {"status": "healthy"}
Этап 3: Развертывание инфраструктуры
Вариант 1: Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: ml-model-deployment
spec:
replicas: 3
selector:
matchLabels:
app: ml-model
template:
metadata:
labels:
app: ml-model
spec:
containers:
- name: ml-model
image: my-ml-model:1.0.0
ports:
- containerPort: 5000
livenessProbe:
httpGet:
path: /health
port: 5000
initialDelaySeconds: 30
Вариант 2: Облачные платформы
# Google Cloud Run
gcloud run deploy ml-model \
--image gcr.io/project/ml-model:latest \
--platform managed \
--region us-central1
# AWS SageMaker
predictor = model.deploy(
initial_instance_count=1,
instance_type='ml.m5.large'
)
# Heroku
git push heroku main
Этап 4: Мониторинг и логирование
Prometheus метрики
from prometheus_client import Counter, Histogram
import time
predictions_total = Counter('predictions_total', 'Total predictions')
prediction_latency = Histogram('prediction_latency_seconds', 'Latency')
@app.post("/predict")
async def predict(data: PredictionInput):
start_time = time.time()
prediction = model.predict(np.array([data.features]))[0]
latency = time.time() - start_time
predictions_total.inc()
prediction_latency.observe(latency)
return {"prediction": prediction}
Логирование
import logging
logger = logging.getLogger(__name__)
@app.post("/predict")
async def predict(data: PredictionInput):
logger.info(f"Received prediction request")
try:
prediction = model.predict(np.array([data.features]))[0]
return {"prediction": prediction}
except Exception as e:
logger.error(f"Prediction failed: {e}")
return {"error": str(e)}, 500
Этап 5: CI/CD Pipeline
stages:
- build
- test
- deploy
build_image:
stage: build
image: docker:latest
script:
- docker build -t my-ml-model:$CI_COMMIT_SHA .
- docker push my-ml-model:$CI_COMMIT_SHA
test:
stage: test
image: python:3.11
script:
- pip install -r requirements.txt
- pytest --cov=src
deploy_production:
stage: deploy
script:
- kubectl set image deployment/ml-model ml-model=my-ml-model:$CI_COMMIT_SHA
- kubectl rollout status deployment/ml-model
Этап 6: A/B Тестирование
import random
@app.post("/predict")
async def predict(data: PredictionInput):
if random.random() < 0.9:
prediction = new_model.predict(np.array([data.features]))[0]
model_version = "new"
else:
prediction = old_model.predict(np.array([data.features]))[0]
model_version = "old"
return {
"prediction": prediction,
"model_version": model_version
}
Чеклист развертывания
- Модель сохранена и версионирована
- API создан и протестирован локально
- Dockerfile создан и образ собран
- Тесты проходят (coverage > 90%)
- Мониторинг настроен (Prometheus, Grafana)
- Логирование работает
- CI/CD pipeline готов
- Graceful shutdown реализован
- Rate limiting установлен
- API документирована (Swagger)
- Rollback процедура документирована
- SLA и метрики определены
- Алерты настроены
Типичные ошибки и решения
- Версионирование: Используй MLflow, DVC для отслеживания
- Зависимости: Зафиксируй версии в requirements.txt
- Данные: Версионируй скрипты предобработки
- Мониторинг: Отслеживай дрейф данных (data drift)
- Масштабирование: Используй load balancing
- Производительность: Оптимизируй время инференса
- Безопасность: Используй SSL/TLS, аутентификацию