# Что такое MLflow

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Понять **назначение MLflow**, его четыре основных API (Tracking, Projects, Models, Registry) и место в MLOps-стеке.

## Предварительно

- [Что такое MLOps](chto-takoe-mlops.md)

## Время

**2–3 часа**

---

## Определение

**MLflow** — open-source **платформа** для управления жизненным циклом ML. Разработана Databricks, активно используется в индустрии. Решает проблему «**где мой эксперимент, метрики и модель?**»

MLflow **не заменяет** весь MLOps, но закрывает критичный слой: **experiment tracking**, **упаковка моделей**, **model registry**.

## Четыре столпа MLflow

| Компонент | Задача |
|-----------|--------|
| **Tracking** | Логирование параметров, метрик, артефактов, runs |
| **Projects** | Воспроизводимый запуск кода (conda/docker entry point) |
| **Models** | Стандартный формат упаковки модели (flavors) |
| **Model Registry** | Версии моделей, стадии (Staging/Production), approval |

```mermaid
flowchart TB
  subgraph MLflow
    T[Tracking]
    P[Projects]
    M[Models]
    R[Registry]
  end
  Code[Ваш Python-код] --> T
  T --> M
  M --> R
  P --> T
```

## Как выглядит типичный workflow

1. В коде обучения вызываете `mlflow.start_run()`
2. Логируете `mlflow.log_param("lr", 0.01)`, `mlflow.log_metric("accuracy", 0.92)`
3. Сохраняете модель: `mlflow.sklearn.log_model(model, "model")`
4. В UI (`mlflow ui`) сравниваете runs
5. Лучшую модель регистрируете в **Model Registry**
6. Production-сервис загружает модель по имени и версии из registry

## Минимальный пример (учебный)

```python
import mlflow

with mlflow.start_run():
    mlflow.log_param("n_estimators", 100)
    mlflow.log_metric("accuracy", 0.87)
    # mlflow.sklearn.log_model(model, "model")  # после обучения
```

Секреты, пароли и реальные IP в примерах **не используйте** — только placeholder'ы.

## MLflow Server vs локальный режим

| Режим | Когда |
|-------|-------|
| **Локальный** (`./mlruns`) | Обучение на ноутбуке, учебные лабы |
| **Tracking Server** | Команда, общий UI, централизованное хранилище |
| **Managed** (Databricks MLflow) | Enterprise, SSO, масштаб |

Backend store (метаданные) и artifact store (файлы) могут быть разными — подробнее в [03 — Компоненты MLflow](../03-komponenty-mlflow/README.md).

## Поддерживаемые фреймворки (flavors)

Scikit-learn, PyTorch, TensorFlow, XGBoost, LightGBM, Hugging Face, LangChain и др. через **MLmodel** формат и `mlflow.*.log_model`.

## Что MLflow **не** делает из коробки

- Оркестрация тяжёлых DAG (для этого Airflow, Prefect, Kubeflow Pipelines)
- Feature store (Feast, Tecton — отдельно)
- Полный data versioning (часто DVC + MLflow)
- GPU scheduling (Kubernetes, Slurm)

## История и экосистема

- Первый релиз ~2018, быстро стал стандартом de facto для tracking
- Интеграции: Kubernetes, Docker, REST API, плагины для storage (S3, GCS, Azure)

## Ошибки новичков

- Логировать всё подряд без структуры experiment/run
- Не задавать `experiment_name` — хаос в UI
- Хранить гигабайты сырых данных в artifacts вместо ссылок на версионированный датасет

---

## Самопроверка

1. Назовите четыре компонента MLflow.
2. Чем Tracking отличается от Model Registry?
3. Зачем нужен единый формат MLmodel?

---

## Дальше

→ [MLOps и MLflow вместе](mlops-i-mlflow-vmeste.md)
