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

Компоненты Kubeflow

Некоторые из ключевых компонентов Kubeflow включают в себя:

  • Конвейеры: основной идеей Kubeflow является рабочий процесс, который, вообще говоря, представляет собой серию взаимосвязанных задач или действий, которые выполняются для достижения определенной цели или задачи. В контексте Kubeflow рабочие процессы могут включать такие задачи, как подготовка данных, обучение моделей, обслуживание моделей и мониторинг.
  • Блокноты Jupyter для интерактивного исследования данных и экспериментов.
  • Библиотека машинного обучения для создания и обучения моделей машинного обучения (например, Tensorflow или PyTorch) со слоем логического вывода (например, KServe) для обслуживания обученных моделей и прогнозирования новых данных.
  • Katib для настройки гиперпараметров и выбора модели.
  • Арго для определения и запуска сложных рабочих процессов.

В этом посте основное внимание уделяется только функциям конвейеров, предлагаемым этим инструментом.

Трубопроводы Kubeflow

При построении рабочего процесса для модели машинного обучения первым шагом является создание конвейера с набором задач (узлов). Затем эти задачи соединяются друг с другом с помощью ребер, определяющих зависимости выполнения. В результате получается ориентированный ациклический граф (DAG).

Конвейеры написаны на Python для удобства разработки, скомпилированы в YAML для переносимости и выполняются в Kubernetes для масштабируемости.

Kubeflow Pipelines также предоставляет такие функции, как управление версиями, настройка параметров и отслеживание экспериментов, которые могут помочь упростить процесс разработки машинного обучения и улучшить воспроизводимость. Его можно использовать с различными средами машинного обучения, включая TensorFlow, PyTorch и Scikit-learn, и он интегрирован с другими компонентами Kubeflow, такими как Kubeflow Training Operators и Kubeflow Model Serving, для обеспечения сквозного машинного обучения. управление рабочим процессом.

Конвейеры Kubeflow были разработаны, чтобы предоставить аналогичный набор возможностей, но с особым акцентом на рабочие процессы машинного обучения. Платформа использует многие из тех же принципов и компонентов проектирования, что и рабочие процессы Argo, но с дополнительными функциями и функциями, адаптированными к потребностям специалистов по обработке и анализу данных и инженеров по машинному обучению.

Компоненты пайплайна Kubeflow

Конвейеры состоят из компонентов, которые являются строительными блоками рабочих процессов машинного обучения в экосистеме Kubeflow Pipeline. Эти компоненты представляют собой повторно используемые блоки кода, которые выполняют определенные задачи, такие как предварительная обработка данных, разработка функций, обучение модели и оценка модели.

Компоненты Kubeflow Pipeline могут быть написаны на любом языке и могут быть помещены в контейнеры для обеспечения переносимости между различными средами. Для каждого компонента можно настроить входы и выходы, которые определяют зависимости данных между компонентами в конвейере.

Одним из наиболее распространенных способов разработки этих компонентов является использование кода Python, и Kubeflow предлагает две разные версии для их реализации: v1 и v2. Этот подход обеспечивает простой и гибкий способ создания многократно используемых компонентов для конвейеров машинного обучения.

В общем, вы должны проектировать свои компоненты с учетом компонуемости.

Чтобы создать компонент на основе функций Python, вам необходимо определить функцию Python, которая принимает входные параметры и возвращает выходные значения. Входные параметры определяются как аргументы функции, а выходные значения возвращаются функцией. Конкретный синтаксис зависит от версии API Python, которую вы используете, в частности, для v1 используется метод, а для v2 используется декоратор. Для получения более подробной информации или примеров обратитесь к официальной документации.

Помимо этого различия между двумя API для определения компонентов на основе Python, между ними есть и другие различия.

Последний API версии 2 содержит несколько изменений и улучшений по сравнению с версией 1, в том числе:

  1. Упрощенный синтаксис. Kubeflow Pipeline API версии 2 предлагает более лаконичный и простой синтаксис для определения компонентов конвейера и конвейеров, что сокращает объем требуемого шаблонного кода.
  2. Типизированные входные и выходные данные. В версии 2 входные и выходные данные для компонентов конвейера могут быть явно определены с помощью типов, что упрощает раннее обнаружение ошибок типов.
  3. Легкие компоненты. В версии 2 пользователи могут создавать легкие компоненты, которые работают на любой платформе, что обеспечивает большую гибкость в средах развертывания и выполнения.
  4. Пользовательская контейнеризация. В версии 2 пользователи могут определять настраиваемые образы контейнеров для компонентов конвейера, обеспечивая больший контроль над средой выполнения.
  5. Улучшенный механизм выполнения. Kubeflow Pipeline API версии 2 предлагает новый улучшенный механизм выполнения, обеспечивающий более высокую надежность и масштабируемость, а также улучшенную поддержку распределенного обучения.

