Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker с помощью Kubeflow в один клик при развертывании AWS

Сегодня многие клиенты AWS создают корпоративные платформы машинного обучения (ML) на основе Амазон Эластик Кубернетес Сервис (Amazon EKS) с использованием Kubeflow на AWS (распределение Kubeflow для AWS) во многих случаях использования, включая компьютерное зрение, понимание естественного языка, перевод речи и финансовое моделирование.

Для последний выпуск Kubeflow v1.6.1 с открытым исходным кодом, сообщество Kubeflow продолжает поддерживать масштабное внедрение Kubeflow для корпоративных сценариев использования. Последний выпуск включает в себя множество новых интересных функций, таких как поддержка Kubernetes v1.22, комбинированный Python SDK для PyTorch, MXNet, MPI, XGBoost в распределенном операторе обучения Kubeflow, новые CRD ClusterServingRuntime и ServingRuntime для обслуживания моделей и многое другое.

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

В этом посте мы обсудим новые функции Kubeflow на AWS v1.6.1 и выделим три важные интеграции, которые были объединены на одной платформе, чтобы предложить вам:

  • Инфраструктура как код (IaaC) решение одним щелчком мыши, которое автоматизирует комплексную установку Kubeflow, включая создание кластера EKS.
  • Поддержка распределенного обучения на Создатель мудреца Амазонки через Операторы Amazon SageMaker для Kubernetes (АКК) и Компоненты SageMaker для пайплайнов Kubeflow и локально в Kubernetes с помощью Обучение операторов Kubeflow. Многие клиенты используют эту возможность для создания гибридных архитектур машинного обучения, в которых они используют как вычислительные ресурсы Kubernetes для этапа экспериментов, так и SageMaker для выполнения рабочих нагрузок в масштабе производства.
  • Улучшенный мониторинг и наблюдаемость рабочих нагрузок машинного обучения, включая Amazon EKS, метрики Kubeflow и журналы приложений с использованием Prometheus, Grafana и Amazon CloudWatch интеграций

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

Kubeflow на AWS

Kubeflow на AWS 1.6.1 предоставляет четкий способ использования Kubeflow с добавлением следующих сервисов AWS в дополнение к существующим возможностям:

  • Интеграция SageMaker с Kubeflow для запуска гибридных рабочих процессов машинного обучения с использованием операторов SageMaker для Kubernetes (ACK) и компонентов SageMaker для конвейеров Kubeflow.
  • Параметры автоматического развертывания были улучшены и упрощены с помощью сценариев Kustomize и диаграмм Helm.
  • Добавлена ​​поддержка развертывания инфраструктуры как кода (IaC) одним щелчком мыши для Kubeflow на AWS с использованием Terraform для всех доступных варианты развертывания. Этот скрипт автоматизирует создание следующих ресурсов AWS:
  • Поддержка Приватная ссылка AWS для Amazon S3, позволяя некоммерческим пользователям региона подключаться к соответствующим конечным точкам S3.
  • Добавлена ​​интеграция с Управляемый сервис Amazon для Prometheus (AMP) и Графана под управлением Amazon для мониторинга метрик с помощью Kubeflow на AWS.
  • Обновлены контейнеры сервера ноутбуков Kubeflow с последними образами контейнеров глубокого обучения на основе TensorFlow 2.10.0 и PyTorch 1.12.1.
  • Интеграция с AWS DLC для запуска распределенного обучение и вывод рабочие нагрузки.

Следующая диаграмма архитектуры представляет собой краткий снимок всех интеграций сервисов (включая уже упомянутые), которые доступны для компонентов управления и плоскости данных Kubeflow в Kubeflow на AWS. Плоскость управления Kubeflow устанавливается поверх Amazon EKS — управляемой контейнерной службы, используемой для запуска и масштабирования приложений Kubernetes в облаке. Эти интеграции сервисов AWS позволяют отделить критически важные части плоскости управления Kubeflow от Kubernetes, обеспечивая безопасную, масштабируемую, отказоустойчивую и экономичную структуру. Для получения дополнительной информации о ценности, которую эти сервисные интеграции добавляют по сравнению с Kubeflow с открытым исходным кодом, см. Создайте и разверните масштабируемую систему машинного обучения в Kubernetes с помощью Kubeflow на AWS..

