Подготовка Kubeflow к ускоренным рабочим нагрузкам глубокого обучения

Настройка кластера Xeon 4-го поколения Kubeflow на AWS для включения рабочих нагрузок глубокого обучения с ускорением oneAPI

Рост глубинного обучения (ГО), подпитываемый достижениями в области вычислительной мощности и доступности данных, позволил обучать более крупные и сложные модели. Эти модели с миллионами или даже миллиардами параметров (рис. 1) могут изучать сложные шаблоны и представления из огромных объемов данных. В результате они достигают беспрецедентной точности и производительности в различных задачах, включая классификацию изображений, обработку естественного языка и распознавание речи.

Мы можем обратиться к таким инструментам, как Kubeflow, для решения задач обучения и развертывания этих мощных моделей. Kubeflow — это платформа машинного обучения (ML) с открытым исходным кодом, построенная на Kubernetes. Хотя Kubeflow предлагает полный набор функций для выполнения рабочих нагрузок машинного обучения, необходимо учитывать еще один параметр — оборудование, на котором выполняются эти рабочие нагрузки. Специализированные аппаратные ускорители Intel для DL, такие как AVX-512 и AMX (рис. 2), повышают производительность и эффективность этих рабочих нагрузок.

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

В этой статье будет рассмотрен процесс запуска и запуска Kubeflow на Amazon Web Services (AWS) с использованием оборудования Intel. Мы подробно рассмотрим шаги, необходимые для использования возможностей аппаратных ускорителей Intel в развертываниях Kubeflow.

Настройка Kubeflow на AWS

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

  1. Мы начнем с клонирования репозитория AWS Kubeflow.
export KUBEFLOW_RELEASE_VERSION=v1.6.1
export AWS_RELEASE_VERSION=v1.6.1-aws-b1.0.1
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

2. Загрузите сценарий установки Miniconda (wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh) и запустите его, чтобы начать установку.

3. После установки Miniconda создайте и активируйте среду Conda:

conda create -n env python==3.8.10
conda activate env

4. Псевдоним Python alias python=python3.8. Этот псевдоним ожидается сценариями make.

5. Внутри каталога kubeflow-manifests запустите сценарий make, чтобы начать установку необходимых зависимостей make install-tools.

6. Настройте учетные данные AWS, запустив aws configure и предоставив свои пользовательские ключи AWS.

7. Запустите кластер с помощью Elastic Kubernetes Service (EKS). Мы запустим наш кластер EKS с помощью yaml-скрипта CloudFormation ClusterConfig. Конфигурация определяет группу узлов из пяти экземпляров r7iz.4xlarge EC2 (16vCPU 128GiB RAM — Xeon 4-го поколения). Мы также выделяем 100 ГБ объемного хранилища для каждого узла в кластере.

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: "kubeflow-icom-cv"
  version: "1.22"
  region: "us-east-1"

vpc:
  subnets:
    private:
      us-east-1a: { id: your-subnet-id }
      us-east-1b: { id: your-subnet-id }
    public:
      us-east-1a: { id: your-subnet-id }
      us-east-1b: { id: your-subnet-id }

managedNodeGroups:
- name: "kubeflow-icom-cv-mng"
  desiredCapacity: 5
  volumeSize: 100
  instanceType: "r7iz.4xlarge"

Для запуска кластера запустите eksctl create cluster -f cluster.yaml. Этот процесс может занять 10–15 минут, чтобы предоставить все службы и ресурсы для поддержки вашего кластера EKS.

8. Экспортируйте переменные среды CLUSTER_NAME и CLUSTER_REGION. Следующие шаги будут искать эти переменные для выполнения различных автоматических шагов.

export CLUSTER_NAME=kubeflow-icom-cv-2
export CLUSTER_REGION=us-east-1

9. Создайте поставщика OIDC для предоставления услуг проверки подлинности для вашего кластера.

