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

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

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

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

Kubernetes — это широко распространенная система для автоматизации развертывания инфраструктуры, масштабирования ресурсов и управления этими контейнерными приложениями. Однако Kubernetes не создавался с учетом ML, поэтому специалистам по данным он может показаться нелогичным из-за сильной зависимости от файлов спецификаций YAML. Здесь нет опыта Jupyter, и не так много возможностей, специфичных для ML, таких как управление рабочими процессами и конвейерами, а также других возможностей, которые ожидают эксперты ML, таких как настройка гиперпараметров, размещение моделей и другие. Такие возможности можно создать, но Kubernetes не был предназначен для этого в качестве своей основной цели.

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

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

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

Чем помогает Kubeflow на AWS и SageMaker?

Модели нейронных сетей, созданные с помощью сред глубокого обучения, таких как TensorFlow, PyTorch, MXNet и других, обеспечивают гораздо более высокую точность за счет использования значительно больших наборов обучающих данных, особенно в случаях использования компьютерного зрения и обработки естественного языка. Однако с большими наборами обучающих данных обучение моделей глубокого обучения занимает больше времени, что в конечном итоге замедляет время выхода на рынок. Если бы мы могли масштабировать кластер и сократить время обучения модели с недель до дней или часов, это могло бы оказать огромное влияние на производительность и скорость бизнеса.

Amazon EKS помогает подготовить управляемую плоскость управления Kubernetes. Вы можете использовать Amazon EKS для создания крупномасштабных обучающих кластеров с инстансами ЦП и ГП, а также использовать набор инструментов Kubeflow для предоставления удобных для машинного обучения инструментов с открытым исходным кодом и запуска рабочих процессов машинного обучения, которые являются переносимыми и масштабируемыми с помощью конвейеров Kubeflow, чтобы повысить производительность вашей команды и сократить время выхода на рынок.

Однако при таком подходе может возникнуть несколько проблем:

  • Обеспечение максимального использования кластера группами специалистов по обработке и анализу данных. Например, вы должны предоставлять экземпляры графического процессора по запросу и обеспечивать его высокую степень использования для ресурсоемких задач производственного масштаба, таких как обучение глубокому обучению, и использовать экземпляры ЦП для менее требовательных задач, таких как предварительная обработка данных.
  • Обеспечение высокой доступности тяжеловесных компонентов инфраструктуры Kubeflow, включая базу данных, хранилище и аутентификацию, развернутых на рабочем узле кластера Kubernetes. Например, плоскость управления Kubeflow генерирует артефакты (такие как экземпляры MySQL, журналы модулей или хранилище MinIO), которые со временем увеличиваются и требуют объемов хранения с изменяемым размером и возможностями непрерывного мониторинга.
  • Совместное использование обучающего набора данных, кода и вычислительных сред между разработчиками, учебными кластерами и проектами является сложной задачей. Например, если вы работаете над своим собственным набором библиотек, и эти библиотеки имеют сильные взаимозависимости, становится очень сложно совместно использовать и запускать один и тот же фрагмент кода между специалистами по данным в одной команде. Кроме того, для каждого тренировочного прогона требуется загрузка набора обучающих данных и создание обучающего образа с новыми изменениями кода.

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

Замена этих компонентов Kubeflow отделяет важные части плоскости управления Kubeflow от Kubernetes, обеспечивая безопасную, масштабируемую, отказоустойчивую и оптимизированную по стоимости конструкцию. Этот подход также высвобождает ресурсы хранения и вычислений из плоскости данных EKS, которые могут потребоваться таким приложениям, как обучение распределенным моделям или серверы пользовательских ноутбуков. Kubeflow на AWS также обеспечивает встроенную интеграцию записных книжек Jupyter с образами Deep Learning Container (DLC), которые предварительно упакованы и предварительно настроены с помощью оптимизированных для AWS сред глубокого обучения, таких как PyTorch и TensorFlow, которые позволяют вам сразу же приступить к написанию учебного кода, не прибегая к с разрешениями зависимостей и оптимизацией фреймворка. Кроме того, интеграция Amazon EFS с обучающими кластерами и средой разработки позволяет вам совместно использовать свой код и обработанный набор обучающих данных, что позволяет избежать создания образа контейнера и загрузки огромных наборов данных после каждого изменения кода. Эти интеграции с Kubeflow на AWS помогут вам ускорить создание модели и время обучения, а также улучшить совместную работу за счет упрощения обмена данными и кодом.