Давайте более подробно обсудим, чем ключевые функции Kubeflow на AWS 1.6.1 могут быть полезны для вашей организации.

Подробная информация о функциях Kubeflow на AWS

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

Параметры развертывания

Мы предоставляем различные варианты развертывания для различных сценариев использования клиентов. Здесь вы можете выбрать, с какими сервисами AWS вы хотите интегрировать развертывание Kubeflow. Если вы решите изменить параметры развертывания позже, мы рекомендуем выполнить новую установку для нового развертывания. Доступны следующие варианты развертывания:

Если вы хотите развернуть Kubeflow с минимальными изменениями, рассмотрите ваниль вариант развертывания. Все доступные варианты развертывания можно установить с помощью Kustomize, Helm или Terraform.

У нас также есть различные развертывания дополнений, которые можно установить поверх любого из этих вариантов развертывания:

Варианты установки

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

Вариант 1: Терраформ (IaC)

Это создает кластер EKS и все связанные ресурсы инфраструктуры AWS, а затем развертывает Kubeflow одной командой с помощью Terraform. Внутри он использует чертежи EKS и диаграммы Helm.

Этот вариант имеет следующие преимущества:

  • Он предоставляет предприятиям гибкость для развертывания Amazon EKS и Kubeflow с помощью одной команды, не беспокоясь о конкретных конфигурациях компонентов Kubeflow. Это значительно ускорит оценку технологий, создание прототипов и жизненный цикл разработки продукта, обеспечивая гибкость использования модулей терраформирования и их модификацию для удовлетворения любых потребностей конкретного проекта.
  • Сегодня многие организации, которые используют Terraform в качестве центра своей облачной стратегии, теперь могут использовать решение Kubeflow на AWS Terraform для достижения своих облачных целей.

Вариант 2: Настройка или Helm Charts:

Этот вариант позволяет развернуть Kubeflow в два этапа:

  1. Создавайте ресурсы AWS, такие как Amazon EKS, Amazon RDS, Amazon S3 и Amazon Cognito, либо с помощью автоматизированных сценариев, включенных в дистрибутив AWS, либо вручную, следуя шаг за шагом руководство.
  2. Установите развертывания Kubeflow либо с помощью чартов Helm, либо с помощью Kustomize.

Этот вариант имеет следующие преимущества:

  • Основная цель этого варианта установки — предоставить конфигурации Kubernetes, связанные с Kubeflow. Таким образом, вы можете создавать или использовать существующие кластеры EKS или любые связанные ресурсы AWS, такие как Amazon RDS, Amazon S3 и Amazon Cognito, а также настраивать и управлять ими для работы с Kubeflow на AWS.
  • Легче перейти от манифеста Kustomize Kubeflow с открытым исходным кодом к дистрибутиву AWS Kubeflow.

На следующей диаграмме показаны архитектуры обоих вариантов.

Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Интеграция с SageMaker

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

Многие клиенты AWS, у которых есть требования к переносимости или стандартные локальные ограничения, используют Amazon EKS для настройки воспроизводимых конвейеров машинного обучения, выполняющих рабочие нагрузки обучения и логических выводов. Однако это требует от разработчиков написания собственного кода для оптимизации базовой инфраструктуры машинного обучения, обеспечения высокой доступности и надежности, а также соблюдения соответствующих требований безопасности и нормативных требований. Поэтому эти клиенты хотят использовать SageMaker в качестве оптимизированной по стоимости и управляемой инфраструктуры для обучения и развертывания моделей и продолжать использовать Kubernetes для оркестровки и конвейеров машинного обучения, чтобы сохранить стандартизацию и переносимость.