eksctl utils associate-iam-oidc-provider --cluster $CLUSTER_NAME --region $CLUSTER_REGION --approve

Совет. Чтобы получить имя кластера, запуститеeksctl get cluster.

10. Используйте Kustomize, чтобы установить Kubeflow и выполнить обычное развертывание Kubeflow. Пожалуйста, обратитесь к документации Kubeflow для других типов развертывания.

make deploy-kubeflow INSTALLATION_OPTION=kustomize DEPLOYMENT_OPTION=vanilla

11. Убедитесь, что все модули, связанные с Kubeflow, запущены и работают. Вы увидите пространство имен под названием «kubeflow-user-example-com»:

kubectl get pods -n cert-manager
kubectl get pods -n istio-system
kubectl get pods -n auth
kubectl get pods -n knative-eventing
kubectl get pods -n knative-serving
kubectl get pods -n kubeflow
kubectl get pods -n kubeflow-user-example-com

12. Как упоминалось ранее, AWS Kubeflow допускает интеграцию с сервисами, управляемыми AWS. Этот шаг настроит EFS для включения подключения тома PVC к ресурсам Kubeflow.

Находясь в папке kubeflow-manifests, экспортируйте следующие переменные среды, чтобы упростить настройку EFS:

export GITHUB_ROOT=$(pwd)
export GITHUB_STORAGE_DIR="$GITHUB_ROOT/deployments/add-ons/storage/"
export PVC_NAMESPACE=kubeflow-user-example-com
export CLAIM_NAME=<your-efs-claim-name-here>

Запустите автоматическую настройку:

cd $GITHUB_ROOT/tests/e2e
pip install -r requirements.txt
export SECURITY_GROUP_TO_CREATE=$CLAIM_NAME
python utils/auto-efs-setup.py --region $CLUSTER_REGION --cluster $CLUSTER_NAME --efs_file_system_name $CLAIM_NAME --efs_security_group_name $SECURITY_GROUP_TO_CREATE

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

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

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

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

  1. В среде, которую вы использовали для настройки Kubeflow, запустите make port-forward, находясь в папке kubeflow-manifests. Это должно автоматически использовать порт 8080 на локальном хосте (рис. 3). Чтобы изменить это, отредактируйте настройки скрипта make для инструкции переадресации портов.

2. Откройте локальный терминал или командную строку и выполните следующую команду. Это похоже на SSH-подключение к экземпляру EC2, за исключением того, что вы прослушиваете порт 8080 на порту 8080 на вашем локальном компьютере.

ssh -i <path-to-your-key-pem> -L 8080:localhost:8080 -N ubuntu@ec2-<Public-IPv4-DNS>.compute-1.amazonaws.com -o ExitOnForwardFailure=yes

3. Откройте локальный браузер и перейдите по адресу http://localhost:8080/. Если вы не изменили учетные данные в ванильном развертывании, вы можете использовать имя пользователя [email protected] и пароль 12341234. Теперь вы должны увидеть домашнюю панель пользовательского интерфейса Kubeflow (рис. 4).

Настройка тома EFS

AWS EFS (Elastic File System) — это масштабируемая, полностью управляемая служба хранения файлов. Тома EFS обеспечивают постоянное общее хранилище для наших проектов Kubeflow. Это особенно важно, если мы хотим выполнять распределенные учебные нагрузки. Мы создадим том для этого руководства и прикрепим его к нашему примеру проекта ноутбука.

  1. Перейдите к модулю «Тома» и выберите «Новый том» (рис. 5).

2. Вам будет предложено указать следующие параметры (рис. 6):

  • Имя:вы можете сделать это как хотите.
  • Пространство имен: по умолчанию будет использоваться пространство имен, в котором в настоящее время работает наш пользовательский интерфейс Kubeflow.
  • Размер тома в ги. Укажите желаемую емкость хранилища.
  • Класс хранилища. Выберите efs-sc для EFS или gp2 для эластичного блочного хранилища. Если вам интересно, вы можете узнать о разнице здесь.
  • Режим доступа. Выберите права доступа.

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