Kubeflow на AWS помогает создать высокодоступную и надежную платформу машинного обучения. Эта платформа обеспечивает гибкость для создания и обучения моделей глубокого обучения и предоставляет доступ ко многим наборам инструментов с открытым исходным кодом, анализу журналов и интерактивной отладке для экспериментов. Однако достижение максимального использования ресурсов инфраструктуры при обучении моделей глубокого обучения на сотнях графических процессоров по-прежнему сопряжено с большими операционными издержками. Эту проблему можно решить с помощью SageMaker — полностью управляемой службы, разработанной и оптимизированной для работы с высокопроизводительными и оптимизированными по стоимости учебными кластерами, которые выделяются только по запросу, масштабируются по мере необходимости и автоматически отключаются по завершении заданий, тем самым обеспечивая почти 100 % утилизация ресурсов. Вы можете интегрировать SageMaker с Kubeflow Pipelines с помощью управляемых компонентов SageMaker. Это позволяет задействовать рабочие процессы машинного обучения как часть конвейеров Kubeflow, где вы можете использовать Kubernetes для локального обучения и SageMaker для обучения в масштабе продукта в гибридной архитектуре.

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

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

Обучение Kubeflow — это группа операторов Kubernetes, которые добавляют в Kubeflow поддержку распределенного обучения моделей машинного обучения с использованием различных фреймворков, таких как TensorFlow, PyTorch и других. pytorch-operator это реализация Kubeflow для Kubernetes настраиваемый ресурс (PyTorchJob) для выполнения распределенных учебных заданий PyTorch в Kubernetes.

Мы используем компонент PyTorchJob Launcher как часть конвейера Kubeflow для запуска распределенного обучения PyTorch на этапе экспериментов, когда нам нужна гибкость и доступ ко всем базовым ресурсам для интерактивной отладки и анализа.

Мы также используем компоненты SageMaker для пайплайнов Kubeflow, чтобы проводить обучение моделей в производственных масштабах. Это позволяет нам использовать преимущества мощных функций SageMaker, таких как полностью управляемые сервисы, распределенные учебные задания с максимальным использованием графического процессора и экономичное обучение с помощью Эластичное вычислительное облако Amazon (Amazon EC2) Точечные экземпляры.

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

  1. Используйте файл манифеста Kubeflow для создания информационной панели Kubeflow и доступа к блокнотам Jupyter с центральной информационной панели Kubeflow.
  2. Используйте SDK конвейера Kubeflow для создания и компиляции конвейеров Kubeflow с использованием кода Python. Конвейерная компиляция преобразует функцию Python в ресурс рабочего процесса в формате YAML, совместимом с Argo.
  3. Используйте клиент Kubeflow Pipelines SDK, чтобы вызвать конечную точку службы конвейера для запуска конвейера.
  4. Конвейер оценивает условные переменные среды выполнения и выбирает между SageMaker или Kubernetes в качестве целевой среды выполнения.
  5. Используйте компонент Kubeflow PyTorch Launcher для проведения распределенного обучения в собственной среде Kubernetes или используйте компонент SageMaker для отправки обучения на платформе, управляемой SageMaker.

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

Компоненты Kubeflow Pipelines

Рабочий процесс варианта использования

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

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

Предпосылки

Для этого прохождения у вас должны быть следующие предпосылки:

  • An Аккаунт AWS.
  • Машина с Docker и Интерфейс командной строки AWS (AWS CLI) установлен.
  • По желанию вы можете использовать Облако AWS9, облачная интегрированная среда разработки (IDE), которая позволяет выполнять всю работу из вашего веб-браузера. Инструкции по настройке см. Настройка IDE Cloud9. В вашей среде Cloud9 выберите знак «плюс» и откройте новый терминал.
  • Создать роль с именем sagemakerrole. Добавить управляемые политики AmazonSageMakerFullAccess и AmazonS3FullAccess чтобы предоставить SageMaker доступ к корзинам S3. Эта роль используется заданием SageMaker, отправленным на этапе Kubeflow Pipelines.
  • Убедитесь, что в вашей учетной записи установлен лимит типа ресурса SageMaker Training для ml.p3.2xlarge увеличен до 2 с помощью Консоль сервисных квот

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

Вы можете использовать несколько различных подходов для создания кластера Kubernetes и развертывания Kubeflow. В этом посте мы сосредоточимся на подходе, который, по нашему мнению, упрощает процесс. Сначала создаем кластер EKS, затем разворачиваем на нем Kubeflow on AWS v1.5. Для каждой из этих задач мы используем соответствующий проект с открытым исходным кодом, который следует принципам Сделать фреймворк. Вместо того, чтобы устанавливать набор предварительных условий для каждой задачи, мы создаем контейнеры Docker со всеми необходимыми инструментами и выполняем задачи внутри контейнеров.

В этом посте мы используем Do Framework, который автоматизирует развертывание Kubeflow с помощью Amazon EFS в качестве надстройки. Официальные варианты развертывания Kubeflow на AWS для производственных развертываний см. развертывание.

Настройте текущий рабочий каталог и интерфейс командной строки AWS.

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

export working_dir=$PWD

Мы также настраиваем профиль командной строки AWS. Для этого вам потребуется идентификатор ключа доступа и секретный ключ доступа Управление идентификацией и доступом 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

1.1 Создание кластера EKS

Если у вас уже есть доступный кластер EKS, вы можете перейти к следующему разделу. Для этого поста мы используем проект aws-do-eks для создания нашего кластера.

  1. Сначала клонируйте проект в свой рабочий каталог.
    cd ${working_dir}
    git clone https://github.com/aws-samples/aws-do-eks
    cd aws-do-eks/

  2. Затем соберите и запустите aws-do-eks контейнер:
    ./build.sh
    ./run.sh

    Ассоциация build.sh Скрипт создает образ контейнера Docker со всеми необходимыми инструментами и скриптами для подготовки и работы кластеров EKS. run.sh script запускает контейнер, используя созданный образ Docker, и поддерживает его, чтобы мы могли использовать его в качестве среды управления EKS. Чтобы увидеть статус своего aws-do-eks контейнер, вы можете запустить ./status.sh. Если контейнер находится в состоянии Exited, вы можете использовать ./start.sh скрипт, чтобы поднять контейнер или перезапустить контейнер, вы можете запустить ./stop.sh последующей ./run.sh.

  3. Откройте оболочку в работающем aws-do-eks контейнер:
  4. Чтобы просмотреть конфигурацию кластера EKS для нашего развертывания KubeFlow, выполните следующую команду:
    vi ./eks-kubeflow.yaml

    По умолчанию эта конфигурация создает кластер с именем eks-kubeflow в us-west-2 Регион с шестью узлами m5.xlarge. Кроме того, шифрование томов EBS не включено по умолчанию. Вы можете включить его, добавив "volumeEncrypted: true" к группе узлов, и он будет шифровать с использованием ключа по умолчанию. При необходимости измените другие параметры конфигурации.

  5. Чтобы создать кластер, выполните следующую команду:
    export AWS_PROFILE=kubeflow
    eksctl create cluster -f ./eks-kubeflow.yaml

    Процесс подготовки кластера может занять до 30 минут.

  6. Чтобы убедиться, что кластер создан успешно, выполните следующую команду:
    kubectl get nodes

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

    root@cdf4ecbebf62:/eks# kubectl get nodes
    NAME                                           STATUS   ROLES    AGE   VERSION
    ip-192-168-0-166.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-13-28.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-45-240.us-west-2.compute.internal   Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-63-84.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-75-56.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-85-226.us-west-2.compute.internal   Ready       23m   v1.21.14-eks-ba74326

Создайте том EFS для учебного задания SageMaker.

В этом случае вы ускоряете задание обучения SageMaker, обучая модели глубокого обучения на основе данных, уже хранящихся в Amazon EFS. Преимущество этого варианта заключается в непосредственном запуске заданий обучения из данных в Amazon EFS без необходимости перемещения данных, что приводит к более быстрому началу обучения.