Чтобы удовлетворить эту потребность, AWS позволяет обучать, настраивать и развертывать модели в SageMaker из Amazon EKS, используя следующие два варианта:

  • Операторы Amazon SageMaker ACK для Kubernetes, основанные на Контроллеры AWS для Kubernetes (ACK) фреймворк. ACK — это стратегия AWS, которая обеспечивает стандартизацию создания настраиваемых контроллеров Kubernetes, которые позволяют пользователям Kubernetes предоставлять ресурсы AWS, такие как базы данных или очереди сообщений, просто с помощью API Kubernetes. Операторы ACK SageMaker упрощают разработчикам машинного обучения и специалистам по данным, использующим Kubernetes в качестве плоскости управления, обучение, настройку и развертывание моделей машинного обучения в SageMaker без входа в консоль SageMaker.
  • Ассоциация Компоненты SageMaker для конвейеров Kubeflow, которые позволяют интегрировать SageMaker с переносимостью и оркестровкой Kubeflow Pipelines. С компонентами SageMaker каждое задание в рабочем процессе конвейера выполняется в SageMaker, а не в локальном кластере Kubernetes. Это позволяет вам создавать и отслеживать собственные задания SageMaker по обучению, настройке, развертыванию конечных точек и пакетному преобразованию из ваших конвейеров Kubeflow, что позволяет вам перемещать полные вычисления, включая задания по обработке данных и обучению, из кластера Kubernetes в управляемую службу SageMaker, оптимизированную для машинного обучения.

Начиная с Kubeflow на AWS версии 1.6.1, все доступные варианты развертывания Kubeflow по умолчанию объединяют оба варианта интеграции с Amazon SageMaker на одной платформе. Это означает, что теперь вы можете отправлять задания SageMaker с помощью операторов ACK SageMaker с самого сервера Kubeflow Notebook, отправляя пользовательский ресурс SageMaker, или с шага конвейера Kubeflow, используя компоненты SageMaker.

Существует две версии компонентов SageMaker: Бото3 (AWS SDK для AWS SDK для Python) на основе компонентов версии 1 и SageMaker Operator for K8s (ACK) на основе компонентов версии 2. Новые компоненты SageMaker версии 2 поддерживают последнюю версию API обучения SageMaker, и мы продолжим добавлять дополнительные функции SageMaker в эту версию компонента. Однако у вас есть возможность комбинировать компоненты Sagemaker версии 2 для обучения и версии 1 для других функций SageMaker, таких как настройка гиперпараметров, обработка заданий, размещение и многое другое.

Интеграция с Prometheus и Grafana

Prometheus — это инструмент агрегации метрик с открытым исходным кодом, который можно настроить для работы в кластерах Kubernetes. При работе в кластерах Kubernetes главный сервер Prometheus периодически очищает конечные точки подов.

Компоненты Kubeflow, такие как Kubeflow Pipelines (KFP) и Notebook, выдают метрики Prometheus, позволяющие отслеживать ресурсы компонента, такие как количество запущенных экспериментов или количество ноутбуков.

Эти метрики могут быть агрегированы сервером Prometheus, работающим в кластере Kubernetes, и могут быть запрошены с помощью языка запросов Prometheus (PromQL). Дополнительные сведения о функциях, поддерживаемых Prometheus, см. Документация Прометея.

Дистрибутив Kubeflow на AWS поддерживает интеграцию со следующими управляемыми сервисами AWS:

  1. Amazon Managed Prometheus (AMP), который представляет собой Прометей-совместимый сервис мониторинга контейнерной инфраструктуры и метрик приложений для контейнеров, который упрощает для клиентов безопасный мониторинг контейнерных сред в масштабе. Используя AMP, вы можете визуализировать, анализировать и выдавать предупреждения о ваших метриках, журналах и трассировках, собранных из нескольких источников данных в вашей системе наблюдения, включая AWS, сторонних независимых поставщиков программного обеспечения и другие ресурсы в вашем ИТ-портфолио.
  2. Amazon Managed Grafana — полностью управляемый и безопасный сервис визуализации данных на основе открытого исходного кода. графана проект, который позволяет клиентам мгновенно запрашивать, сопоставлять и визуализировать операционные показатели, журналы и трассировки для своих приложений из нескольких источников данных. Amazon Managed Grafana разгружает операционное управление Grafana, автоматически масштабируя вычислительную инфраструктуру и инфраструктуру базы данных по мере роста потребностей, с автоматическим обновлением версий и исправлениями безопасности.

Дистрибутив Kubeflow на AWS поддерживает интеграцию Amazon Managed Service for Prometheus и Amazon Managed Grafana, чтобы упростить прием и визуализацию метрик Prometheus в безопасном масштабе.

Следующие метрики принимаются и могут быть визуализированы:

Чтобы настроить Amazon Managed Service для Prometheus и Amazon Managed Grafana для вашего кластера Kubeflow, см. Используйте Prometheus, Amazon Managed Service for Prometheus и Amazon Managed Grafana для мониторинга показателей с помощью Kubeflow на AWS..

Обзор решения

В этом случае мы используем ванильное развертывание Kubeflow с использованием варианта установки Terraform. Когда установка завершена, мы входим в панель управления Kubeflow. На панели управления мы запускаем сервер ноутбуков Kubeflow Jupyter для создания конвейера Kubeflow, который использует SageMaker для запуска распределенного обучения модели классификации изображений и конечную точку SageMaker для развертывания модели.

Предпосылки

Убедитесь, что вы соответствуете следующим требованиям:

  • У вас есть Аккаунт AWS.
  • Убедитесь, что вы в us-west-2 Регион для запуска этого примера.
  • Используйте Google Chrome для взаимодействия с Консоль управления AWS и кубефлоу.
  • Убедитесь, что в вашей учетной записи ограничение типа ресурса SageMaker Training для ml.p3.2xlarge увеличено до 2 с помощью консоли Service Quotas.
  • По желанию вы можете использовать Облако AWS9, облачная интегрированная среда разработки (IDE), которая позволяет выполнять всю работу из вашего веб-браузера. Инструкции по настройке см. Настройка IDE Cloud9. Выберите Ubuntu Server 18.04 в качестве платформы в настройках AWS Cloud9.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Затем в среде AWS Cloud9 выберите знак «плюс» и откройте новый терминал.

Вы также настраиваете Интерфейс командной строки AWS (AWS CLI). Для этого вам потребуется идентификатор ключа доступа и секретный ключ доступа Управление идентификацией и доступом AWS (Я) пользователь учетная запись с административными привилегиями (прикрепить существующую управляемую политику) и программным доступом. См. следующий код:

aws configure --profile=kubeflow

AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: us-west-2
Default output format [None]: json

# (In Cloud9, select “Cancel” and “Permanently disable” when the AWS managed temporary credentials dialog pops up)

export AWS_PROFILE=kubeflow

Проверьте разрешения, которые cloud9 будет использовать для вызова ресурсов AWS.

aws sts get-caller-identity

В приведенном ниже выводе убедитесь, что вы видите имя пользователя-администратора, которого вы настроили в профиле AWS CLI. В этом примере это «kubeflow-user».

{
    "UserId": "*******",
    "Account": "********",
    "Arn": "arn:aws:iam::*******:user/kubeflow-user"
}

Установите Amazon EKS и Kubeflow на AWS

Чтобы установить Amazon EKS и Kubeflow на AWS, выполните следующие действия:

  1. Настройте среду для развертывания Kubeflow на AWS:
    #Clone the awslabs/kubeflow-manifests and the kubeflow/manifests repositories and check out the release branches of your choosing
    export KUBEFLOW_RELEASE_VERSION=v1.6.1
    export AWS_RELEASE_VERSION=v1.6.1-aws-b1.0.0
    git clone https://github.com/awslabs/kubeflow-manifests.git && cd kubeflow-manifests
    git checkout ${AWS_RELEASE_VERSION}
    git clone --branch ${KUBEFLOW_RELEASE_VERSION} https://github.com/kubeflow/manifests.git upstream
    
    export MANIFEST_DIR=$PWD

    #Install the necessary tools with the following command:
    make install-tools
    source ~/.bash_profile

  2. Разверните базовую версию Kubeflow на AWS и связанных ресурсах AWS, таких как EKS, с помощью Terraform. Обратите внимание, что тома EBS, используемые в группе узлов EKS, по умолчанию не зашифрованы:
    #Define the following environment variables
    
    #Region to create the cluster in
    export CLUSTER_REGION=us-west-2
    #Name of the cluster to create
    export CLUSTER_NAME=

    cd deployments/vanilla/terraform
    
    #Save the variables to a .tfvars file
    cat < sample.auto.tfvars
    cluster_name="${CLUSTER_NAME}"
    cluster_region="${CLUSTER_REGION}"
    EOF
    
    #Run the following one-click command to deploy terraform to install EKS infrastructure and Kubeflow
    make deploy

Настройте разрешения Kubeflow

  1. Добавьте разрешения для модуля Notebook и модуля компонента Pipeline, чтобы выполнять вызовы API SageMaker, S3 и IAM с помощью kubeflow_iam_permissions.sh скрипты.
    export NAMESPACE=kubeflow-user-example-com
    
    wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/kubeflow_iam_permissions.sh
    chmod +x kubeflow_iam_permissions.sh
    ./kubeflow_iam_permissions.sh $NAMESPACE $CLUSTER_NAME $CLUSTER_REGION

  2. Создайте роль выполнения SageMaker, чтобы задание обучения SageMaker могло получить доступ к набору обучающих данных из службы S3, используя sagemaker_role.sh скрипты.
    wget https://raw.githubusercontent.com/aws-samples/eks-kubeflow-cloudformation-quick-start/9e46662d97e1be7edb0be7fc31166e545655636a/utils/sagemaker_role.sh
    chmod +x sagemaker_role.sh
    ./sagemaker_role.sh

Доступ к панели инструментов Kubeflow

Чтобы получить доступ к панели инструментов Kubeflow, выполните следующие шаги:

  1. Вы можете запускать панель управления Kubeflow локально в среде Cloud9, не раскрывая свои URL-адреса в общедоступном Интернете, выполнив приведенные ниже команды.
    # Configure Kubecontext
    $(terraform output -raw configure_kubectl)
    
    cd ${MANIFEST_DIR}
    make port-forward

  2. Выберите Предварительный просмотр запущенного приложения.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  3. Выберите значок в углу панели управления Kubeflow, чтобы открыть его как отдельную вкладку в Chrome.
  4. Введите учетные данные по умолчанию (user@example.com/12341234), чтобы войти в панель управления Kubeflow.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Настройте Kubeflow в среде AWS

После входа в панель управления Kubeflow убедитесь, что у вас правильное пространство имен (kubeflow-user-example-com) выбран. Выполните следующие шаги, чтобы настроить среду Kubeflow в среде AWS:

  1. На панели инструментов Kubeflow выберите Ноутбуки в навигационной панели.
  2. Выберите Новый ноутбук.
  3. Что касается Фамилия, войти aws-nb.
  4. Что касается Изображение докета Jupyter, выберите изображение jupyter-pytorch:1.12.0-cpu-py38-ubuntu20.04-ec2-2022-09-20 (последняя доступная jupyter-pytorch DLC-изображение).
  5. Что касается ЦП, войти 1.
  6. Что касается Память, войти 5.
  7. Что касается Графические процессоры, оставить как Ничто.
  8. Не вносите никаких изменений в Рабочее пространство и Объемы данных раздел.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  9. Выберите Разрешить доступ к пайплайнам Kubeflow в Конфигурации раздел и выберите «Запуск».Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  10. Убедитесь, что ваш блокнот успешно создан (это может занять пару минут).Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  11. Выберите Свяжитесь для входа в JupyterLab.
  12. Клонируйте репо, введя https://github.com/aws-samples/eks-kubeflow-cloudformation-quick-start.git в Клонировать репозиторий поле.
  13. Выберите Клон.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

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

После того, как вы настроите блокнот Jupyter, вы можете запустить всю демонстрацию, используя следующие высокоуровневые шаги из папки eks-kubeflow-cloudformation-quick-start/workshop/pytorch-distributed-training в клонированном репозитории:

  1. Запустите обучающий скрипт PyTorch Distributed Data Parallel (DDP). – Обратитесь к учебному сценарию PyTorch DDP. cifar10-distributed-gpu-final.py, который включает пример сверточной нейронной сети и логику для распределения обучения на многоузловом кластере ЦП и ГП.
  2. Создайте конвейер Kubeflow - Запустите блокнот STEP1.0_create_pipeline_k8s_sagemaker.ipynb для создания конвейера, который запускает и развертывает модели в SageMaker. Убедитесь, что вы установили библиотеку SageMaker как часть первой ячейки записной книжки и перезапустили ядро, прежде чем запускать остальные ячейки записной книжки.
  3. Вызвать конечную точку SageMaker - Запустите блокнот STEP1.1_invoke_sagemaker_endpoint.ipynb для вызова и тестирования конечной точки вывода модели SageMaker, созданной в предыдущей записной книжке.

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

Запустите скрипт обучения PyTorch DDP

