Подготовка 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.
- Мы начнем с клонирования репозитория 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 в нашем локальном браузере.
- В среде, которую вы использовали для настройки 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. Это особенно важно, если мы хотим выполнять распределенные учебные нагрузки. Мы создадим том для этого руководства и прикрепим его к нашему примеру проекта ноутбука.
- Перейдите к модулю «Тома» и выберите «Новый том» (рис. 5).
2. Вам будет предложено указать следующие параметры (рис. 6):
- Имя:вы можете сделать это как хотите.
- Пространство имен: по умолчанию будет использоваться пространство имен, в котором в настоящее время работает наш пользовательский интерфейс Kubeflow.
- Размер тома в ги. Укажите желаемую емкость хранилища.
- Класс хранилища. Выберите efs-sc для EFS или gp2 для эластичного блочного хранилища. Если вам интересно, вы можете узнать о разнице здесь.
- Режим доступа. Выберите права доступа.
Вы можете использовать ту же конфигурацию для этого руководства, но вам нужно будет определить, что лучше всего подходит для ваших нужд. Мы выбираем EFS, потому что ее можно подключить к нескольким экземплярам, что дает нам гибкий доступ к файлам и данным в нескольких проектах или узлах во время распределенного обучения.
Настройка среды ноутбука
Как специалисты по данным и инженеры по машинному обучению, мы привыкли работать в ноутбуках Jupyter, особенно для разработки моделей и обработки/исследования данных. Созданная нами среда Kubeflow предоставит нам надежную вычислительную инфраструктуру для различных задач.
- Перейдите к модулю «Записные книжки» и выберите «Новая записная книжка» (рис. 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-го поколения:
- Улучшение взаимодействия человека и ИИ с помощью более доступного глубокого обучения
Расширение Intel для PyTorch для точной настройки базовой модели BERT из библиотеки Hugging Face Transformers для обучения и развертывания быстрой и точной системы ИИ для прогнозирования Намерения и сущности пользователя, запрашивающего информацию об авиаперелетах. - Ускоренная сегментация изображений с помощью PyTorch
Определение дорог и ограничений скорости по спутниковым снимкам на недавно выпущенном масштабируемом процессоре Intel Xeon 4-го поколения. - Оптимизация обучения PyTorch с расширенными матричными расширениями Bfloat16
Обучение модели ResNet50 с использованием набора данных CIFAR10 при использовании расширения Intel для PyTorch. - Обучение Intel TensorFlow AMX BF16
Обучение модели DistilBERT с использованием Intel Optimization for TensorFlow.
Совет. Всегда учитывайте расходы на облачные службы и отключайте ресурсы, когда они вам больше не нужны.
Резюме и обсуждение
В этом руководстве представлено практическое руководство по настройке Kubeflow на AWS для использования аппаратных ускорителей Intel. Следуя пошаговым инструкциям, специалисты по машинному обучению могут быстро развернуть Kubeflow, получить доступ к пользовательскому интерфейсу Kubeflow и настроить основные компоненты, такие как том EFS и среда ноутбука.
Интеграция Kubeflow с аппаратными ускорителями Intel в облаке представляет собой мощное решение для реализации базовых моделей машинного обучения. Kubeflow предоставляет масштабируемое и портативное решение для развертывания, управления и масштабирования рабочих нагрузок машинного обучения. Используя специальные инструкции ЦП Intel для машинного и машинного обучения, такие как AVX-512 и AMX, специалисты по машинному обучению могут раскрыть повышенную вычислительную мощность и оптимизировать свои рабочие процессы, что приводит к более быстрому обучению модели и более эффективному выводу. Интеграция Kubeflow, AWS и оборудования Intel открывает новые возможности для масштабируемого операционного машинного обучения.
Не забудьте подписаться на мой профиль, чтобы увидеть больше статей вот так!