Мы создаем том EFS и развертываем драйвер EFS Container Storage Interface (CSI). Это достигается с помощью сценария развертывания, расположенного в /eks/deployment/csi/efs в aws-do-eks контейнер.

Этот сценарий предполагает, что в вашей учетной записи есть один кластер EKS. Установлен CLUSTER_NAME= если у вас более одного кластера EKS.

cd /eks/deployment/csi/efs
./deploy.sh

Этот сценарий выделяет том EFS и создает цели подключения для подсетей VPC кластера. Затем он развертывает драйвер EFS CSI и создает efs-sc класс хранения и efs-pv постоянный том в кластере EKS.

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

Generating efs-sc.yaml ...

Applying efs-sc.yaml ...
storageclass.storage.k8s.io/efs-sc created
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
efs-sc          efs.csi.aws.com         Delete          Immediate              false                  1s
gp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  36m

Generating efs-pv.yaml ...
Applying efs-pv.yaml ...
persistentvolume/efs-pv created
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
efs-pv   5Gi        RWX            Retain           Available           efs-sc                  10s

Done ...

Создайте конечную точку Amazon S3 VPC

Вы используете частное VPC, к которому у вашего учебного задания SageMaker и файловой системы EFS есть доступ. Чтобы предоставить учебному кластеру SageMaker доступ к корзинам S3 из вашего частного VPC, вы создаете конечную точку VPC:

cd /eks/vpc 
export CLUSTER_NAME= 
export REGION= 
./vpc-endpoint-create.sh

Теперь вы можете выйти из aws-do-eks контейнер оболочки и перейти к следующему разделу:

exit

root@cdf4ecbebf62:/eks/deployment/csi/efs# exit
exit
TeamRole:~/environment/aws-do-eks (main) $

1.2 Развертывание Kubeflow на AWS в Amazon EKS

Для развертывания Kubeflow на Amazon EKS мы используем проект aws-do-kubeflow.

  1. Клонируйте репозиторий с помощью следующих команд:
    cd ${working_dir}
    git clone https://github.com/aws-samples/aws-do-kubeflow
    cd aws-do-kubeflow

  2. Затем настройте проект:
    ./config.sh

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

    ./build.sh
    ./run.sh
    ./exec.sh

    Ассоциация build.sh Скрипт создает образ контейнера Docker со всеми инструментами, необходимыми для развертывания и управления Kubeflow в существующем кластере Kubernetes. run.sh сценарий запускает контейнер, используя образ Docker, а сценарий exec.sh открывает в контейнере командную оболочку, которую мы можем использовать в качестве среды управления Kubeflow. Вы можете использовать ./status.sh скрипт, чтобы увидеть, если aws-do-kubeflow контейнер запущен и работает, и ./stop.sh и ./run.sh скрипты для его перезапуска по мере необходимости.

  3. После того, как вы открыли оболочку в aws-do-eks контейнер, вы можете убедиться, что настроенный контекст кластера соответствует ожиданиям:
    root@ip-172-31-43-155:/kubeflow# kubectx
    kubeflow@eks-kubeflow.us-west-2.eksctl.io

  4. Чтобы развернуть Kubeflow в кластере EKS, запустите deploy.sh сценарий:
    ./kubeflow-deploy.sh

    Развертывание считается успешным, когда все модули в пространстве имен kubeflow переходят в состояние «Работает». Типичный вывод выглядит следующим образом:

    Waiting for all Kubeflow pods to start Running ...
    
    Waiting for all Kubeflow pods to start Running ...
    
    Restarting central dashboard ...
    pod "centraldashboard-79f489b55-vr6lp" deleted
    /kubeflow/deploy/distro/aws/kubeflow-manifests /kubeflow/deploy/distro/aws
    /kubeflow/deploy/distro/aws
    
    Kubeflow deployment succeeded
    Granting cluster access to kubeflow profile user ...
    Argument not provided, assuming default user namespace kubeflow-user-example-com ...
    clusterrolebinding.rbac.authorization.k8s.io/kubeflow-user-example-com-cluster-admin-binding created
    Setting up access to Kubeflow Pipelines ...
    Argument not provided, assuming default user namespace kubeflow-user-example-com ...
    
    Creating pod-default for namespace kubeflow-user-example-com ...
    poddefault.kubeflow.org/access-ml-pipeline created

  5. Для мониторинга состояния подов KubeFlow в отдельном окне можно использовать следующую команду:
    watch kubectl -n kubeflow get pods

  6. Нажмите Ctrl + C когда все модули запущены, откройте панель инструментов Kubeflow за пределами кластера, выполнив следующую команду:
    ./kubeflow-expose.sh

Вы должны увидеть вывод, похожий на следующий код:

root@ip-172-31-43-155:/kubeflow# ./kubeflow-expose.sh
root@ip-172-31-43-155:/kubeflow# Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

Эта команда перенаправляет службу входного шлюза Istio из вашего кластера на локальный порт 8080. Чтобы получить доступ к панели управления Kubeflow, посетите http://localhost:8080 и войдите в систему, используя учетные данные пользователя по умолчанию (user@example.com/12341234). Если вы используете aws-do-kubeflow контейнер в AWS Cloud9, то вы можете выбрать предварительный просмотр, а затем выберите Предварительный просмотр запущенного приложения. Если вы работаете в Docker Desktop, вам может потребоваться запустить ./kubeflow-expose.sh скрипт за пределами aws-do-kubeflow контейнер.

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

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

Чтобы настроить Kubeflow в среде AWS, мы создаем том EFS и блокнот Jupyter.

2.1 Создание тома EFS

Чтобы создать том EFS, выполните следующие действия:

  • На панели инструментов Kubeflow выберите Объемы в навигационной панели.
  • Выбрали Новый том.
  • Что касается Фамилия, войти efs-sc-claim.
  • Что касается Размер тома, войти 10.
  • Что касается Класс хранения, выберите efs-sc.
  • Что касается Режим доступа, выберите ReadWriteOnce.
  • Выберите Создавай.

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

2.2 Создайте блокнот Jupyter

Чтобы создать новую записную книжку, выполните следующие действия:

  • На панели инструментов Kubeflow выберите Ноутбуки в навигационной панели.
  • Выберите Новый блокнот.
  • Что касается Фамилия, войти aws-hybrid-nb.
  • Что касается Изображение докета Jupyter, выберите изображение c9e4w0g3/notebook-servers/jupyter-pytorch:1.11.0-cpu-py38-ubuntu20.04-e3-v1.1 (последнее доступное изображение DLC jupyter-pytorch).
  • Что касается ЦП, войти 1.
  • Что касается Память, войти 5.
  • Что касается Графические процессоры, оставить как Ничто.
  • Не вносите никаких изменений в Объем рабочей области .
  • В Объемы данных раздел, выбрать Прикрепить существующий том и разверните раздел Существующий том
  • Что касается Фамилия, выберите efs-sc-claim.
  • Что касается Путь монтирования, войти /home/jovyan/efs-sc-claim.
    Это монтирует том EFS в модуль ноутбука Jupyter, и вы можете увидеть папку efs-sc-claim в интерфейсе лаборатории Jupyter. Вы сохраняете обучающий набор данных и обучающий код в эту папку, чтобы обучающие кластеры могли получить к ним доступ без необходимости перестраивать образы контейнеров для тестирования.Создавайте гибкие и масштабируемые архитектуры распределенного обучения с помощью Kubeflow на AWS и Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  • Выберите Разрешить доступ к пайплайнам Kubeflow в разделе Конфигурация.
  • Выберите Презентация.
    Убедитесь, что ваш блокнот успешно создан (это может занять пару минут).Создавайте гибкие и масштабируемые архитектуры распределенного обучения с помощью Kubeflow на AWS и Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.
  • На Ноутбуки выберите страницу Свяжитесь для входа в среду JupyterLab.
  • На идти Меню, выберите Клонировать репозиторий.
  • Что касается Клонировать репозиторий, войти https://github.com/aws-samples/aws-do-kubeflow.
    Создавайте гибкие и масштабируемые архитектуры распределенного обучения с помощью Kubeflow на AWS и Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

3. Запустите распределенное обучение

