Какой лучший вариант для сборки компонентов kubeflow?

Я читал о Kubeflow, и для создания компонентов есть два способа.

  • На основе контейнера
  • На основе функций

Но нет объяснения того, почему я должен использовать тот или иной, например, для загрузки на основе контейнера, мне нужно сгенерировать push-изображение докера и загрузить в конвейер yaml со спецификацией, но с функцией на основе, мне нужно только импортировать функцию.

И чтобы применить ci-cd с последней версией, если у меня есть контейнер на основе, я могу иметь репо со всеми yml и загружать с помощью load_by_url, но если они являются функцией, я могу иметь репо со всеми и загружать как пакет тоже.

Итак, как вы думаете, что это лучший подход, основанный на контейнерах или на функциях.

Спасибо.


person Tlaloc-ES    schedule 11.05.2021    source источник


Ответы (2)


Короткий ответ - это зависит от обстоятельств, но более подробный ответ зависит от того, что вы хотите делать с компонентом.

Исходя из базовых знаний, когда компилируется конвейер KFP, на самом деле это серия различных YAML, запускаемых рабочими процессами Argo. Все это должно быть контейнерным для работы в Kubernetes, даже если сам контейнер содержит весь питон.

Функция для Python Container Op - это быстрый способ начать работу с Kubeflow Pipelines. Он был разработан для моделирования после встроенного в Python DSL Airflow. Он возьмет вашу функцию python и запустит ее в определенном контейнере Python. Вы правы, проще поместить всю свою работу в одну папку Git. Эта настройка отлично подходит для команд, которые только начинают работать с KFP и не возражают против некоторого шаблона, чтобы быстро приступить к работе.

Компоненты действительно становятся мощными, когда вашей команде требуется совместная работа или у вас есть корпоративная платформа машинного обучения, которая создает логику шаблонов для выполнения определенных заданий в конвейере. Компоненты могут иметь отдельные версии и построены для использования в любом из ваших кластеров таким же образом (базовый контейнер должен храниться в концентраторе докеров или ECR, если вы используете AWS). Существуют входы / выходы для определения того, как запуск будет выполняться с использованием компонента. Вы можете представить, что команда Uber может использовать KFP для получения данных о количестве водителей в определенной зоне. Входными данными для компонента могут быть поле географических координат, а также время дня, когда загружать данные. Компонент сохраняет данные в S3, которые затем загружаются в вашу модель для обучения. Без компонента было бы довольно много шаблонов, которым нужно было бы копировать код для нескольких конвейеров и пользователей.

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

person Alex Chung    schedule 17.05.2021

Но нет объяснения того, почему я должен использовать тот или иной, например, для загрузки на основе контейнера, мне нужно сгенерировать push-изображение докера и загрузить в конвейер yaml со спецификацией, но с функцией на основе, мне нужно только импортировать функцию.

Здесь есть некоторые заблуждения.

Под капотом есть только один вид компонентов - компонент на основе контейнера (есть также графические компоненты, но здесь это не имеет значения).

Однако большинству наших пользователей нравится python и не нравится сборка контейнеров. Вот почему я разработал функцию под названием «Легкие компоненты python», которая генерирует ComponentSpec / component.yaml из исходного кода функции python. Сгенерированный компонент в основном запускает python3 -u -c '<your function>; <command-line parsing>' arg1 arg2 ....

Существует заблуждение, что функциональные компоненты отличаются от component.yaml файлов.

Нет, это тот же формат. Вы должны сохранить сгенерированный компонент в файл для совместного использования: create_component_from_func(my_func, output_component_file='component.yaml'). После того, как ваш код стабилизируется, вы должны загрузить код и component.yaml на GitHub или другое место и использовать load_component_from_url для загрузки этого component.yaml в конвейеры.

Проверьте файлы component.yaml в репозитории KFP. Более половины файлов component.yaml - это облегченные компоненты - они созданы из функций Python.

component.yaml предназначены для совместного использования компонентов. Они декларативны, переносимы, индексируются, безопасны, не зависят от языка и т. Д. Вы всегда должны публиковать component.yaml файлы. Если component.yaml сгенерирован из функции python, то рекомендуется поставить component.py рядом, чтобы компонент можно было легко регенерировать при внесении изменений.

Решение о том, создавать ли компонент с использованием функции Lightweight python component или нет, очень просто:

Вы кодируете автономную функцию Python (еще не программу CLI)? Вы не хотите строить, толкать и обслуживать контейнеры? Если да, то функция компонента Lightweight python (create_component_from_func) может помочь вам и сгенерировать component.yaml для вас.

В противном случае напишите component.yaml самостоятельно.

person Ark-kun    schedule 09.06.2021