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

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

Сьогодні багато клієнтів AWS створюють готові для підприємства платформи машинного навчання (ML). Послуга Amazon Elastic Kubernetes (Amazon EKS) за допомогою Kubeflow на AWS (дистрибутив Kubeflow для AWS) у багатьох варіантах використання, зокрема комп’ютерне бачення, розуміння природної мови, переклад мовлення та фінансове моделювання.

З останній випуск Kubeflow з відкритим кодом v1.6.1, спільнота Kubeflow продовжує підтримувати це широкомасштабне впровадження Kubeflow для корпоративних випадків. Останній випуск включає багато нових захоплюючих функцій, як-от підтримку Kubernetes v1.22, об’єднаний Python SDK для PyTorch, MXNet, MPI, XGBoost у розподіленому Training Operator Kubeflow, нові CRD ClusterServingRuntime і ServingRuntime для служби моделі та багато іншого.

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

У цій публікації ми обговорюємо нові функції Kubeflow на AWS версії 1.6.1 і висвітлюємо три важливі інтеграції, які були об’єднані на одній платформі, щоб запропонувати вам:

  • Інфраструктура як код (IaaC) – рішення одним клацанням миші, яке автоматизує наскрізне встановлення Kubeflow, включаючи створення кластера EKS
  • Підтримка розподіленого навчання на Amazon SageMaker використання Оператори Amazon SageMaker для Kubernetes (ACK) і Компоненти SageMaker для конвеєрів Kubeflow і локально на Kubernetes за допомогою Навчання операторів Kubeflow. Багато клієнтів використовують цю можливість для створення гібридних архітектур машинного навчання, де вони використовують як обчислення Kubernetes для етапу експериментів, так і SageMaker для виконання робочих навантажень у виробничому масштабі.
  • Покращений моніторинг і спостереження для робочих навантажень ML, включаючи 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 PrivateLink для Amazon S3, що дозволяє некомерційним користувачам Регіону підключатися до відповідних кінцевих точок S3.
  • Додана інтеграція з Керована служба Amazon для Prometheus (AMP) і Grafana під керуванням 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: Terraform (IaC)

Це створює кластер EKS і всі пов’язані ресурси інфраструктури AWS, а потім розгортає Kubeflow однією командою за допомогою Terraform. Внутрішньо це використовує креслення EKS і діаграми Helm.

Цей варіант має такі переваги:

  • Він надає підприємствам гнучкість для розгортання Amazon EKS і Kubeflow за допомогою однієї команди, не турбуючись про конкретні конфігурації компонентів Kubeflow. Це надзвичайно допоможе прискорити оцінку технології, створення прототипів і життєвий цикл розробки продукту, забезпечуючи гнучкість використання модулів terraform і модифікації для задоволення будь-яких потреб конкретного проекту.
  • Сьогодні багато організацій, які мають Terraform як центр своєї хмарної стратегії, тепер можуть використовувати Kubeflow на рішенні AWS Terraform для досягнення своїх хмарних цілей.

Варіант 2: налаштувати або діаграми керма:

Цей параметр дозволяє розгортати Kubeflow у двоетапний процес:

  1. Створюйте ресурси AWS, як-от Amazon EKS, Amazon RDS, Amazon S3 і Amazon Cognito, за допомогою автоматизованих сценаріїв, які входять до дистрибутива AWS, або вручну, дотримуючись крок за кроком керівництво.
  2. Встановіть розгортання Kubeflow за допомогою Helm charts або Kustomize.

Цей варіант має такі переваги:

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

Наступна діаграма ілюструє архітектури обох варіантів.

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

Інтеграція з SageMaker

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

Багато клієнтів AWS, які мають вимоги до переносимості або локальні стандартні обмеження, використовують Amazon EKS для налаштування повторюваних конвеєрів машинного навчання, які виконують навчання та робочі навантаження. Однак це вимагає від розробників написання спеціального коду для оптимізації базової інфраструктури машинного навчання, забезпечення високої доступності та надійності та дотримання відповідних вимог щодо безпеки та нормативних вимог. Таким чином, ці клієнти хочуть використовувати SageMaker для економічно оптимізованої та керованої інфраструктури для навчання моделі та розгортання та продовжувати використовувати Kubernetes для оркестровки та конвеєрів ML, щоб зберегти стандартизацію та портативність.