После того, как вы настроите блокнот Jupyter, вы можете запустить всю демонстрацию, используя следующие высокоуровневые шаги из папки aws-do-kubeflow/workshop в клонированном репозитории:

  • Сценарий обучения PyTorch Distributed Data Parallel (DDP): Обратитесь к учебному сценарию PyTorch DDP cifar10-distributed-gpu-final.py, который включает пример сверточной нейронной сети и логику для распределения обучения на многоузловом кластере ЦП и ГП. (Подробности см. в 3.1)
  • Установить библиотеки: Запустите блокнот 0_initialize_dependencies.ipynb для инициализации всех зависимостей. (Подробности см. в 3.2)
  • Запустите обучение работе с распределенным PyTorch в Kubernetes: Запустите блокнот 1_submit_pytorchdist_k8s.ipynb для создания и отправки распределенного обучения в одном основном и двух рабочих контейнерах с использованием пользовательского ресурса Kubernetes PyTorchJob YAML-файла с использованием кода Python. (Подробности см. в 3.3)
  • Создайте гибридный конвейер Kubeflow: Запустите блокнот 2_create_pipeline_k8s_sagemaker.ipynb для создания гибридного конвейера Kubeflow, который запускает распределенное обучение на SageMaker или Amazon EKS с использованием переменной среды выполнения training_runtime. (Подробности см. в 3.4)

Убедитесь, что вы запустили блокнот 1_submit_pytorchdist_k8s.ipynb прежде чем начать блокнот 2_create_pipeline_k8s_sagemaker.ipynb.

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

3.1 Учебный сценарий PyTorch Distributed Data Parallel (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

Мы используем факел DataLoader, который объединяет набор данных и DistributedSampler (загружает подмножество данных распределенным образом, используя torch.nn.parallel.DistributedDataParallel) и предоставляет итератор для одного или нескольких процессов над данными:

# Define data loader for training dataset
def _get_train_data_loader(batch_size, training_dir, is_distributed):
logger.info("Get train data loader")

train_set = torchvision.datasets.CIFAR10(root=training_dir,
train=True,
download=False,
transform=_get_transforms())

train_sampler = (
torch.utils.data.distributed.DistributedSampler(train_set) if is_distributed else None
)

return torch.utils.data.DataLoader(
train_set,
batch_size=batch_size,
shuffle=train_sampler is None,
sampler=train_sampler)
...

Если в обучающем кластере есть графические процессоры, сценарий запускает обучение на устройствах 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)

...

3.2 Установка библиотек

Вы установите все необходимые библиотеки для запуска примера распределенного обучения PyTorch. Сюда входят SDK Kubeflow Pipelines, SDK Training Operator Python, клиент Python для Kubernetes и SDK Amazon SageMaker Python.

#Please run the below commands to install necessary libraries

!pip install kfp==1.8.4

!pip install kubeflow-training

!pip install kubernetes

!pip install sagemaker

3.3 Запустите обучение работе с распределенным PyTorch в Kubernetes

Записная книжка 1_submit_pytorchdist_k8s.ipynb создает YAML-файл пользовательского ресурса Kubernetes PyTorchJob, используя обучение Kubeflow и пакет SDK Python для клиента Kubernetes. Ниже приведены несколько важных фрагментов из этой записной книжки.

Мы создаем PyTorchJob YAML с основным и рабочим контейнерами, как показано в следующем коде:

# Define PyTorchJob custom resource manifest
pytorchjob = V1PyTorchJob(
api_version="kubeflow.org/v1",
kind="PyTorchJob",
metadata=V1ObjectMeta(name=pytorch_distributed_jobname,namespace=user_namespace),
spec=V1PyTorchJobSpec(
run_policy=V1RunPolicy(clean_pod_policy="None"),
pytorch_replica_specs={"Master": master,
"Worker": worker}
)
)

Это передается в плоскость управления Kubernetes с помощью PyTorchJobClient:

# Creates and Submits PyTorchJob custom resource file to Kubernetes
pytorchjob_client = PyTorchJobClient()

pytorch_job_manifest=pytorchjob_client.create(pytorchjob):

Просмотр журналов обучения Kubernetes

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

3.4 Создание гибридного конвейера Kubeflow

