В частях 1 и 2 этой серии вы познакомились с Kubernetes посредством практического подхода. Вы узнали, как настроить кластеры Kubernetes с помощью файлов конфигурации YAML и как масштабировать модули и контейнеры с помощью Kubernetes. В этой статье вы узнаете, как масштабировать контейнерные модели машинного обучения с помощью Kubernetes и Google Cloud Platform.





Оглавление

  • Масштабирование моделей машинного обучения с помощью Kubernetes и Google Cloud Platform
  • Создание кластера Google Kubernetes Engine
  • Развертывание моделей машинного обучения в Google Kubernetes Engine
  • Дополнительная задача
  • Заключение

Масштабирование моделей машинного обучения с помощью Kubernetes и Google Cloud Platform

Теперь, когда у вас есть общее представление о Kubernetes и о том, как развертывать модули, пришло время узнать, как развертывать модели машинного обучения с помощью Kubernetes и Google Cloud Platform (GCP).

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

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

Создание кластера Google Kubernetes Engine

Затем вам нужно будет создать кластер Google Kubernetes Engine (GKE) для развертывания вашей модели машинного обучения. Ранее мы использовали minikube для развертывания контейнеров в Kubernetes. Проблема с развертыванием контейнеров (модулей) с помощью minikube заключается в том, что вам нужно будет поддерживать minikube, что может потребовать дополнительных затрат вручную.

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

  • Войдите в облачную платформу Google
  • Создайте проект (проект поможет вам сгруппировать все ваши ресурсы). Вы можете использовать эту ссылку, чтобы узнать, как создать проект на Google Cloud Platform. Было бы полезно, если бы вы записали идентификатор своего проекта; вы будете использовать его позже в этом уроке.
  • Нажмите на символ ниже, чтобы развернуть скрытые инструменты. Прокрутите вниз и нажмите Kubernetes Engine → Нажмите «Кластеры» → и нажмите «Создать».

  • Существует два способа создания кластеров Kubernetes на Google Cloud Platform. Первый — GKE Standard, где вам нужно будет указать свои модули и контейнеры вручную; второй — GKE Autopilot, где GCP автоматически помогает управлять развертыванием и масштабированием ваших модулей в зависимости от нагрузки. С GKE Autopilot вам не нужно разрабатывать шаблон развертывания; Google Cloud автоматически создает его. GKE Autopilot дороже, чем GKE Standard, поэтому для этого примера вам потребуется создать стандартный кластер GKE.

  • После выбора стандарта GKE выше вы увидите новый экран с некоторыми предварительно заполненными значениями. Оставьте значения по умолчанию и нажмите «Создать». Создание вашего кластера Kubernetes займет несколько минут.
  • Нажмите на три точки, показанные ниже, и нажмите «Подключиться».

  • Скопируйте команду, начинающуюся с gcloud, и нажмите Выполнить в Cloud Shell. Облачная оболочка — это выделенный терминал от GCP с предустановленными Docker, minikube и kubectl. Кроме того, вы можете скопировать код на свой локальный терминал и запустить команду. Для запуска команды в вашей локальной системе вам потребуется установить и настроить Google Cloud SDK. Вы можете использовать эту ссылку для настройки Google Cloud SDK локально в вашей системе.

Развертывание моделей машинного обучения в Google Kubernetes Engine

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

Клонируйте файлы с помощью git clone githuburllink kubemachine. Kubemachine используется для указания папки, в которую GitHub должен клонировать файлы. Измените свой каталог на kubemachine, и вы заметите, что внутри папки есть несколько файлов. Файлы внутри папки:

  • app.py — Содержит код Python для выполнения прогнозов и интерфейс для прогнозирования цены дома. Код внутри app.py написан с помощью Flask Web Framework и Swagger для пользовательского интерфейса.
  • lr_model — версия модели joblib, которая будет использоваться для прогнозирования.
  • lb_sc — Joblib версия кодировщика этикеток для условия продажи (одна из фич).
  • lb_st — Версия кодировщика этикеток для типа продаж (еще одна функция) в joblib.
  • Dockerfile — содержит строительный блок для контейнеризации приложения.

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

Создание и развертывание образа контейнера в Google Cloud

