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

TensorFlow Extended - это комплексная платформа для реализации производственных конвейеров машинного обучения.

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

К концу этой статьи вы увидите, насколько хорошо Kubeflow и TensorFlow Extended созданы друг для друга ❤️.

Мы освещаем аспекты создания расширенного конвейера TensorFlow. Разверните этот конвейер в Kubeflow Pipelines, используя встроенные функции TensorFlow Extended. Наконец, мы подробно рассмотрим, как это сделать с помощью CI / CD.

Обратно в прошлое

В предыдущей статье TensorFlow Extended 101 мы рассмотрели все, что вам нужно знать для создания конвейера TFX. Давайте сделаем еще один шаг в этой статье.

Что такое конвейеры платформы AI и почему мы их используем?

Когда мы говорим о AI Platform Pipelines, мы также говорим о Kubeflow.

Kubeflow состоит из различных функций, таких как Блокнот, Конвейеры, Магазин функций, Обслуживание и многое другое.

Google AI Platform Pipelines использует один из этих компонентов, Kubeflow Pipelines, и предоставляет его в качестве «услуги».

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

В дальнейшем мы будем использовать конвейеры платформы AI и конвейеры Kubeflow как взаимозаменяемые. Используемый нами подход также может быть применен к Kubeflow без каких-либо дополнительных изменений.

Использование AI Platform Pipelines значительно экономит время на настройку Kubeflow.

Хотите перейти к записной книжке и коду?

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

Https://github.com/SaschaHeyer/Sentiment-Analysis-TFX

Способы создания конвейера Kubeflow

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

  • С TensorFlow Extended
    Выберите этот способ, если вы все равно используете TensorFlow. Конвейер TFX компилируется в формат, понятный Kubeflow.
  • С Компонентами Kubeflow
  • С помощью расширенных компонентов TensorFlow, реализованных как компоненты Kubeflow.
    Это полезно, если вы хотите смешивать и согласовывать TFX с другими компонентами и функциями. В прошлом для этого варианта использования существовала неофициальная поддержка. Он устарел в мае 2020 года в пользу TFX SDK. В любом случае, если вас интересует такая архитектура, следите за беседой https://github.com/kubeflow/pipelines/issues/3853.

Монтаж трубопроводов платформы AI

Настройка так же проста, как 2 нажатия кнопки и пара минут ожидания, чтобы развернуть инфраструктуру.

Https://cloud.google.com/ai-platform/pipelines/docs/setting-up

Google позаботится о настройке кластера Kubernetes, необходимого для запуска конвейеров Kubeflow. Вы также можете установить Kubeflow Pipelines в существующий кластер Kubernetes.

Если вы знакомы с управлением и работой с Kubernetes, используйте существующий кластер Kubernetes и установите Kubeflow Pipelines или полную версию Kubeflow.

Пакет SDK для Kubeflow Pipelines

Чтобы создать конвейер для Kubeflow, нам нужно убедиться, что установлен Kubeflow Pipelines SDK.

pip install kfp

Если вы получаете следующую ошибку при создании конвейера с помощью интерфейса командной строки, проверьте, правильно ли установлен SDK.

error Kubeflow not found

Создать конвейер

Мы использовали различные компоненты TensorFlow Extended. Конвейер просто собирает эти компоненты вместе.

#pipeline.py (simplified full code in repository)
from tfx.orchestration import pipeline
components.append(example_gen)
components.append(trainer)
components.append(pusher)
return pipeline.Pipeline(
   pipealine_name=pipeline_name,
   pipeline_root=pipeline_root,
   components=components
)

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

Единственная часть нашего конвейера, которая отличается между этими оркестраторами, - это бегун. Несмотря на то, что эта статья посвящена Kubeflow, большинство частей идентичны другим оркестраторам.

Далее мы разделяем раннер и проходим необходимую реализацию.

Сначала мы получаем экземпляр KubeflowMetadataConfig proto. Это не что иное, как куча информации о том, как подключиться к метаданным Kubeflow. Метаданные - это компонент Kubeflow, используемый для отслеживания и управления метаданными конвейеров машинного обучения. Подведем итоги предыдущей статьи. Мы рассмотрели метаданные ML (MLMD), которые реализуют функции, аналогичные метаданным Kubeflow.

#kubeflow_runner.py (simplified full code in repository)
metadata_config = kubeflow_dag_runner.get_default_kubeflow_metadata_config()

Конвейеры Kubeflow выполняются как контейнеры или как несколько контейнеров. Чтобы запустить наш конвейер TFX в Kubeflow, нам нужно создать образ контейнера Docker. Наш конвейер может содержать определенные зависимости, такие как панды или наш код преобразования. Помещение этих зависимостей в Docker позволяет нам запускать конвейер на Kubeflow. Мы подробно рассмотрим это в разделе CI / CD далее в этой статье.

Глубокое погружение:

Если вам интересно копнуть глубже, рекомендую взглянуть на Реализацию оркестровки TFX Kubeflow. Всегда полезно знать, как работают инструменты, которые мы используем. Из реализации мы видим, что TFX использует Kubeflow SDK и его предметно-ориентированный язык для определения компонента. Документация Kubeflow SDK описывает процесс, используемый в TFX.

Для простоты достаточно помнить, что наш конвейер должен находиться в образе контейнера Docker.

tfx_image = "gcr.io/sascha-playground-doit/sentiment-pipeline"

В нашем случае бегуну требуется конфигурация KubeflowDagRunnerConfig, которая состоит из нашей конфигурации метаданных и нашего образа контейнера Docker.

#kubeflow_runner.py (simplified, full code in repository)
runner_config = kubeflow_dag_runner.KubeflowDagRunnerConfig(
      kubeflow_metadata_config=metadata_config, tfx_image=tfx_image)

Наконец, мы собираем все вместе, определяя наш KubeflowDagRunner, используя конфигурацию и наш конвейер. Функция create_pipeline инкапсулирует наши компоненты TFX и возвращает объект конвейера TFX.

#kubeflow_runner.py (simplified, full code in repository)
from pipeline import create_pipeline
kubeflow_dag_runner.KubeflowDagRunner(config=runner_config).run(                                              create_pipeline(                                           pipeline_name=PIPELINE_NAME,                                                  pipeline_root=PIPELINE_ROOT)
)

Документация Runner API:

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

!tfx pipeline create  \
--pipeline-path=./kubeflow_runner.py \
--endpoint={ENDPOINT}

Глубокое погружение:

Команда передает параметры kpf.client. CLI - полезная оболочка для упрощения процесса создания конвейера в Kubeflow. Ознакомиться с реализацией CLI довольно интересно и хорошо, чтобы понять, как работает этот процесс.

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

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

Непрерывная доставка

Наш конвейер работает на платформе Google Cloud Platform; поэтому мы используем Google Cloud Build, бессерверную платформу CI / CD.

Из предыдущего раздела мы знаем, что нам нужно для развертывания нашего конвейера.

  1. Образ контейнера Docker, содержащий наш конвейер и зависимости. Изображение помещается в реестр контейнеров Google.
  2. И интерфейс командной строки для создания конвейера.

В Cloud Build мы определяем эти шаги в файле yaml.

# cloudbuild.yaml
steps:
# Build the image that encapsulates the pipeline.
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/sascha-playground-doit/sentiment-pipeline', '.']
  dir: 'pipeline'
- name: 'gcr.io/sascha-playground-doit/tfx-cli'
  args: ['pipeline', 'create', '--engine', 'kubeflow', '--pipeline_path', 'runner.py', '--endpoint', 'xyz-dot-us-central1.pipelines.googleusercontent.com']
  dir: 'pipeline'
# Push the custom image to Container Registry 
images: ['gcr.io/sascha-playground-doit/sentiment-pipeline']

Наш процесс сборки требует вызова команды создания TFX CLI. В настоящее время нет общедоступного, готового к использованию образа Docker для этого. Но мы можем создать свой собственный с помощью нескольких строк кода.

#dockerfile (simplified, full code in repository)
FROM gcr.io/deeplearning-platform-release/tf2-cpu.2-4
COPY requirements.txt .
RUN python3 -m pip install -U -r requirements.txt
ENTRYPOINT ["tfx"]

Чтобы завершить процесс непрерывного развертывания, мы подключаем наш репозиторий Github к Cloud Build. Мы определяем триггеры для запуска процесса непрерывного развертывания. Например, для каждого нажатия на основную ветвь наш конвейер создается и развертывается в Kubeflow.

Google Cloud Build требуется доступ к нашему кластеру Kubernetes. Убедитесь, что вы разрешили доступ. Https://cloud.google.com/build/docs/deploying-builds/deploy-gke

Лучшие практики и ограничения

Кладбище данных 🧟

Каждый запуск конвейера создает определенное количество метаданных. Наши конвейеры хранят метаданные, также называемые артефактами, в Google Cloud Storage. Для наглядности также сохраняются данные для каждого прогона. Если вы тренируетесь с высокой частотой вращения педалей или с большими наборами данных, подумайте о добавлении правила жизненного цикла для вашего сегмента. В зависимости от вашего варианта использования вы можете удалить данные старше X дней. Https://cloud.google.com/storage/docs/managing-lifecycles

Аутентификация TFX CLI 🔑

Интерфейс командной строки TFX не поддерживает аутентификацию. Среде, в которой выполняется команда, необходим доступ к конвейерам платформы Kubeflow / AI для создания конвейера.

Путаница в TFX API 🤔

TFX API предоставляет два разных бегуна Kubeflow.

Использование KubeflowV2DagRunner противоречит моим инстинктам как инженера, потому что он кажется более новым, Google рекомендует использовать KubeflowDagRunner. (По состоянию на март 2021 года V2 все еще находится в стадии разработки https://github.com/tensorflow/tfx/issues/3361.

Будьте ручным, чтобы быть автоматическим 🧂

Самую первую версию нашего конвейера необходимо создать с помощью команды TFX CLI create. После изменений в конвейере с помощью команды обновления. Имейте это в виду, если вы реализуете процесс CI / CD. Команда TFX работает над решением https://groups.google.com/a/tensorflow.org/g/tfx/c/MhUwMLjipGs

Память 🍫

В зависимости от вашего решения для машинного обучения у вас могут не хватить ресурсов. Для нашего варианта использования анализа настроений нам необходимо увеличить объем памяти по умолчанию конвейеров платформы AI для запуска преобразований (использование BERT связано с определенными расходами :). Https://cloud.google.com/ai-platform/pipelines/docs/configure-gke-cluster.

GPU

В зависимости от вашей модели вам могут потребоваться графические процессоры для обучения. У нас есть несколько способов использования графических процессоров. Мы можем использовать AI Platform Trainer component или добавить GPU в наш кластер.

Особенности и исправления в пути

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

Что дальше?

Следите за новостями, чтобы узнать больше о машинном обучении.

Спасибо за внимание! Чтобы оставаться на связи, подписывайтесь на нас в Инженерном блоге DoiT, Канале DoiT Linkedin и Канале DoiT Twitter. Чтобы изучить возможности карьерного роста, посетите https://careers.doit-intl.com.