В рамках распределенного обучения мы обучаем модель классификации, созданную простой сверточной нейронной сетью, которая работает с набором данных CIFAR10. Сценарий обучения cifar10-distributed-gpu-final.py содержит только библиотеки с открытым исходным кодом и совместим с учебными кластерами Kubernetes и SageMaker как на устройствах с графическим процессором, так и на экземплярах ЦП. Давайте рассмотрим несколько важных аспектов сценария обучения, прежде чем мы запустим примеры из нашей записной книжки.

Мы используем torch.distributed модуль, который содержит примитивы поддержки и связи PyTorch для многопроцессорного параллелизма между узлами в кластере:

...
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.utils.data
import torch.utils.data.distributed
import torchvision
from torchvision import datasets, transforms
...

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

# Define models
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

Если в обучающем кластере есть графические процессоры, сценарий запускает обучение на устройствах CUDA, а переменная устройства содержит устройство CUDA по умолчанию:

device = "cuda" if torch.cuda.is_available() else "cpu"
...

Прежде чем запускать распределенное обучение с помощью PyTorch DistributedDataParallel чтобы запустить распределенную обработку на нескольких узлах, вам необходимо инициализировать распределенную среду, вызвав init_process_group. Это инициализируется на каждой машине обучающего кластера.

dist.init_process_group(backend=args.backend, rank=host_rank, world_size=world_size)
...

Мы создаем экземпляр модели классификатора и копируем модель на целевое устройство. Если распределенное обучение включено для запуска на нескольких узлах, DistributedDataParallel class используется в качестве объекта-оболочки вокруг объекта модели, что позволяет проводить синхронное распределенное обучение на нескольких машинах. Входные данные разделяются на пакетное измерение, и реплика модели размещается на каждой машине и каждом устройстве. См. следующий код:

model = Net().to(device)

if is_distributed:
model = torch.nn.parallel.DistributedDataParallel(model)

...

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

В ноутбуке используется Пакет SDK для Kubeflow Pipelines и предоставленный набор пакетов Python для указания и запуска конвейеров рабочего процесса ML. В рамках этого SDK мы используем декоратор пакетов предметно-ориентированного языка (DSL). dsl.pipeline, который украшает функции Python для возврата конвейера.

