Аудитория: инженер по машинному обучению, инженер по инфраструктуре, специалист по данным
Важным аспектом построения конвейера машинного обучения является «рабочий процесс». Рабочий процесс относится к этапам модели машинного обучения, определенной и выполняемой разработчиком. Типичный рабочий процесс включает в себя такие этапы, как сбор данных, очистка данных, предварительная обработка, построение модели и прогнозирование.
Зависимость рабочего процесса от данных и инфраструктуры усложняет его обслуживание и воспроизводимость. Эти зависимости могут мешать пользователю сосредоточиться на бизнес-логике, тем самым снижая производительность модели.
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. Следите за обновлениями.