# MLOps

> Набор практик и инструментов для надёжной разработки, развёртывания и сопровождения моделей машинного обучения в продакшене — перенос идей DevOps на ML.

Источник: https://llmdocs.ru/wiki/mlops/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Полное название**: Machine Learning Operations
- **Истоки**: DevOps, статья Google «Hidden Technical Debt in Machine Learning Systems» (2015)
- **Этапы**: данные, обучение, оценка, развёртывание, мониторинг
- **Отслеживание экспериментов**: MLflow, Weights & Biases
- **Данные и признаки**: DVC, Feast, lakeFS
- **Оркестрация**: Airflow, Kubeflow, Prefect, Dagster
- **Сервинг**: KServe, BentoML, Triton, vLLM
- **Мониторинг**: Evidently, Prometheus, Grafana
**MLOps** (англ. *Machine Learning Operations*) — набор практик, процессов и инструментов, позволяющих надёжно доводить модели [машинного обучения](https://llmdocs.ru/wiki/machine-learning.md) от эксперимента до продакшена и поддерживать их работу. Это перенос идей DevOps — автоматизации, [CI/CD](https://llmdocs.ru/wiki/ci-cd.md), мониторинга, воспроизводимости — на системы, поведение которых определяется не только кодом, но и данными.

Без MLOps типичная судьба модели — ноутбук на компьютере исследователя, который никто не может воспроизвести, или модель в продакшене, качество которой тихо деградирует месяцами.

## Почему ML сложнее обычного ПО

В 2015 году инженеры Google опубликовали статью «Скрытый технический долг в системах машинного обучения»: код самой модели — лишь малая часть реальной ML-системы, а вокруг него — сбор и проверка данных, извлечение признаков, конфигурация, инфраструктура обслуживания и мониторинг.[1] Специфические трудности:

- **Три артефакта вместо одного.** Результат зависит от кода, данных и гиперпараметров; изменение любого из них меняет модель.
- **Тихие отказы.** Модель не падает с ошибкой — она просто начинает ошибаться чаще, когда меняются входные данные ([Дрейф данных](https://llmdocs.ru/wiki/data-drift.md)).
- **Недетерминированность.** Повторное обучение даёт немного другую модель; без фиксации версий и случайных зёрен невозможно понять, что изменилось.
- **Связь обучения и обслуживания.** Признаки должны вычисляться одинаково при обучении и в продакшене, иначе возникает перекос (*training-serving skew*).

## Жизненный цикл

| Этап | Что делается | Инструменты |
|---|---|---|
| Данные | сбор, проверка, версионирование, разметка | [DVC](https://llmdocs.ru/wiki/dvc.md), lakeFS, Great Expectations |
| Признаки | единые вычисления для обучения и инференса | [Feature store](https://llmdocs.ru/wiki/feature-store.md) (Feast) |
| Эксперименты | обучение, логирование параметров и метрик | [MLflow](https://llmdocs.ru/wiki/mlflow.md), Weights & Biases |
| Конвейер обучения | автоматическое переобучение | Airflow, Kubeflow Pipelines, Dagster |
| Реестр моделей | версии, стадии (staging, production), метаданные | MLflow Model Registry |
| Развёртывание | API, пакетная обработка, на устройстве | [KServe, BentoML, Triton](https://llmdocs.ru/wiki/model-serving.md), [Docker](https://llmdocs.ru/wiki/docker.md), [Kubernetes](https://llmdocs.ru/wiki/kubernetes.md) |
| Мониторинг | качество, дрейф, задержки, стоимость | Evidently, [Prometheus](https://llmdocs.ru/wiki/prometheus.md), Grafana |

## Уровни зрелости

Google описывает три уровня автоматизации:[2]

- **Уровень 0 — ручной процесс.** Исследователь обучает модель в ноутбуке и передаёт файл инженерам; переобучение редкое и ручное.
- **Уровень 1 — автоматизированный конвейер обучения.** Переобучение на свежих данных запускается по расписанию или по сигналу, модель проверяется и выкатывается автоматически (*continuous training*).
- **Уровень 2 — CI/CD для конвейеров.** Сам конвейер обучения тестируется, собирается и развёртывается автоматически, что позволяет быстро проверять новые идеи.

Мартин Фаулер и коллеги описали похожий подход под названием CD4ML — непрерывная поставка для машинного обучения.[3]

## Пример: отслеживание экспериментов

```python
import mlflow
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score

mlflow.set_experiment("churn")
with mlflow.start_run():
    params = {"n_estimators": 300, "max_depth": 8}
    model = RandomForestClassifier(**params).fit(X_train, y_train)
    mlflow.log_params(params)
    mlflow.log_metric("f1", f1_score(y_test, model.predict(X_test)))
    mlflow.sklearn.log_model(model, name="model", registered_model_name="churn-rf")
```

Каждый запуск сохраняет параметры, метрики и саму модель; в веб-интерфейсе MLflow запуски можно сравнить, а лучшую модель — перевести в продакшен через реестр.[4]

## Мониторинг

В продакшене отслеживают несколько слоёв:

1. **Сервисные метрики** — задержка, ошибки, нагрузка, стоимость (как у любого сервиса, см. [Мониторинг и алертинг](https://llmdocs.ru/wiki/monitoring-alerting.md)).
2. **Данные на входе** — пропуски, выход значений за привычные диапазоны, сдвиг распределений признаков.
3. **Предсказания** — распределение ответов модели, доля уверенных предсказаний.
4. **Качество** — истинные метрики, когда становятся известны правильные ответы (часто с задержкой).

Библиотеки вроде Evidently строят отчёты о дрейфе данных и качестве модели.[6] Сигнал о деградации запускает расследование или автоматическое переобучение.

## LLMOps

С распространением [языковых моделей](https://llmdocs.ru/wiki/llm.md) появилось направление **LLMOps**. Модели обычно не обучают, а используют через API или дообучают; на первый план выходят версионирование промптов, [оценка качества](https://llmdocs.ru/wiki/llm-evals.md) на наборах тестовых вопросов, трассировка цепочек вызовов агентов, контроль стоимости токенов и защита от [prompt injection](https://llmdocs.ru/wiki/prompt-injection.md). Базовые принципы — воспроизводимость, автоматические проверки, мониторинг — остаются теми же.[5]

## См. также

- [MLflow](https://llmdocs.ru/wiki/mlflow.md)
- [Сервинг моделей](https://llmdocs.ru/wiki/model-serving.md)
- [Дрейф данных](https://llmdocs.ru/wiki/data-drift.md)
- [CI/CD](https://llmdocs.ru/wiki/ci-cd.md)
- [Машинное обучение](https://llmdocs.ru/wiki/machine-learning.md)

## Источники

1. [D. Sculley et al. — Hidden Technical Debt in Machine Learning Systems (NeurIPS 2015)](https://papers.nips.cc/paper_files/paper/2015/hash/86df7dcfd896fcaf2674f757a2463eba-Abstract.html)
2. [Google Cloud — MLOps: Continuous delivery and automation pipelines in machine learning](https://cloud.google.com/architecture/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning)
3. [Martin Fowler — Continuous Delivery for Machine Learning (CD4ML)](https://martinfowler.com/articles/cd4ml.html)
4. [MLflow — документация](https://mlflow.org/docs/latest/index.html)
5. [ml-ops.org — MLOps Principles](https://ml-ops.org/content/mlops-principles)
6. [Evidently — документация](https://docs.evidentlyai.com/)
