Как мы управляем планированием и автоматизацией конвейеров машинного обучения в Kubernetes.

В следующей серии статей Платформа машинного обучения компании Gojek мы рассмотрим планирование и автоматизацию конвейеров данных и обучение моделей.

Одна «несексуальная» сторона науки о данных - это количество повторяющейся работы. Новые данные необходимо принимать и преобразовывать в полезные функции. Моделей нужно переучивать. Метрики необходимо вычислять и сообщать. Обычно это включает в себя несколько зависимых шагов и регулярный график. Это утомительно и подвержено ошибкам.

Clockwork - это часть нашей платформы машинного обучения, призванная облегчить эту боль. В основе Clockwork лежит Airflow от AirBnB, но мы добавили несколько полезных функций поверх него.

Airflow - популярное решение для построения и планирования технологических трубопроводов. Он имеет богатый набор операторов, которые поддерживают такие действия, как чтение из JDBC-совместимой базы данных, запуск сценариев Bash или кода Python. Он имеет подробную панель мониторинга, показывающую историю выполнения заданий и быстрые способы повторного запуска отказавших конвейеров. Полезно, что он может запускать задания на удаленных сотрудниках, что позволяет нам выполнять ресурсоемкие задания.

Clockwork добавляет следующее:

  • Простой обмен данными между задачами. Основная концепция Airflow - это последовательность задач без особого внимания к тому, как данные распределяются между каждой задачей. Это означает, что каждый пользователь заново изобретает свои собственные методы обмена данными. Мы стандартизировали и упростили это.
  • Более простая конфигурация среды выполнения в Kubernetes: операторы Airflow обладают мощным потенциалом и обладают большой степенью контроля. Однако это означает огромную кривую обучения для специалистов по данным, поскольку им также придется изучить детали Kubernetes и Docker. Мы обнаружили, что у рабочих нагрузок по науке о данных есть много общего, и решили упростить конфигурацию среды выполнения, но позволить пользователям использовать свою собственную среду выполнения.
  • Разделение бизнес-логики. Непонятно, как легко тестировать группы DAG Airflow, не отправляя их в Airflow. Чрезмерная зависимость от определенных операторов и переменных Airflow может упростить и ускорить написание сложных потоков, но их невозможно протестировать локально. Когда локальное тестирование затруднено, пользователи заканчивают тестирование в производственной среде.
  • Определения конвейеров ближе к коду: изначально наши группы доступности базы данных Airflow находились в едином централизованном репозитории. Это означало, что изменения кода часто необходимо синхронизировать в нескольких репозиториях: один для фактического кода и общий репозиторий для параметров или DAG. Конфликты слияния были обычным явлением. Мы отделили расписание от определения DAG / конвейера, чтобы определение конвейера располагалось рядом с кодом, который ему нужно запустить.
  • YAML и веб-интерфейс для настройки конвейера. Мы предлагаем простой формат конфигурации YAML, который Clockwork преобразует в Airflow DAG. Чтобы упростить задачу, у нас есть веб-интерфейс для создания файлов YAML.
  • Простые одношаговые конвейеры. Обычно мы видим использование Clockwork (или Airflow) исключительно для планирования заданий (замена cron) без сложных многоступенчатых конвейеров. Clockwork дает пользователям преимущества Kubernetes / Docker, повторных попыток и предупреждений по сравнению с обычным заданием cron, но без сложности определения Airflow DAG.

Как это работает

Заводной механизм состоит из четырех частей:

  • Clockwork UI: веб-интерфейс поверх Git для создания Clockwork YAML.
  • Clockwork CLI: преобразует определения YAML в DAG-файлы Airflow.
  • Заводной планировщик: конвейер CI, запускаемый при изменении Git. Он вызовет интерфейс командной строки для файлов YAML в Git.
  • Оператор Clockwork Airflow и образы Docker: DAG-файлы Clockwork Airflow используют настраиваемый оператор в сочетании с несколькими стандартными образами Docker, которые могут извлекать соответствующий код пользователя из Git.

Чтобы настроить конвейер Clockwork, необходимо создать два файла YAML. Спецификация планировщика входит в центральный репозиторий Clockwork и содержит ссылку на спецификацию конвейера. Спецификация конвейера находится рядом с кодом бизнес-логики.

Спецификация планировщика будет выглядеть так:

Когда спецификация планировщика помещается в репозиторий Clockwork, наша система CI запускает Clockwork для обработки спецификации планировщика и любых упомянутых спецификаций конвейера.

Помимо технических характеристик конвейера, мы также предлагаем простые варианты для одношаговых конвейеров. Мы разрешаем специалистам по обработке данных указывать ссылку на файл Python или записную книжку Jupyter в Git. Более опытные пользователи также могут указать созданный ими собственный образ Docker.

Спецификации конвейера выглядят так:

Зависимости задач позволяют Clockwork создавать Airflow DAG. Мы упрощаем указание предопределенных или определяемых пользователем образов Docker, которые будут выполняться в Kubernetes.

Поскольку мы стандартизировали Docker вместо операторов Airflow, становится проще тестировать конвейеры локально с помощью Clockwork CLI.

Что дальше?

Clockwork был одним из наших самых успешных продуктов ML Platform. Многие пользователи, которые ранее использовали Airflow, перешли на Clockwork, и многие пользователи, которые ранее были запуганы Airflow, начали использовать Clockwork для планирования и автоматизации.

Учитывая, что мы активно используем Kubernetes в Gojek, мы рассматриваем Kubeflow Pipelines как замену Airflow. Kubeflow Pipelines позволит нам лучше изолировать и масштабировать ресурсы в Kubernetes, что сделает работу наших конвейеров безопаснее и дешевле. К счастью, с абстракцией, предоставляемой Clockwork, нашим пользователям не придется ничего менять, даже когда мы переносим серверные системы.

Следите за новостями о платформе машинного обучения Gojek или подпишитесь на нашу рассылку, чтобы получать обновления прямо на ваш почтовый ящик.

Если вас воодушевляет идея разработки таких инструментов для специалистов по обработке данных, рассмотрите возможность присоединения к команде Data Science Platform компании Gojek.

Вклады:
Буди Дхармаван, Дэвид Херянто, Грейс Кристина