Щоб задовольнити цю потребу, AWS дозволяє навчати, налаштовувати та розгортати моделі в SageMaker від Amazon EKS, використовуючи такі два параметри:

  • Оператори ACK Amazon SageMaker для Kubernetes, які базуються на Контролери AWS для Kubernetes (ACK). ACK — це стратегія AWS, яка стандартизує створення користувацьких контролерів Kubernetes, які дозволяють користувачам Kubernetes надавати ресурси AWS, наприклад бази даних або черги повідомлень, просто за допомогою Kubernetes API. Оператори ACK SageMaker спрощують навчання, налаштування та розгортання моделей ML у SageMaker для розробників ML і спеціалістів із обробки даних, які використовують Kubernetes як рівень керування, без входу в консоль 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 Components – Бото3 (AWS SDK для AWS SDK для Python) на основі компонентів версії 1 і SageMaker Operator для K8s (ACK) на основі компонентів версії 2. Нові компоненти SageMaker версії 2 підтримують найновішу програму навчання SageMaker, і ми продовжуватимемо додавати нові функції SageMaker до цієї версії компонента. Однак у вас є можливість комбінувати компоненти Sagemaker версії 2 для навчання та версії 1 для інших функцій SageMaker, таких як налаштування гіперпараметрів, завдання обробки, розміщення та багато іншого.

Інтеграція з Prometheus і Grafana

Prometheus — це інструмент агрегації показників із відкритим кодом, який можна налаштувати для роботи в кластерах Kubernetes. Під час роботи на кластерах Kubernetes головний сервер Prometheus періодично сканує кінцеві точки модулів.

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

Ці показники можуть бути агреговані сервером Prometheus, який працює в кластері Kubernetes, і запитувати їх за допомогою мови запитів Prometheus (PromQL). Щоб дізнатися більше про функції, які підтримує Prometheus, перегляньте Документація Prometheus.

Дистрибутив Kubeflow на AWS забезпечує підтримку інтеграції з такими керованими сервісами AWS:

  1. Amazon Managed Prometheus (AMP), тобто a Прометей-сумісна служба моніторингу інфраструктури контейнерів і метрик додатків для контейнерів, що полегшує клієнтам безпечний моніторинг середовища контейнерів у масштабі. Використовуючи AMP, ви можете візуалізувати, аналізувати та сповіщати про свої показники, журнали та трасування, зібрані з багатьох джерел даних у вашій системі спостережуваності, включаючи AWS, сторонні постачальники програмного забезпечення та інші ресурси у вашому ІТ-портфоліо.
  2. Amazon Managed Grafana, повністю керована та безпечна служба візуалізації даних на основі відкритого коду 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 vanilla за допомогою параметра встановлення Terraform. Після завершення інсталяції ми входимо в інформаційну панель Kubeflow. З інформаційної панелі ми запускаємо сервер ноутбуків Kubeflow Jupyter для створення конвеєра Kubeflow, який використовує SageMaker для запуску розподіленого навчання для моделі класифікації зображень і кінцевої точки SageMaker для розгортання моделі.

Передумови

Переконайтеся, що ви відповідаєте таким умовам:

  • У вас є Обліковий запис AWS.
  • Переконайтеся, що ви в us-west-2 Регіон для запуску цього прикладу.
  • Використовуйте Google Chrome для взаємодії з Консоль управління AWS і Kubeflow.
  • Переконайтеся, що у вашому обліковому записі обмеження типу ресурсу SageMaker Training для ml.p3.2xlarge збільшено до 2 за допомогою консолі Service Quotas.
  • За бажанням можна використовувати AWS Cloud9, хмарне інтегроване середовище розробки (IDE), яке дозволяє виконувати всю роботу з веб-браузера. Інструкції з налаштування див Налаштуйте Cloud9 IDE. Виберіть Ubuntu Server 18.04 як платформу в налаштуваннях AWS Cloud9.Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Потім у вашому середовищі 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