Конвейер Kubeflow использует компонент SageMaker V2 для отправки обучения в SageMaker с помощью операторов ACK SageMaker. Для создания и развертывания модели SageMaker используется компонент SageMaker V1, который представляет собой компоненты SageMaker на основе Boto3. В этом примере мы используем комбинацию обоих компонентов, чтобы продемонстрировать гибкость вашего выбора.

  1. Загрузите компоненты SageMaker, используя следующий код:
    # Loads SageMaker training components v2 for Kubeflow pipeline from the URL
    sagemaker_train_ack_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/d4aaa03035f221351ebe72fbd74fcfccaf25bb66/components/aws/sagemaker/TrainingJob/component.yaml')
    
    # Loads SageMaker components v1 for Kubeflow pipeline from the URL
    sagemaker_model_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/model/component.yaml')
    sagemaker_deploy_op = components.load_component_from_url('https://raw.githubusercontent.com/kubeflow/pipelines/cb36f87b727df0578f4c1e3fe9c24a30bb59e5a2/components/aws/sagemaker/deploy/component.yaml')

    В следующем коде мы создаем конвейер Kubeflow, в котором мы запускаем распределенное обучение SageMaker с использованием двух ml.p3.2xlarge экземпляры:

    # Create Kubeflow Pipeline using Amazon SageMaker Service
    @dsl.pipeline(name="PyTorch Training pipeline", description="Sample training job test")
    def pytorch_cnn_pipeline(region=target_region,
    train_image=aws_dlc_sagemaker_train_image,
    serving_image=aws_dlc_sagemaker_serving_image,
    learning_rate='0.01',
    pytorch_backend='gloo',
    training_job_name=pytorch_distributed_jobname,
    instance_type='ml.p3.2xlarge',
    instance_count='2',
    network_isolation='False',
    traffic_encryption='False',
    ):
    
    # Step to run training on SageMaker using SageMaker Components V2 for Pipeline.
    training = sagemaker_train_ack_op(
    region=region,
    algorithm_specification=(f'{{ '
    f'"trainingImage": "{train_image}",'
    '"trainingInputMode": "File"'
    f'}}'),
    training_job_name=training_job_name,
    hyper_parameters=(f'{{ '
    f'"backend": "{pytorch_backend}",'
    '"batch-size": "64",'
    '"epochs": "10",'
    f'"lr": "{learning_rate}",'
    '"model-type": "custom",'
    '"sagemaker_container_log_level": "20",'
    '"sagemaker_program": "cifar10-distributed-gpu-final.py",'
    f'"sagemaker_region": "{region}",'
    f'"sagemaker_submit_directory": "{source_s3}"'
    f'}}'),
    resource_config=(f'{{ '
    f'"instanceType": "{instance_type}",'
    f'"instanceCount": {instance_count},'
    '"volumeSizeInGB": 50'
    f'}}'),
    input_data_config=training_input(datasets),
    output_data_config=training_output(bucket_name),
    enable_network_isolation=network_isolation,
    enable_inter_container_traffic_encryption=traffic_encryption,
    role_arn=role,
    stopping_condition={"maxRuntimeInSeconds": 3600}
    )
    
    model_artifact_url = get_s3_model_artifact_op(
    training.outputs["model_artifacts"]
    ).output
    
    # This step creates SageMaker Model which refers to model artifacts and inference script to deserialize the input image
    create_model = sagemaker_model_op(
    region=region,
    model_name=training_job_name,
    image=serving_image,
    model_artifact_url=model_artifact_url,
    network_isolation=network_isolation,
    environment=(f'{{ '
    '"SAGEMAKER_CONTAINER_LOG_LEVEL": "20",'
    '"SAGEMAKER_PROGRAM": "inference.py",'
    f'"SAGEMAKER_REGION": "{region}",'
    f'"SAGEMAKER_SUBMIT_DIRECTORY": "{model_artifact_url}"'
    f'}}'),
    role=role
    )
    
    # This step creates SageMaker Endpoint which will be called to run inference
    prediction = sagemaker_deploy_op(
    region=region,
    model_name_1=create_model.output,
    instance_type_1='ml.c5.xlarge'
    )
    
    #Disable pipeline cache
    training.execution_options.caching_strategy.max_cache_staleness = "P0D"

    После определения конвейера его можно скомпилировать в соответствии со спецификацией Argo YAML с помощью SDK Kubeflow Pipelines. kfp.compiler упаковка. Этот конвейер можно запустить с помощью клиента SDK Kubeflow Pipelines, который вызывает конечную точку службы Pipelines и передает соответствующие заголовки проверки подлинности прямо из записной книжки. См. следующий код:

    # DSL Compiler that compiles pipeline functions into workflow yaml.
    kfp.compiler.Compiler().compile(pytorch_cnn_pipeline, "pytorch_cnn_pipeline.yaml")
    
    # Connect to Kubeflow Pipelines using the Kubeflow Pipelines SDK client
    client = kfp.Client()
    
    experiment = client.create_experiment(name="ml_workflow")
    
    # Run a specified pipeline
    my_run = client.run_pipeline(experiment.id, "pytorch_cnn_pipeline", "pytorch_cnn_pipeline.yaml")
    
    # Please click “Run details” link generated below this cell to view your pipeline. You can click every pipeline step to see logs.

  2. Выберите Детали запуска ссылку под последней ячейкой, чтобы просмотреть конвейер Kubeflow. На следующем снимке экрана показаны сведения о конвейере для компонента обучения и развертывания SageMaker.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  3. Выберите шаг задания обучения и на Журналы выберите ссылку «Журналы CloudWatch», чтобы получить доступ к журналам SageMaker.
    На следующем снимке экрана показаны журналы CloudWatch для каждого из двух экземпляров ml.p3.2xlarge.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  4. Выберите любую из групп, чтобы просмотреть журналы.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  5. Захватите конечную точку SageMaker, выбрав Sagemaker — развертывание модели шаг и копирование endpoint_name выходное значение артефакта.Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Вызвать конечную точку SageMaker

Записная книжка STEP1.1_invoke_sagemaker_endpoint.ipynb вызывает конечную точку вывода SageMaker, созданную на предыдущем шаге. Убедитесь, что вы обновили имя конечной точки:

# Invoke SageMaker Endpoint. * Ensure you update the endpoint
# You can grab the SageMaker Endpoint name by either 1) going to the pipeline visualization of Kubeflow console and click the component for deployment, or 2) Go to SageMaker console and go to the list of endpoints, and then substitute the name to the EndpointName='...' in this cell.

endpointName=''

response = client.invoke_endpoint(EndpointName=endpointName,
ContentType='application/x-image',
Body=payload)

pred = json.loads(response['Body'].read().decode())

output_vector_list=pred['score']

# Get outout vector of 10 classes
output_vector = output_vector_list[0]

# Find the class with highest probability
max=output_vector[0]
index = 0
for i in range(1,len(output_vector)):
if output_vector[i] > max:
max = output_vector[i]
index = i

print(f'Index of the maximum value is : {index}')

labels = ['airplane','automobile','bird','cat','deer','dog','frog','horse','ship','truck']

print(labels[index])

Убирать

Чтобы очистить ресурсы, выполните следующие действия:

  1. Выполните следующие команды в AWS Cloud9, чтобы удалить ресурсы AWS:
    cd ${MANIFEST_DIR}/deployments/vanilla/terraform
    make delete

  2. Удалить роль IAM»sagemakerrole” с помощью следующей команды AWS CLI:
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
    aws iam detach-role-policy --role-name sagemakerrole --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
    aws iam delete-role --role-name sagemakerrole

  3. Удалите конечную точку SageMaker с помощью следующей команды интерфейса командной строки AWS:
    aws sagemaker delete-endpoint --endpoint-name  --region us-west-2

Обзор

В этом посте мы подчеркнули ценность, которую Kubeflow на AWS 1.6.1 обеспечивает благодаря встроенной интеграции сервисов, управляемых AWS, для удовлетворения потребностей в сценариях использования AI и ML на уровне предприятия. Вы можете выбрать один из нескольких вариантов развертывания для установки Kubeflow на AWS с различными интеграциями сервисов, используя Terraform, Kustomize или Helm. Вариант использования в этом посте продемонстрировал интеграцию Kubeflow с SageMaker, которая использует управляемый обучающий кластер SageMaker для запуска распределенного обучения модели классификации изображений и конечную точку SageMaker для развертывания модели.

Мы также предоставили пример примера конвейера в котором используются новейшие компоненты SageMaker; вы можете запустить это прямо из панели управления Kubeflow. Этот трубопровод требует Данные Amazon S3 и Роль IAM выполнения SageMaker в качестве необходимых входных данных.

Чтобы начать работу с Kubeflow на AWS, ознакомьтесь с доступными вариантами развертывания, интегрированными с AWS, в Kubeflow на AWS. Вы можете следить за Репозиторий лабораторий AWS для отслеживания всех вкладов AWS в Kubeflow. Вы также можете найти нас на Kubeflow #AWS Slack-канал; ваши отзывы помогут нам определить приоритеты следующих функций для участия в проекте Kubeflow.


Об авторах

Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Канвалджит Хурми является старшим архитектором решений в Amazon Web Services. Он работает с клиентами AWS, чтобы предоставить рекомендации и техническую помощь, помогая им повысить ценность своих решений при использовании AWS. Kanwaljit специализируется на помощи клиентам в создании контейнерных приложений и приложений машинного обучения.

Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Картик Каламади является инженером по разработке программного обеспечения в Amazon AI. В настоящее время занимается проектами машинного обучения Kubernetes с открытым исходным кодом, такими как Kubeflow и AWS SageMaker Controller для k8s. В свободное время я люблю играть в компьютерные игры и возиться с виртуальной реальностью, используя движок Unity.

Включение гибридных рабочих процессов машинного обучения в Amazon EKS и Amazon SageMaker одним щелчком мыши при развертывании Kubeflow в AWS PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Рахул Харс работает инженером-разработчиком программного обеспечения в Amazon Web Services. Его работа сосредоточена на интеграции сервисов AWS с контейнерными платформами ML Ops с открытым исходным кодом для повышения их масштабируемости, надежности и безопасности. Помимо сосредоточения внимания на запросах клиентов о функциях, Рахул также любит экспериментировать с последними технологическими разработками в этой области.

Отметка времени:

Больше от Машинное обучение AWS