За годы работы я прошел несколько стадий принятия оркестрации ML/Data пайплайнов.
Сначала в моей жизни был планировщик Windows. Это была Lamoda, я обкачивал Google Adsense и Google Analytics ежедневно и складывал это в Postgres, развернутый рядом. Волшебное время, Windows может в хорошие решения (иногда).
Потом в Mail.ru был Luigi в качестве контроллера исполнения DAG’ов и Jenkins в качестве контроля расписания. До сих пор вспоминаю Luigi с теплотой, тогда он казался мне вершиной инженерии. Удобный визуализатор, возможность локально потестить код, свободная передача данных между задачами в одном DAG’е — очень приятно и очень удобно.
Из минусов — приходится ставить на расписание отдельным сервисом (cron, Jenkins, etc).
Интересный факт — когда я устроился в другое подразделение Mail.ru через год, мне продолжили приходить письма о падениях DAG’ов, которые я написал несколько лет назад.
С — стабильность.
Следующим был шаг обратно к истокам — помесь bash и python скриптов, которые деплоились и ставились на крон на конечные физические машины с помощью самописного аналога Ansible. Ад редкостный, особенно в разрезе мониторинга падений (его не было).
Дальше был Сбермаркет с Airflow+K8s. Проблемы с тестовыми стендами, невозможность запустить код локально, опять разделение кода исполняемого и кода DAG’а — все это приводит к фрустрации и снижению скорости разработки. Еще из минусов: мне крайне негативно отношусь от концепции XCom (cross-communications). Выглядит как огромный костыль для возможности передачи данных между задачи в DAG’е (и не только в нем).
Есть, конечно, плюсы: расписание из коробки, возможность отвязаться от физических машин (только благодаря куберу), удобные средства мониторинга падений.
В последние годы появилось множество других оркестраторов — Prefect, Dagster, Metaflow, Flyte. Каждый имеет свою специфику и область применения, конечно, но приятно, когда есть выбор.
Если вы вдруг задумались, какой планировщик вам выбрать сейчас — я определенно посоветую вам Dagster. Супер приятный, все лучшее, что можно взять из Luigi, Cron, Airflow — все это есть в нем. Особенно радует возможность протестировать код прямо локально, довольно просто развернув мини Dagster локально (одной командой!).
Мой коллега как раз недавно рассказывал на Dagster community day про то, как мы мощно прогоняем за пару часов миллионы аудио файлов через несколько нейронок с помощью Dagster+Ray.
Стоит упомянуть проблемы:
– Backfill задач пока experimental фича;
– Есть автоматериализация downstream задач при запуске upstream, но наоборот — придется повозиться.
TLDR: Берите Дагстер, не пожалеете
Post #7
659