Аудитория: инженер по машинному обучению, инженер по инфраструктуре, специалист по данным

Важным аспектом построения конвейера машинного обучения является «рабочий процесс». Рабочий процесс относится к этапам модели машинного обучения, определенной и выполняемой разработчиком. Типичный рабочий процесс включает в себя такие этапы, как сбор данных, очистка данных, предварительная обработка, построение модели и прогнозирование.

Зависимость рабочего процесса от данных и инфраструктуры усложняет его обслуживание и воспроизводимость. Эти зависимости могут мешать пользователю сосредоточиться на бизнес-логике, тем самым снижая производительность модели.

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

Что такое Флайт?

Flyte — это распределенная платформа автоматизации рабочих процессов, которая

  • Открытый источник
  • Kubernetes построен
  • Контейнерный

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

Flyte устраняет разрыв между созданием моделей машинного обучения и их внедрением в производство. Вы можете запустить модель, а Flyte органично настроит ее в производственной среде.

Примечание. Рабочий процесс в контексте Flyte отличается от рабочего процесса машинного обучения.

Строительные блоки Flyte

  • Строительным элементом Flyte является задача. Думайте об этом как о функции декоратора @task. Это независимые единицы выполнения, которые инкапсулируют ваш код. Задачи версионные и общедоступные.
@task
def some_function(arguments) -> return_type:
function-body
return value

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

  • Задачи в Flyte объединяются для выполнения в определенном порядке с использованием рабочего процесса. Рабочий процесс — это ориентированный ациклический граф (DAG) единиц работы, инкапсулированный узлами, который описывает порядок выполнения задач. Он указывается с помощью декоратора @workflow.
@workflow
def my_workflow(arguments) -> return_type:
function-body (Specify the order of tasks)
return value

Ниже приведен пример рабочего процесса, в котором указан порядок выполнения вышеупомянутых задач. Подробнее об этом здесь.

  • Узел представляет собой единицу работы в рабочем процессе. Как правило, узел инкапсулирует экземпляр задачи и может координировать входные и выходные данные задачи. Он ведет себя как оболочка для задач и рабочих процессов и может быть визуализирован в пользовательском интерфейсе.
  • Планы запуска вызывают выполнение рабочего процесса. Вы можете привязать частичный или полный список входных данных для передачи в качестве аргументов для создания выполнения (выполнения рабочего процесса). Flyte автоматически создает план запуска по умолчанию (без входных данных), когда рабочий процесс сериализуется и регистрируется.

Вместо того, чтобы использовать план запуска по умолчанию, вы также можете создать его! Таким образом, вы можете указать параметры плана запуска вместо использования плана по умолчанию.

  • Выполнение — это экземпляр рабочего процесса, узла или задачи.

Совет. Вы можете использовать задачи и рабочие процессы как обычные методы Python, импортировать их и использовать в других модулях Python.

Другие особенности Flyte

Версия

  • Версионный код, контейнеризованный со всеми зависимостями.
  • Версионные объекты с возможностью отката к определенной версии.
  • Многопользовательская масштабируемая служба, позволяющая пользователям работать в собственном изолированном репозитории, не затрагивая другие части платформы.
  • Кэшированные выходные данные для каждого триггера задания, что позволяет повторно использовать (вместо повторного вычисления), тем самым экономя время и ресурсы выполнения.
  • Сбор метаданных (журналы) для каждого рабочего процесса для возврата к источнику ошибок.

Система шрифтов

  • Поддержка нескольких типов данных, таких как BLOB-объекты, каталоги, схемы и т. д.
  • Строго типизированные и параметризованные задачи.
  • Типобезопасная конвейерная конструкция, то есть каждая задача имеет интерфейс, характеризующийся входом и выходом. Это означает, что нелегальное построение конвейера завершается ошибкой во время объявления, а не во время выполнения.

Настройка

  • Готовая поддержка запуска заданий Spark на K8s, запросов Hive и т. д.
  • Настраиваемые пользовательские классы в соответствии с конкретными требованиями.
  • Интеграции (SQL, Pandera, Modin) для расширения Flyte, если вы готовы к глубокому погружению!

Разное

  • Возможность повторения моделей.
  • Удобные SDK для запуска рабочих процессов.
  • Возможность создания динамических графиков для принятия решений во время выполнения (например, настройка гиперпараметров во время выполнения, программная остановка обучения в случае появления ошибок, динамическое изменение логики кода и построение конвейеров AutoML).

Приближается…

Мой следующий пост будет примером «Hello World» с использованием задач и рабочего процесса Flyte. Следите за обновлениями.

Авторы обложки: Фото EJ Strat на Unsplash.