В целом, Kubeflow Pipeline API v2 предлагает более удобный, гибкий и мощный процесс построения конвейера по сравнению с его предшественником v1.

Практический пример конвейера

Пример, представленный в этом разделе, очень прост; его цель — предоставить обзор инструмента и его синтаксиса. Весь код доступен в этом репозитории Github.

Настройка среды

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

Пошаговое руководство по коду конвейера

Как только локальная среда настроена, мы можем приступить к выполнению кода.

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

Kubeflow предоставляет удобный способ обмена информацией между различными задачами внутри пайплайна с помощью артефактов. Эти артефакты служат уровнем абстракции, который упрощает сложности, возникающие в распределенном контексте в контейнерных кластерах. Вывод компонента сохраняется в удаленном хранилище файлов, например minIO.

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

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

В пайплайне три задачи:

  • Загрузка данных. Ответственность за загрузку данных возлагается на этот компонент в конвейере. Он предназначен для извлечения необходимых данных из официального репозитория образцов Kubeflow в виде заархивированного архива, содержащего данные в табличном формате.
    После загрузки данных их можно обрабатывать дальше и использовать в следующих целях. конвейерные задачи. Этот компонент гарантирует, что данные легко доступны для следующего этапа конвейера и находятся в формате, который может быть легко использован последующими компонентами.
  • Предварительная обработка данных. После того как данные загружены, они должны пройти этап предварительной обработки, прежде чем их можно будет использовать для обучения модели. Этап предварительной обработки включает в себя изменение формы данных и их надлежащее масштабирование, чтобы убедиться, что они находятся в формате, который может эффективно использоваться моделью глубокого обучения.
    После того, как данные были изменены и масштабированы, они затем загружаются в загрузчики данных. . Этот шаг важен, поскольку модель глубокого обучения, используемая в конвейере, основана на платформе PyTorch, которая требует загрузки данных в определенном формате. Загрузчики данных позволяют эффективно загружать данные в модель для обучения, а также могут помочь с такими задачами, как дополнение и перетасовка данных.
    В целом этап предварительной обработки имеет решающее значение для обеспечения того, чтобы данные были в формате, который можно эффективно используется моделью глубокого обучения. Правильно изменяя форму и масштабируя данные, а также используя загрузчики данных, можно более эффективно обучать модель, в результате чего получается более качественная модель, способная точно делать прогнозы на основе новых, невидимых данных.
  • Обучение модели.Последняя задача в конвейере, которая включает в себя обучение модели глубокого обучения, немного отличается от других задач в конвейере. В отличие от других задач, которые можно определить с помощью простых методов, эта задача требует использования спецификации компонента и модуля Python.
    Спецификация компонента определяет входы и выходы задачи, а также параметры которые можно использовать для настройки поведения задачи. Модуль Python содержит код, который выполняется в процессе обучения, включая архитектуру модели, функцию потерь и алгоритм оптимизации.
    В процессе обучения модель обучается на разных эпохах, причем каждая эпоха включает в себя полный проход через обучающие данные. Это позволяет модели постепенно учиться на данных и со временем повышать свою точность. Затем обученная модель сохраняется в распределенном хранилище, где к ней можно получить доступ и использовать ее для вывода новых, невидимых данных.
    Используя спецификацию компонента и модуль Python, эту задачу можно настроить в соответствии с конкретными потребностями. трубопровода. Это позволяет разработчикам точно настроить процесс обучения для достижения наилучшей производительности модели. Кроме того, сохраняя окончательную модель в распределенном хранилище, к ней можно легко получить доступ для других задач в конвейере или развернуть в производственной среде для реального использования.

Заключение

Конвейер, представленный в этом посте, представляет собой упрощенный пример, предназначенный для предоставления общего обзора инструмента Kubeflow и его возможностей. Его цель — проиллюстрировать подмножество функций, которые Kubeflow предоставляет, чтобы помочь разработчикам решать проблемы MLOps.

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

В целом, хотя пайплайн, представленный в этом посте, может быть простым, он служит полезной отправной точкой для разработчиков, желающих изучить возможности пайплайнов Kubeflow и узнать, как они могут помочь им решить проблемы MLOps. Используя возможности Kubeflow, разработчики могут оптимизировать рабочие процессы машинного обучения и более эффективно создавать высококачественные модели.

Рекомендации