Оркестрация пайплайнов
Когда шагов больше одного, кто-то должен дирижировать их порядком, повторами и зависимостями.
Оркестратор — система, которая запускает шаги пайплайна в нужном порядке, следит за зависимостями, повторяет упавшее и даёт наблюдаемость; пайплайн обычно описывают как DAG.
Зачем оркестрация
ML-пайплайн — это цепочка: подготовка данных → обучение → валидация → деплой. Запускать её вручную или одним скриптом хрупко: упал шаг в середине — непонятно, как продолжить; нет расписания, повторов, истории, мониторинга. Оркестратор берёт это на себя: запуск по расписанию/триггеру, автоповторы, передача артефактов между шагами, видимый граф выполнения.
DAG: граф пайплайна
DAG (directed acyclic graph) — направленный ациклический граф: узлы это задачи, рёбра — зависимости «сначала это, потом то». Ацикличность гарантирует, что нет бесконечных циклов. Оркестратор по DAG знает, что можно запускать параллельно, а что — только после завершения предшественников.
prepare_data ---> train ---> validate ---> deploy
| ^
+------> build_features ----+
(build_features и train ждут prepare_data; deploy ждёт validate)
Связь с курсом про Airflow
Если вы проходили курс про Airflow — это ровно тот же движок. Airflow описывает DAG на Python, планирует и мониторит задачи. В MLOps его используют как общий оркестратор: дёрнуть обучение по расписанию, по приходу данных или по сигналу от монитора дрейфа. Это «рабочая лошадка» для пайплайнов, не только ML.
Три оркестратора
| Инструмент | Ниша |
| Airflow | универсальный оркестратор любых пайплайнов; зрелый, огромная экосистема |
| Kubeflow Pipelines | ML-нативный, на Kubernetes; каждый шаг — контейнер, удобен для тяжёлого ML и GPU |
| Prefect | современный, питоничный, низкий порог входа; гибкая динамика и удобный API |
Airflow выбирают за зрелость и универсальность; Kubeflow — когда всё в k8s и нужна контейнеризация шагов и масштаб; Prefect — за простоту и приятный developer experience.
Что оркестратор даёт сверх скрипта
- Повторы и обработка сбоев. Упал шаг — повторить N раз, потом алерт, не теряя прогресс.
- Расписание и триггеры. По cron, по событию, по сенсору (появился файл/данные).
- Наблюдаемость. UI с графом, статусами, логами, длительностью каждого шага.
- Передача артефактов. Выход одного шага — вход следующего, прослеживаемо.
Как работает под капотом
Оркестратор хранит определение DAG и состояние каждого запуска в БД. Планировщик смотрит на расписание/триггеры и ставит готовые к запуску задачи (те, чьи зависимости выполнены) в очередь. Исполнители (воркеры, в Kubeflow — поды k8s) забирают задачи и запускают их, репортя статус. При падении применяется политика повторов. Граф зависимостей гарантирует правильный порядок и позволяет параллелить независимые ветви.
Частые ошибки
- Один гигантский скрипт вместо DAG. Невозможно перезапустить с середины и наблюдать.
- Тяжёлые вычисления в самом оркестраторе. Airflow дирижирует, а считать должны воркеры/задания, иначе планировщик задыхается.
- Циклы в зависимостях. DAG обязан быть ацикличным; цикл — логическая ошибка пайплайна.
- Игнорировать идемпотентность шагов. Повтор упавшего шага не должен ломать данные.
Итог
- Оркестратор запускает шаги пайплайна по DAG, следит за зависимостями, повторяет сбои и даёт наблюдаемость.
- Airflow — универсальный и зрелый; Kubeflow — ML-нативный на k8s; Prefect — простой и питоничный.
- DAG (ацикличный граф) задаёт порядок и параллелизм; тяжёлые вычисления выносят в воркеры, а не в сам оркестратор.