Неделя 13: Развертывание ML-моделей в production
1. Теоретическая часть
1.1. Жизненный цикл ML-модели
1. Сбор данных → 2. Обучение модели → 3. Валидация → 4. Развертывание → 5. Мониторинг
1.2. Способы развертывания
Метод
Плюсы
Минусы
REST API (Flask/FastAPI)
Гибкость, простота
Требует инфраструктуры
Микросервисы (Docker/K8s)
Масштабируемость
Сложность настройки
Serverless (AWS Lambda)
Нет серверов, оплата по использованию
Ограничения по времени выполнения
Edge-устройства (TFLite)
Работа оффлайн
Ограниченные ресурсы
1.3. Инструменты
MLflow: Управление экспериментами и моделями
Docker: Контейнеризация приложений
FastAPI: Современный фреймворк для API
ONNX: Кросс-платформенный формат моделей
2.1. Создание REST API для модели на FastAPI
python
Copy
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import numpy as np
app = FastAPI()
# Загрузка модели
model = joblib.load("model.pkl")
# Определение формата входных данных
class InputData(BaseModel):
features: list[float]
@app.post("/predict")
def predict(data: InputData):
features = np.array(data.features).reshape(1, -1)
prediction = model.predict(features)
return {"prediction": prediction.tolist()[0]}
# Запуск: uvicorn main:app --reload
2.2. Упаковка в Docker
dockerfile
Copy
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
2.3. Логирование и мониторинг
python
Copy
import logging
from prometheus_client import Counter, start_http_server
# Настройка логирования
logging.basicConfig(filename='app.log', level=logging.INFO)
# Метрики Prometheus
PREDICTIONS_COUNTER = Counter('predictions_total', 'Total predictions')
@app.post("/predict")
def predict(data: InputData):
PREDICTIONS_COUNTER.inc()
logging.info(f"Prediction request: {data.features}")
# ... остальной код
3. Домашнее задание
Задача 1: Развертывание на облаке
1. Задеплойте FastAPI-приложение на AWS EC2 или Google Cloud Run
2. Протестируйте через Postman
Задача 2: Создание CI/CD пайплайна
1. Настройте GitHub Actions для автоматического тестирования и деплоя
2. Добавьте pytest для проверки API
Задача 3: Оптимизация модели
1. Конвертируйте модель в ONNX формат
2. Сравните скорость предсказания до/после оптимизации
Итоги недели
✅ Научились упаковывать модели в REST API
✅ Освоили Docker для контейнеризации
✅ Познакомились с мониторингом ML-моделей
✅ Разобрали облачное развертывание
Следующая тема: Подготовка к финальному проекту. 🎓