Чтобы создать и развернуть образ контейнера, выполните следующую команду: gcloud builds submit --tag gcr.io/[your project id/[nameofcontainer] в Google Cloud Shell или в локальном терминале (убедитесь, что вы не закрыли локальный терминал или облачную оболочку).

В моем случае я буду запускать gcloud builds submit --tag gcr.io/osesid/house_prediction_model, но вы можете заменить osesid идентификатором своего проекта.

gclouds builds автоматически создает образ контейнера с конфигурацией, указанной в файле Docker, и отправляет образ в реестр контейнеров Google Cloud. Убедитесь, что вы вводите . с пробелом после имени контейнера, чтобы указать, что Dockerfile находится в том же каталоге, из которого вы запускаете сборки gcloud).

gcr.io/yourprojectid/containername — это имя вашего изображения (это пригодится позже).

Стандартизировать управление моделями может быть сложно, но есть решение. Узнайте больше об управлении экспериментами от Николаса Ласкариса из Comet.

Создание шаблона развертывания и шаблона службы

Чтобы использовать мощь оркестрации контейнеров Kubernetes, вам потребуется создать шаблон развертывания и службы. Если вы помните, вы указываете свойства Pod и Container внутри шаблона развертывания. Напротив, шаблон службы используется для указания того, как конечные пользователи или поды будут взаимодействовать друг с другом.

Приведенная ниже спецификация должна быть вам знакома — новая спецификация — это определение портов. Поскольку конечные пользователи будут взаимодействовать с контейнером, работающим внутри модуля, вам нужно будет указать порт, который модуль будет прослушивать. В Google Cloud приложение будет прослушивать порт 8080.

Примечание. Образ — это то, что вы указали при использовании Cloud Builds для создания и развертывания образа контейнера. Имя изображения gcr.io/yourprojectid/containername. Вам нужно будет заменить его на то, что было указано выше, т.е. вместо изображения gcr.io/osesid/house_price_prediction использоватьgcr.io/yourprojectid/yourcontainername.

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

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

selector используется для сопоставления LoadBalancer с модулем. Служба не знает о модулях, которые к ней подключены. Внутри селектора вам нужно будет указать одну из меток Pod. В данном случае это app : house-price-prediction-app.

И файлы развертывания, и файлы конфигурации службы находятся внутри клонированной папки. Чтобы создать объект развертывания и службы, запустите kubectl create -f deployment.yaml и запустите kubectl get pods. Вы заметите, что созданы три модуля, но ни один из контейнеров еще не запущен ни в одном из модулей. Запустите kubectl get pods еще раз, и вы заметите, что три контейнера работают внутри трех модулей.

Если вы заметили, что не можете получить доступ к приложению, работающему внутри любого из модулей, вам нужно создать объект службы, запустив kubectl create -f service.yaml и запустив kubectl get service.. Вы заметите, что адрес LoadBalancer External-IP еще не создан.

Запустите kubectl get service еще раз, и вы увидите это:

Вы заметите адрес External-IP, который внешние пользователи могут использовать для взаимодействия с приложением. Скопируйте адрес External-IP и вставьте его в свой браузер, и вы увидите это:

Давайте прогнозировать с помощью модели. Добавьте /apidocs после внешнего IP-адреса, т. е. 34.67.78.250/apidocs, и нажмите Enter. Вы увидите это ниже:

Чтобы делать прогнозы, нажмите кнопку GET и нажмите кнопку Try It Out Button.

Введите данные ниже и нажмите «Выполнить»:

Как только вы нажмете «Выполнить», вы получите ответ, как показано ниже:

Дополнительная задача

Попробуйте увеличить количество реплик в файле развертывания до 20 и используйте эту команду kubectl apply -f deployment.yaml, чтобы внести изменения, и используйте kubectl get pods, чтобы получить количество подов.

Введите количество подов в комментарии ниже, а также попробуйте уменьшить количество реплик до 3. Обратите внимание на поведение Kubernetes при этом. Чтобы применить изменения к созданному объекту развертывания, вам потребуется использовать kubect apply.. Чтобы создать объект развертывания с нуля, используйте kubectl create.

Заключение

Статьи из этой серии Kubernetes и Google Cloud Platform познакомили вас с Kubernetes, помогли понять, как Kubernetes помогает управлять развертыванием контейнеров, и познакомили вас с примером масштабирования моделей машинного обучения с помощью Kubernetes и Google Cloud Platform.

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

Вы также можете связаться со мной в Linkedin или Twitter, чтобы продолжить разговор или задать любой вопрос в поле для комментариев.

Ссылки/Дополнительные ресурсы

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение наших еженедельных информационных бюллетеней (Еженедельник глубокого обучения и Информационный бюллетень Comet), присоединиться к нам в Slack и следить за Comet в Twitter и LinkedIn, чтобы получать ресурсы, события и многое другое, что поможет вам быстрее создавать лучшие модели машинного обучения.