Записная книжка 2_create_pipeline_k8s_sagemaker.ipynb создает гибридный конвейер Kubeflow на основе условной переменной времени выполнения training_runtime, как показано в следующем коде. В ноутбуке используется Пакет SDK для Kubeflow Pipelines и он предоставил набор пакетов Python для указания и запуска конвейеров рабочего процесса ML. В рамках этого SDK мы используем следующие пакеты:

  • Декоратор пакетов предметно-ориентированного языка (DSL) dsl.pipeline, который украшает функции Python, чтобы возвращать конвейер
  • Ассоциация dsl.Condition пакет, который представляет собой группу операций, которые выполняются только при выполнении определенного условия, например проверка training_runtime ценность как sagemaker or kubernetes

Смотрите следующий код:

# Define your training runtime value with either 'sagemaker' or 'kubernetes'
training_runtime='sagemaker'

# Create Hybrid Pipeline using Kubeflow PyTorch Training Operators and Amazon SageMaker Service
@dsl.pipeline(name="PyTorch Training pipeline", description="Sample training job test")
def pytorch_cnn_pipeline():

# Pipeline Step 1: to evaluate the condition. You can enter any logic here. For demonstration we are checking if GPU is needed for training
condition_result = check_condition_op(training_runtime)

# Pipeline Step 2: to run training on Kuberentes using PyTorch Training Operators. This will be executed if gpus are not needed
with dsl.Condition(condition_result.output == 'kubernetes', name="PyTorch_Comp"):
train_task = pytorch_job_op(
name=training_job_name,
namespace=user_namespace,
master_spec=json.dumps(master_spec_loaded), # Please refer file at pipeline_yaml_specifications/pipeline_master_spec.yml
worker_spec=json.dumps(worker_spec_loaded), # Please refer file at pipeline_yaml_specifications/pipeline_worker_spec.yml
delete_after_done=False
).after(condition_result)

# Pipeline Step 3: to run training on SageMaker using SageMaker Components for Pipeline. This will be executed if gpus are needed
with dsl.Condition(condition_result.output == 'sagemaker', name="SageMaker_Comp"):
training = sagemaker_train_op(
region=region,
image=train_image,
job_name=training_job_name,
training_input_mode=training_input_mode,
hyperparameters='{ 
"backend": "'+str(pytorch_backend)+'", 
"batch-size": "64", 
"epochs": "3", 
"lr": "'+str(learning_rate)+'", 
"model-type": "custom", 
"sagemaker_container_log_level": "20", 
"sagemaker_program": "cifar10-distributed-gpu-final.py", 
"sagemaker_region": "us-west-2", 
"sagemaker_submit_directory": "'+source_s3+'" 
}',
channels=channels,
instance_type=instance_type,
instance_count=instance_count,
volume_size=volume_size,
max_run_time=max_run_time,
model_artifact_path=f's3://{bucket_name}/jobs',
network_isolation=network_isolation,
traffic_encryption=traffic_encryption,
role=role,
vpc_subnets=subnet_id,
vpc_security_group_ids=security_group_id
).after(condition_result)

Мы настраиваем распределенное обучение SageMaker, используя два экземпляра ml.p3.2xlarge.

После определения конвейера его можно скомпилировать в соответствии со спецификацией Argo YAML с помощью SDK Kubeflow Pipelines. kfp.compiler упаковка. Вы можете запустить этот конвейер с помощью клиента Kubeflow Pipeline SDK, который вызывает конечную точку службы 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="kubeflow")

# 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.

Если вы получите sagemaker import ошибка, запустите !pip install sagemaker и перезапустите ядро ​​(на ядро Меню, выберите Перезапустить ядро).

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

Повторите шаг создания конвейера с training_runtime='kubernetes' для тестирования конвейера в среде Kubernetes. training_runtime переменная также может быть передана в конвейер CI/CD в производственном сценарии.

Просмотрите журналы запуска конвейера Kubeflow для компонента SageMaker.

На следующем снимке экрана показаны детали конвейера для компонента SageMaker.

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

Выберите шаг задания обучения и на Журналы выберите ссылку «Журналы CloudWatch», чтобы получить доступ к журналам SageMaker.

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

