AI Tales: создание конвейера машинного обучения с использованием Kubeflow и Minio

Простой, масштабируемый, производительный, портативный и экономичный

Добро пожаловать в рассказы об искусственном интеллекте от Kredaro 😃 Это история о Джо и Кубемане! Заинтересованы…..? Давайте начнем.

Добро пожаловать, Джо, наш сосед-энтузиаст машинного обучения.

Джо любит машинное обучение, глубокое обучение и искусственный интеллект.

Что Джо с этим делает?

Как и большинство из нас, он посещает несколько курсов по машинному обучению, глубокому обучению и искусственному интеллекту.

Он строит модели глубокого обучения Tensor-flow, Pytorch, Keras на своем ноутбуке.

Джо — эксперт по искусственному интеллекту! Что делает Джо самым крутым парнем в городе, полностью настроенным на рок-н-ролл!!!!


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

Основы создания приложений машинного обучения

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


Это то, о чем думал Джо, создавая продукт для машинного обучения!

Джо предположил, что машинное обучение Построение модели машинного обучения (это то, чему вас учат в большинстве академических кругов)


Но вот как может выглядеть приложение машинного обучения в реальном мире

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


Проблема портативности

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

  • Джо трудно сотрудничать с коллегами-инженерами по машинному обучению в компании, поскольку трудно получить одинаковую среду разработки для разных машин и операционных систем.
  • Перенос моделей из dev в prod превращается в кошмар.
  • Стратегия мультиоблачных вычислений (один провайдер для обучения, другой для обслуживания…) делает создание согласованной среды чрезвычайно пугающим.


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

Джо — инженер по машинному обучению, и у него это хорошо получается. Но ему надоело беспокоить инженеров Devops по поводу выделения машин, планирования заданий, настройки сред, создания подсетей, обнаружения служб, запуска необходимых служб и получения метрик, настройки хранилища для данных, и этот список можно продолжить. . Джо хочет, чтобы у него был простой способ решения проблем DevOps, связанных с ML/DL.

Джо в основном использовал Tensorflow. Он понимает, что обучение алгоритмов машинного обучения на больших объемах данных и предоставление обученной модели в качестве API для миллионов клиентов создает серьезную проблему масштабирования. Вот факторы, из-за которых масштабирование становится жестким,

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

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

  • Проблема пропускной способности базовой системы хранения во время обучения
  • Приобретение ЦП, ГП, ТПУ и других вычислительных ресурсов для повышения производительности.
  • Дросселирование, ограничение скорости, плата за пропускную способность и низкая пропускная способность общедоступных облачных систем хранения.

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

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


Джо взволнован, он расстроен, когда уже собирался сдаться… Кубеман прибывает на помощь!

Kubernetes уже решает большинство этих проблем!

Вы работаете везде, где работает Kubernetes: проблема переносимости решена

Kubernetes работает везде — на вашем локальном компьютере, в облаке Google, облаке Amazon, облаке Microsoft Azure*. Таким образом, запуск рабочих нагрузок машинного обучения и глубокого обучения в Kubernetes решает проблемы переносимости.

Выберите свои контейнеры и организуйте K8: проблема компоновки решена!

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

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


Представляем Kubeflow! Фу…!

  • Kubernetes обеспечивает согласованный способ развертывания и запуска ваших приложений, а Kubeflow помогает определить конвейер машинного обучения поверх Kubernetes.
  • Kubeflow добавляет некоторые ресурсы в ваш кластер, чтобы помочь с различными задачами, включая обучение и обслуживание моделей, а также запуск Ноутбуки Юпитера.
  • Он расширяет API Kubernetes, добавляя новые Пользовательские определения ресурсов (CRD) к вашему кластеру, поэтому рабочие нагрузки машинного обучения могут рассматриваться Kubernetes как первоклассные граждане.

Проблема данных

Вот дополнение, Миньон. Minio удивительно хорошо вписывается в нативную облачную среду внутри Kubernetes. Он простой, быстрый, масштабируемый и совместимый с S3. Использование Minio для хранения данных, необходимых для обучения глубокому обучению, имеет следующее преимущество:


YAML — это страшно!

Kubeflow использует ksonnet для управления развертываниями. ksonnet действует как еще один слой поверх кубектл.

  • В то время как Kubernetes обычно управляется статическими файлами YAML, ksonnet добавляет дополнительную абстракцию, более близкую к стандартным объектам ООП.
  • Ресурсы управляются как прототипы с пустыми параметрами, которые можно преобразовать в компоненты, определив значения для параметров.

Преимущества?

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


Kubeflow состоит из 3 основных компонентов.


Kubeflow CRD определяется Ksonnet

  • Tf-Работа: Отправка заданий Tensor-flow
  • Tf-обслуживание: Обслуживать обученную модель
  • Kubeflow-ядро: Другие основные компоненты.

Давайте посмотрим, как легко обучать и обслуживать приложение глубокого обучения с использованием Ksonnnet и Kubeflow.

Установите Kubeflow с помощью Ksonnet

$ VERSION=v0.2.0-rc.1

$ ks registry add kubeflow github.com/kubeflow/kubeflow/tree/${VERSION}/kubeflow

$ ks pkg install kubeflow/core@${VERSION}
$ ks pkg install kubeflow/tf-serving@${VERSION}
$ ks pkg install kubeflow/tf-job@${VERSION}

// generate the kubeflow-core component from its prototype
ks generate core kubeflow-core --name=kubeflow-core --cloud=gke

//apply component to our cluster
ks apply cloud -c kubeflow-core

Выполнение задания по обучению глубокому обучению

Просто установите параметр для изображения, содержащего ваш код Tensorflow для обучения, необходимое количество процессоров и графических процессоров и количество рабочих для распределенного обучения, и все готово.

$ ks generate tf-job my-training

$ ks param list

COMPONENT PARAM VALUE
========= ===== =====
my-training args "null"
my-training image "null"
my-training image_gpu. "null"
my-training name "my-training"
my-training namespace "default"
my-training num_gpus 0
my-training num_masters 1
my-training num_ps 0
my-training num_workers 0

//set the parameters for this job
$ ks param set train image $TRAIN_PATH
$ ks param set train name "train-"$VERSION_TAG

// Apply the container to the cluster:
$ ks apply cloud -c train

Для просмотра прогресса обучения

$ kubectl get pods
$ kubectl logs $POD_NAME

Теперь, чтобы обслуживать обученную модель

//create a ksonnet component from the prototype
ks generate tf-serving serve --name=my-training-service

//set the parameters and apply to the cluster
ks param set serve modelPath 
ks apply cloud -c serve

Спасибо, что были с нами до сих пор 😃

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

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

До скорой встречи, а пока… Удачного кодирования 😃


О : Мы Кредо , Стартап на очень ранней стадии, ориентированный на SRE на основе данных, высокую производительность + экономичную аналитику, ML / AI в масштабе. Давай поговорим, позвони нам по адресу hello@kredaro.com.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *