Узнайте, как написать собственные файлы конфигурации YAML для использования операторов Amazon SageMaker для Kubernetes
На re: Invent 2019 AWS анонсировала Операторы Amazon SageMaker для Kubernetes, которые позволяют пользователям Kubernetes обучать модели машинного обучения, оптимизировать гиперпараметры, запускать задания пакетного преобразования и настраивать конечные точки вывода с помощью Amazon SageMaker - не выходя из кластера Kubernetes. Вы можете вызвать функциональность Amazon SageMaker, написав знакомые файлы конфигурации Kubernetes в YAML и применив их к своему кластеру Kubernetes с помощью kubectl
инструмента CLI.
Это позволяет расширить емкость и возможности кластера Kubernetes для машинного обучения, переложив рабочие нагрузки обучения и логического вывода в Amazon SageMaker. Чтобы получить более подробную информацию об операторах Amazon SageMaker для Kubernetes, прочтите следующее сообщение в блоге:
Kubernetes и Amazon SageMaker для машинного обучения - лучшее из обоих миров
В этом сообщении блога я представлю пошаговые инструкции по созданию файлов конфигурации Kubernetes для выполнения распределенных обучающих заданий, заданий настройки гиперпараметров и размещения конечных точек вывода масштабируемой модели с помощью Amazon SageMaker.
Предполагаемый читатель этого руководства - разработчик, исследователь или профессионал DevOps, имеющий базовые знания о Kubernetes. Даже если вы новичок в Kubernetes и Amazon SageMaker, я прохожу через все необходимые шаги, необходимые для отправки учебных заданий и размещения конечных точек вывода.
Весь код, файлы конфигурации и демонстрационные записные книжки Jupyter доступны на GitHub: https://github.com/shashankprasanna/kubernetes-sagemaker-demos.git
Операторы Amazon SageMaker для Kubernetes и способы их использования
Операторы Amazon SageMaker для Kubernetes реализованы как настраиваемый ресурс в Kubernetes и позволяют Kubernetes вызывать функциональные возможности Amazon SageMaker. Ниже я предоставлю пошаговые инструкции по реализации каждого из этих сценариев использования:
- Пример использования 1. Распределенное обучение с помощью TensorFlow, PyTorch, MXNet и других фреймворков.
- Пример использования 2: распределенное обучение с настраиваемым контейнером.
- Вариант использования 3: масштабная оптимизация гиперпараметров с помощью TensorFlow
- Вариант использования 4: размещение конечной точки вывода с моделью BYO
Чтобы продолжить, я предполагаю, что у вас есть учетная запись AWS и инструмент AWS CLI, установленные на вашем хост-компьютере.
Весь код, файлы конфигурации и демонстрационные записные книжки Jupyter доступны на GitHub: https://github.com/shashankprasanna/kubernetes-sagemaker-demos.git
Настраивать
Начнем с развертывания кластера Kubernetes. С инструментом CLI eksctl все, что требуется, - это простая команда и 15 минут вашего времени для очень простого кластера с парой узлов.
Следуйте инструкциям в документации AWS для установки инструмента eksctl CLI. После этого выполните следующую команду и идите выпить чашку кофе. Эта команда запускает кластер Amazon Elastic Kubernetes Service (EKS) с одним узлом, чего достаточно для примеров в этой публикации. Обратите внимание, что вы по-прежнему можете запускать крупномасштабное распределенное обучение и задания по настройке гиперпараметров на сотнях узлов Amazon SageMaker с помощью операторов Amazon SageMaker для Kubernetes.
Создайте кластер Kubernetes
eksctl create cluster \ --name sm-operator-demo \ --version 1.14 \ --region us-west-2 \ --nodegroup-name test-nodes \ --node-type c5.xlarge \ --nodes 1 \ --node-volume-size 50 \ --node-zones us-west-2a \ --timeout=40m \ --auto-kubeconfig
Установите операторы Amazon SageMaker для Kubernetes
После запуска кластера следуйте инструкциям в руководстве пользователя, чтобы установить операторы Amazon SageMaker для Kubernetes. Вы также можете обратиться к этому полезному сообщению в блоге, чтобы направить процесс установки: Знакомство с операторами Amazon SageMaker для Kubernetes
Чтобы проверить установку, запустите
kubectl get crd | grep sagemaker
Вы должны получить примерно такой результат:
batchtransformjobs.sagemaker.aws.amazon.com 2020-02-29T21:21:24Z endpointconfigs.sagemaker.aws.amazon.com 2020-02-29T21:21:24Z hostingdeployments.sagemaker.aws.amazon.com 2020-02-29T21:21:24Z hyperparametertuningjobs.sagemaker.aws.amazon.com 2020-02-29T21:21:24Z models.sagemaker.aws.amazon.com 2020-02-29T21:21:24Z trainingjobs.sagemaker.aws.amazon.com 2020-02-29T21:21:24Z
Это все задачи, которые вы можете выполнять в Amazon SageMaker с помощью операторов Amazon SageMaker для Kubernetes, и мы более подробно рассмотрим (1) учебные задания (2) задания по настройке гиперпараметров (3) развертывание хостинга.
Скачать примеры с GitHub
Загрузите учебные сценарии, файлы конфигурации и записные книжки Jupyter на свой хост-компьютер.
git clone https://github.com/shashankprasanna/kubernetes-sagemaker-demos.git
Загрузите набор данных обучения и загрузите в Amazon S3
cd kubernetes-sagemaker-demos/0-upload-dataset-s3
Примечание. TensorFlow должен быть установлен на хост-компьютере, чтобы загрузить набор данных и преобразовать его в формат TFRecord.
Выполните upload_dataset_s3.ipynb
, чтобы загрузить свой набор тренировочных данных на Amazon.
Пример использования 1. Распределенное обучение с помощью TensorFlow, PyTorch, MXNet и других фреймворков.
Если вы новичок в Amazon SageMaker, одна из его приятных особенностей при использовании популярных фреймворков, таких как TensorFlow, PyTorch, MXNet, XGBoost и других, заключается в том, что вам не нужно беспокоиться о создании пользовательских контейнеров с вашим кодом и его продвижении. в реестр контейнеров. Amazon SageMaker может автоматически загружать любые обучающие сценарии и зависимости в контейнер фреймворка и запускать его в нужном масштабе. Таким образом, вам просто нужно версировать свои учебные сценарии и управлять ими, и вам вообще не придется иметь дело с контейнерами. С операторами Amazon SageMaker для Kubernetes вы по-прежнему можете получить тот же опыт.
Перейдите в каталог с 1-м примером:
cd kubernetes-sagemaker-demos/1-tf-dist-training-training-script/ ls -1
Выход:
cifar10-multi-gpu-horovod-sagemaker.py k8s-sm-dist-training-script.yaml model_def.py upload_source_to_s3.ipynb
Два файла python в этом каталоге cifar10-multi-gpu-horovod-sagemaker.py
и model_def.py
представляют собой обучающие скрипты TensorFlow, которые реализуют Horovod API для распределенного обучения.
Выполните upload_source_to_s3.ipynb
, чтобы создать tar-файл со сценариями обучения и загрузить его в указанную корзину Amazon S3.
k8s-sm-dist-training-script.yaml
конфигурационный файл, который применяется с использованием kubectl
ударов распределенного обучающего задания. Откройте его в своем любимом текстовом редакторе, чтобы поближе познакомиться.
Сначала вы заметите, что kind: TrainingJob
. Это предполагает, что вы отправите задание на обучение Amazon SageMaker.
В разделе гиперпараметры укажите гиперпараметры, которые cifar10-multi-gpu-horovod-sagemaker.py
могут принимать в качестве входных данных.
Укажите дополнительные параметры для распределенного обучения:
sagemaker_program
- cifar10-multi-gpu-horovod-sagemaker.py Обучающий скрипт TensorFlow, реализующий Horovod API для распределенного обученияsagemaker_submit_directory
- место на Amazon S3, где находятся обучающие скриптыsagemaker_mpi_enabled
иsagemaker_mpi_custom_mpi_options
- включить обмен данными MPI для распределенного обучения.sagemaker_mpi_num_of_processes_per_host
- установлено количество графических процессоров в запрошенном экземпляре. Для экземпляраp3dn.24xlarge
с 8 графическими процессорами установите это значение на 8.
Укажите контейнер фреймворка глубокого обучения, выбрав соответствующий контейнер отсюда:
Https://docs.aws.amazon.com/dlami/latest/devguide/deep-learning-containers-images.html
Amazon SageMaker автоматически загрузит обучающие сценарии, указанные в sagemaker_submit_directory
, в контейнер, созданный из trainingImage.
Для отслеживания производительности вы также можете указать определение метрики.
В разделе конфигурации ресурсов укажите, на скольких экземплярах или узлах вы хотите запустить это многоузловое обучение. В приведенном выше файле конфигурации указано, что он будет запускать распределенное обучение на 32 графических процессорах.
Наконец, укажите расположение набора данных на Amazon S3. Это должно быть то же имя корзины, которое вы выбрали при запуске записной книжки Jupyter upload_source_to_s3.ipynb для загрузки набора обучающих данных.
Чтобы начать распределенное обучение, запустите:
kubectl apply -f k8s-sm-dist-training-script.yaml
Выход:
trainingjob.sagemaker.aws.amazon.com/k8s-sm-dist-training-script created
Чтобы получить информацию о работе по обучению:
kubectl get trainingjob
Выход:
NAME STATUS SECONDARY-STATUS CREATION-TIME SAGEMAKER-JOB-NAME k8s-sm-dist-training-script InProgress Starting 2020-03-03T08:25:40Z k8s-sm-dist-training-script-91027b685d2811ea97a20e30c8d9dadc
Теперь перейдите к AWS Console > Amazon SageMaker > Training jobs
И вы увидите, что новое задание по обучению с тем же названием, что и результат kubectl get trainingjob
Чтобы просмотреть журналы обучения, щелкните задание по обучению в консоли и нажмите «Просмотр журналов» в разделе «Монитор». Это приведет вас к CloudWatch, где вы сможете просмотреть журналы тренировок.
В качестве альтернативы, если вы установили плагин smlogs, вы можете запустить следующее для просмотра журналов с помощью kubectl
:
kubectl smlogs trainingjob k8s-sm-dist-training-script
Пример использования 2: распределенное обучение с настраиваемым контейнером
Если вы работаете с собственными проприетарными алгоритмами, вам придется создавать собственные контейнеры Docker. Чтобы отправить задание на обучение с помощью настраиваемого контейнера, вам сначала нужно создать образ контейнера локально и отправить его в Amazon Elastic Container Registry (ECR). После того, как вы отправите изображение в ECR, вы обновите файл конфигурации задания Kubernetes, указав свой путь ECR, а не путь к контейнеру TensorFlow, который мы указали в предыдущем примере.
Перейдите в каталог со вторым примером:
cd kubernetes-sagemaker-demos/2-tf-dist-training-custom-container/docker ls -1
Выход:
build_docker_push_to_ecr.ipynb cifar10-multi-gpu-horovod-sagemaker.py Dockerfile model_def.py
Выполните build_docker_push_to_ecr.ipynb
, чтобы создать файл докера и отправить его в реестр ECR.
Перейдите к AWS Console > Amazon ECR
. Здесь вы должны увидеть свой недавно отправленный контейнер Docker:
Перейдите к
cd kubernetes-sagemaker-demos/2-tf-dist-training-custom-container/
Откройте k8s-sm-dist-custom-container.yaml
файл конфигурации в своем любимом текстовом редакторе, чтобы рассмотреть его поближе.
Единственное изменение, которое вам нужно сделать, - это раздел trainingImage, где вам нужно будет указать место в вашем реестре ECR, куда вы поместили свой настраиваемый контейнер.
Чтобы начать распределенное обучение с вашим настраиваемым контейнером, запустите:
kubectl apply -f k8s-sm-dist-custom-container.yaml
Выход:
trainingjob.sagemaker.aws.amazon.com/k8s-sm-dist-custom-container created
Пример использования 3: масштабная оптимизация гиперпараметров с помощью TensorFlow
Гиперпараметры для модели машинного обучения - это параметры, которые не оптимизируются и не изучаются на этапе обучения, но влияют на производительность модели. Чтобы отправить задание по настройке гиперпараметров Amazon SageMaker, вам необходимо создать файл конфигурации Kubernetes с kind: hyperparameterTuningJob
вместо trainingJob
, как в предыдущих двух примерах.
Другое отличие состоит в том, что здесь вместо фиксированных гиперпараметров вы указываете диапазоны гиперпараметров, чтобы Amazon SageMaker мог пробовать разные варианты для получения наилучшей модели.
Перейдите в каталог с 3-м примером:
cd kubernetes-sagemaker-demos/3-tf-hyperopt-training-script ls -1
Выход
cifar10-training-script-sagemaker.py inference.py k8s-sm-hyperopt-training-script.yaml requirements.txt upload_source_to_s3.ipynb
Выполните upload_source_to_s3.ipynb
, чтобы загрузить сценарии обучения в Amazon S3.
Откройте k8s-sm-hyperopt-training-script.yaml
файл конфигурации в своем любимом текстовом редакторе, чтобы рассмотреть его поближе.
kind: HyperParameterTuningJob
предполагает, что это работа по настройке модели Amazon SageMaker.
В разделе resourceLimits укажите, сколько обучающих заданий вы хотите, чтобы тюнер гиперпараметров запускал, чтобы изучить и найти лучший набор гиперпараметров. maxNumberOfTrainingJobs указывает общее количество заданий, которые вы хотите запустить с различными комбинациями гиперпараметров, а maxParallelTrainingJobs указывает, на скольких экземплярах вы хотите запустить это в любой момент времени. Стратегия может быть байесовской или случайной.
Гиперпараметры могут иметь вид integerParameterRanges, continuousParameterRanges или категориальныйParameterRanges. В приведенном выше примере оптимизатор и размер пакета являются категориальными, что означает, что Amazon SageMaker случайным образом выберет одно из указанных значений. Для скорости обучения и импульса Amazon SageMaker случайным образом выберет непрерывное значение в указанном диапазоне.
Чтобы запустить задание по настройке гиперпараметров, запустите:
kubectl apply -f k8s-sm-hyperopt-training-script.yaml
Выход:
hyperparametertuningjob.sagemaker.aws.amazon.com/k8s-sm-hyperopt-training-script created
Чтобы получить дополнительные сведения о задании настройки гиперпараметров, запустите:
kubectl get hyperparametertuningjob
Выход
NAME STATUS CREATION-TIME COMPLETED INPROGRESS ERRORS STOPPED BEST-TRAINING-JOB SAGEMAKER-JOB-NAME k8s-sm-hyperopt-training-script InProgress 2020-03-03T09:13:58Z 0 2 0 0 50d11d175d2f11ea89ac02f05b3bb36a
Задание по настройке гиперпараметров порождает несколько учебных заданий, которые вы можете увидеть, попросив kubectl получить список учебных заданий.
kubectl get trainingjob
Выход
NAME STATUS SECONDARY-STATUS CREATION-TIME SAGEMAKER-JOB-NAME 50d11d175d2f11ea89ac02f05b3bb36a-001-673da61b InProgress Starting 2020-03-03T09:14:11Z 50d11d175d2f11ea89ac02f05b3bb36a-001-673da61b 50d11d175d2f11ea89ac02f05b3bb36a-002-7952d388 InProgress Downloading 2020-03-03T09:14:11Z 50d11d175d2f11ea89ac02f05b3bb36a-002-7952d388
Перейдите к AWS Console > Amazon SageMaker > Hyperparameter tuning jobs
Вы должны увидеть, что выполняется настройка гиперпараметров.
Пример использования 4: размещение конечной точки вывода с моделью BYO
Чтобы развернуть модель в сервисах хостинга Amazon SageMaker, вам просто нужно внести свою собственную модель в сжатый tar-файл. Если вы хотите разместить модель, которую вы обучили в Amazon SageMaker, выходные данные уже будут в требуемом формате.
Если вы выполнили приведенный выше пример, просто перейдите к корзине Amazon S3, где результаты работы по обучению были сохранены AmazonS3 > YOUR_BUCKET > JOB_NAME > output
. Здесь вы должны найти файл с именем model.tar.gz
, который включает обучающую модель.
Перейдите в каталог с 4-м примером:
cd kubernetes-sagemaker-demos/3-tf-hyperopt-training-script ls -1
Выход
k8s-sm-inference-host-endpoint.yaml
Откройте k8s-sm-inference-host-endpoint.yaml
файл конфигурации в своем любимом текстовом редакторе, чтобы рассмотреть его поближе.
Укажите тип экземпляра для размещения в поле instanceType
и укажите вес для A / B-тестирования, если вы размещаете несколько моделей. В поле modelDataUrl
укажите расположение обученной модели на Amazon S3.
Чтобы развернуть модель, запустите:
kubectl apply -f k8s-sm-inference-host-endpoint.yaml
Выход:
hostingdeployment.sagemaker.aws.amazon.com/k8s-sm-inference-host-endpoint created
Чтобы просмотреть подробную информацию о развертывании хостинга, запустите:
kubectl get hostingdeployments
Выход:
NAME STATUS SAGEMAKER-ENDPOINT-NAME k8s-sm-inference-host-endpoint Creating k8s-sm-inference-host-endpoint-cdbb6db95d3111ea97a20e30c8d9dadc
Перейдите к AWS Console > Amazon SageMaker > Endpoints
Вы должны увидеть, как работает конечная точка Amazon SageMaker, и готовы принимать запросы.
Заключение
В этом сообщении блога я рассказал, как Kubernetes и Amazon SageMaker можно использовать вместе, чтобы получить максимальную отдачу от обоих при выполнении рабочих нагрузок машинного обучения.
Я представил краткий обзор операторов Amazon SageMaker для Kubernetes и того, как вы можете использовать его для использования возможностей Amazon SageMaker, таких как распределенное обучение, оптимизация гиперпараметров и хостинг конечных точек вывода, которые могут эластично масштабироваться. После этого я показал вам пошаговый процесс отправки запросов на обучение и развертывание с помощью Kubernetes CLI kubect
.
Я сделал все файлы конфигурации доступными на GitHub, так что не стесняйтесь использовать их, изменять и делать своими собственными. Спасибо за чтение, весь код и примеры доступны на GitHub здесь:
https://github.com/shashankprasanna/kubernetes-sagemaker-demos.git
Если у вас есть вопросы, напишите мне в Twitter (@shshnkp), LinkedIn или оставьте комментарий ниже. Наслаждаться!