На следующем снимке экрана показаны журналы CloudWatch для каждого из двух экземпляров ml.p3.2xlarge.

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

Выберите любую из групп, чтобы просмотреть журналы.

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

Просмотрите журналы выполнения конвейера Kubeflow для компонента Kubeflow PyTorchJob Launcher.

На следующем снимке экрана показаны детали конвейера для нашего компонента Kubeflow.

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

Запустите следующие команды, используя Kubectl в вашей клиентской оболочке Kubernetes, подключенной к кластеру Kubernetes, чтобы просмотреть журналы (замените свое пространство имен и имена модулей):

kubectl get pods -n kubeflow-user-example-com
kubectl logs  -n kubeflow-user-example-com -f

4.1 Очистить

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

  1. Удалите установку Kubeflow, запустив ./kubeflow-remove.sh в aws-do-kubeflow контейнер. Первый набор команд является необязательным и может использоваться в том случае, если у вас еще нет командной оболочки. aws-do-kubeflow контейнер открыт.
    cd aws-do-kubeflow
    ./status.sh
    ./start.sh
    ./exec.sh
    
    ./kubeflow-remove.sh

  2. Из издания aws-do-eks контейнер, удалите том EFS. Первый набор команд является необязательным и может использоваться в том случае, если у вас еще нет командной оболочки. aws-do-eks контейнер открыт.
    cd aws-do-eks
    ./status.sh
    ./start.sh
    ./exec.sh
    
    cd /eks/deployment/csi/efs
    ./delete.sh
    ./efs-delete.sh

    Удаление Amazon EFS необходимо, чтобы освободить сетевой интерфейс, связанный с VPC, который мы создали для нашего кластера. Обратите внимание, что удаление тома EFS уничтожает все хранящиеся на нем данные.

  3. Из издания aws-do-eks контейнер, запустить eks-delete.sh скрипт для удаления кластера и любых других связанных с ним ресурсов, включая VPC:
    cd /eks
    ./eks-delete.sh

Обзор

В этом посте мы обсудили некоторые типичные проблемы обучения распределенной модели и рабочих процессов машинного обучения. Мы представили обзор дистрибутива Kubeflow на AWS и поделились двумя проектами с открытым исходным кодом (оу-до-экс и aws-do-kubeflow), которые упрощают подготовку инфраструктуры и развертывание на ней Kubeflow. Наконец, мы описали и продемонстрировали гибридную архитектуру, которая позволяет рабочим нагрузкам плавно переключаться между работой в самоуправляемой инфраструктуре Kubernetes и полностью управляемой инфраструктурой SageMaker. Мы рекомендуем вам использовать эту гибридную архитектуру для ваших собственных вариантов использования.

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

Особая благодарность Sree Arasanagatta (менеджер по разработке программного обеспечения AWS ML) и Suraj Kota (инженер по разработке программного обеспечения) за их поддержку при запуске этого поста.


Об авторах

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

Создавайте гибкие и масштабируемые архитектуры распределенного обучения с помощью Kubeflow на AWS и Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Гаутам Кумар — инженер-программист в AWS AI Deep Learning. Он разработал AWS Deep Learning Containers и AWS Deep Learning AMI. Он увлечен созданием инструментов и систем для ИИ. В свободное время любит кататься на велосипеде и читать книги.

Создавайте гибкие и масштабируемые архитектуры распределенного обучения с помощью Kubeflow на AWS и Amazon SageMaker PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Алекс Янкульский является комплексным архитектором программного обеспечения и инфраструктуры, который любит выполнять глубокую практическую работу. В настоящее время он является главным архитектором решений для самоуправляемого машинного обучения в AWS. В своей роли он фокусируется на помощи клиентам в контейнеризации и оркестрации рабочих нагрузок машинного обучения и искусственного интеллекта в сервисах AWS на базе контейнеров. Он также является автором открытого исходного кода. Сделать фреймворк и капитан Docker, который любит применять контейнерные технологии для ускорения темпов инноваций при решении самых больших мировых проблем. В течение последних 10 лет Алекс работал над борьбой с изменением климата, демократизацией ИИ и машинного обучения, повышением безопасности путешествий, улучшением здравоохранения и повышением энергоэффективности.

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

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