Настройка среды ноутбука

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

  1. Перейдите к модулю «Записные книжки» и выберите «Новая записная книжка» (рис. 6).

2. Вам будет предложено указать следующие параметры (рис. 7, 8 и 9):

  • Имя: сделайте это по своему усмотрению.
  • Пространство имен: записные книжки будут работать как модули в среде Kubernetes, поэтому вы должны выбрать, в каком пространстве имен запускать этот модуль. Не стесняйтесь оставить его по умолчанию «kubeflow-user-example-com» для руководства.
  • Образ Docker. Вы можете предоставить собственный образ для репозитория образов или выбрать образ по умолчанию. Мы выберем AMI PyTorch по умолчанию от AWS.
  • ЦП/ОЗУ.Укажите ограничения на использование ЦП и памяти для запросов. В нашем экземпляре r7iz.4xlarge в нашем распоряжении 16 виртуальных ЦП и 128 ГБ ОЗУ. Мы ограничили запросы до 14 потоков и 120 ГиБ (~90%). Это должно дать нашему ноутбуку много ресурсов, зарезервировав при этом вычислительные ресурсы и потоки для других фоновых задач.

  • Графические процессоры. Если вы подготовили графические процессоры, вы можете выбрать их здесь, но это выходит за рамки данного руководства.
  • Объем рабочей области. Это объем хранилища для среды вашего ноутбука. Обратите внимание, что он отличается от EFS, который мы настроили в предыдущем разделе. Для проектов машинного обучения рекомендуется выделить не менее 64 ГиБ, чтобы у вас было достаточно места для зависимостей и кода.

  • Тома данных. Здесь вы можете подключить том EFS, созданный на предыдущем шаге. В раскрывающемся списке выберите созданный нами том EFS. Мы рекомендуем отредактировать путь подключения к имени папки, чтобы оно соответствовало имени вашего тома EFS, чтобы избежать путаницы.

3. Нажав «Запустить», вы вернетесь на панель инструментов Notebook. Когда ваш ноутбук будет готов к запуску, нажмите «подключиться», и должна открыться новая вкладка браузера с вашей лабораторной средой Jupyter (рис. 10).

Пример кода для запуска в вашей новой среде

После всей этой настройки вы можете начать запускать свои первые рабочие нагрузки в своей среде Kubeflow. Не забудьте объединить стандартные платформы DL, такие как TensorFlow и PyTorch, с их соответствующими расширениями Intel (Intel Extension of PyTorch и Intel Extension of Tensorflow), чтобы в полной мере воспользоваться предоставленной нами вычислительной инфраструктурой. Если у вас еще нет подготовленной рабочей нагрузки, вот несколько демонстраций, которые вы можете запустить, чтобы протестировать возможности вашей инфраструктуры Kubernetes на базе Xeon 4-го поколения:

Совет. Всегда учитывайте расходы на облачные службы и отключайте ресурсы, когда они вам больше не нужны.

Резюме и обсуждение

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

Интеграция Kubeflow с аппаратными ускорителями Intel в облаке представляет собой мощное решение для реализации базовых моделей машинного обучения. Kubeflow предоставляет масштабируемое и портативное решение для развертывания, управления и масштабирования рабочих нагрузок машинного обучения. Используя специальные инструкции ЦП Intel для машинного и машинного обучения, такие как AVX-512 и AMX, специалисты по машинному обучению могут раскрыть повышенную вычислительную мощность и оптимизировать свои рабочие процессы, что приводит к более быстрому обучению модели и более эффективному выводу. Интеграция Kubeflow, AWS и оборудования Intel открывает новые возможности для масштабируемого операционного машинного обучения.

Не забудьте подписаться на мой профиль, чтобы увидеть больше статей вот так!