У наведеному нижче виводі переконайтеся, що ви бачите arn користувача адміністратора, якого ви налаштували в профілі 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. Вертикальний пошук. Ai.
  3. Виберіть піктограму в кутку інформаційної панелі Kubeflow, щоб відкрити її як окрему вкладку в Chrome.
  4. Введіть облікові дані за замовчуванням (user@example.com/12341234), щоб увійти на інформаційну панель Kubeflow.Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Налаштуйте Kubeflow у середовищі AWS

Увійшовши на інформаційну панель Kubeflow, переконайтеся, що у вас правильний простір імен (kubeflow-user-example-com) обрано. Виконайте такі кроки, щоб налаштувати Kubeflow у середовищі AWS:

  1. Виберіть на інформаційній панелі Kubeflow Ноутбуки у навігаційній панелі.
  2. Вибирати Новий ноутбук.
  3. для ІМ'Я, введіть aws-nb.
  4. для Зображення докета Юпітера, виберіть зображення 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. Вертикальний пошук. Ai.
  9. Select Дозволити доступ до Kubeflow Pipelines в Конфігурації і виберіть Запустити.Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.
  10. Переконайтеся, що блокнот створено успішно (це може зайняти кілька хвилин).Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.
  11. Вибирати З'єднуватися щоб увійти в JupyterLab.
  12. Клонуйте репо, ввівши https://github.com/aws-samples/eks-kubeflow-cloudformation-quick-start.git в Клонуйте репо поле.
  13. Вибирати Клон.Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Запустіть приклад розподіленого навчання

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

  1. Запустіть навчальний скрипт PyTorch Distributed Data Parallel (DDP). – Зверніться до сценарію навчання PyTorch DDP cifar10-distributed-gpu-final.py, який включає зразок згорткової нейронної мережі та логіку для розподілу навчання на багатовузловому кластері CPU та GPU.
  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 на пристроях GPU або екземплярах CPU. Давайте розглянемо кілька важливих аспектів навчального сценарію, перш ніж запускати наші приклади блокнотів.

Ми використовуємо 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 клас використовується як обгортка об’єкта моделі, що дозволяє синхронно розподілене навчання на кількох машинах. Вхідні дані розбиваються на розміри партії, і копія моделі розміщується на кожній машині та кожному пристрої. Перегляньте наступний код:

model = Net().to(device)

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

...

Створіть конвеєр Kubeflow

Блокнот використовує Kubeflow Pipelines SDK і наданий набір пакетів Python для визначення та запуску конвеєрів робочого циклу машинного навчання. Як частину цього 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 за допомогою Kubeflow Pipelines SDK kfp.compiler пакет. Ви можете запустити цей конвеєр за допомогою клієнта Kubeflow Pipelines 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="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. Вертикальний пошук. Ai.
  3. Виберіть крок навчання роботи і на Logs виберіть посилання на журнали CloudWatch, щоб отримати доступ до журналів SageMaker.
    На наступному знімку екрана показано журнали CloudWatch для кожного з двох екземплярів ml.p3.2xlarge.Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.
  4. Виберіть будь-яку з груп, щоб переглянути журнали.Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.
  5. Захопіть кінцеву точку SageMaker, вибравши Sagemaker – модель розгортання крок і копіювання endpoint_name вихідне значення артефакту.Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Викликати кінцеву точку 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 CLI:
    aws sagemaker delete-endpoint --endpoint-name  --region us-west-2

Підсумки

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

Ми також зробили доступним a приклад трубопроводу що використовує найновіші компоненти SageMaker; ви можете запустити це безпосередньо з інформаційної панелі Kubeflow. Цей конвеєр вимагає Дані Amazon S3 та Роль IAM виконання SageMaker як необхідні вхідні дані.

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


Про авторів

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

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

Увімкнення гібридних робочих процесів машинного навчання на Amazon EKS і Amazon SageMaker за допомогою Kubeflow одним клацанням миші в розгортанні AWS PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Рахул Харсе є інженером із розробки програмного забезпечення в Amazon Web Services. Його робота зосереджена на інтеграції сервісів AWS з контейнерними платформами ML Ops з відкритим кодом для покращення їх масштабованості, надійності та безпеки. Окрім зосередження на запитах клієнтів щодо функцій, Рахул також любить експериментувати з останніми технологічними розробками в цій галузі.

Часова мітка:

Більше від AWS Машинне навчання