Представляем Amazon SageMaker HyperPod для масштабированного обучения базовых моделей

Познакомьтесь с Amazon SageMaker HyperPod для масштабированного обучения основных моделей

Для создания моделей основ фундамента (FMs) необходимо создавать, поддерживать и оптимизировать большие кластеры для обучения моделей с десятками или сотнями миллиардов параметров на огромных объемах данных. Создание устойчивой среды, способной справляться с отказами и изменениями окружающей среды, не теряя дни или недели прогресса обучения моделей, является операционной задачей, требующей реализации масштабирования кластера, превентивного мониторинга состояния здоровья, сохранения контрольных точек задач и автоматического возобновления обучения при возникновении сбоев или проблем.

Мы рады сообщить, что Amazon SageMaker HyperPod теперь доступен для обучения моделей основы фундамента с тысячами акселераторов до 40% быстрее, предоставляя высокоустойчивую среду обучения, и устраняя работу с крупномасштабными обучающими кластерами, не связанную с компьютерной работой. С помощью SageMaker HyperPod практикующие машинное обучение (ML) могут обучать FMs в течение недель и месяцев без прерывания и без необходимости иметь дело с проблемами отказа оборудования.

Компании, такие как Stability AI, используют SageMaker HyperPod для обучения своих моделей основы фундамента, включая Stable Diffusion.

«Как ведущая компания с открытым исходным кодом для генеративного ИИ, нашей целью является максимальная доступность современного ИИ. Мы создаем модели основы фундамента с десятками миллиардов параметров, требующих инфраструктуры для оптимального масштабирования производительности обучения. Благодаря управляемой инфраструктуре и библиотекам оптимизации SageMaker HyperPod мы можем сократить время и стоимость обучения более чем на 50%. Это делает обучение моделей более устойчивым и эффективным, позволяя создавать современные модели быстрее».

– Эмад Мостак, основатель и CEO Stability AI.

Для создания устойчивого цикла разработки FMs при возникновении сбоев оборудования SageMaker HyperPod помогает создавать кластеры, мониторить их состояние, восстанавливать и заменять неисправные узлы на лету, сохранять частые контрольные точки и автоматически возобновлять обучение без потери прогресса. Кроме того, SageMaker HyperPod предварительно настроен с библиотеками распределенного обучения Amazon SageMaker, включая библиотеку параллельного обучения данных SageMaker (SMDDP) и библиотеку параллельной моделирования SageMaker (SMP), что позволяет улучшить производительность обучения FM путем разделения обучающих данных и моделей на более мелкие части и их параллельной обработки на узлах кластера при полном использовании вычислительных и сетевых ресурсов кластера. SageMaker HyperPod интегрирует Slurm Workload Manager для кластера и оркестрации задач обучения.

Обзор менеджера рабочей нагрузки Slurm

Slurm, ранее известный как Simple Linux Utility for Resource Management, представляет собой планировщик задач для запуска задач на распределенном вычислительном кластере. Он также предоставляет фреймворк для запуска параллельных задач с использованием библиотеки коллективных коммуникаций NVIDIA (NCCL) или стандартов интерфейса передачи сообщений (MPI). Slurm является популярной системой управления ресурсами кластера с открытым исходным кодом, широко используемой в области высокопроизводительных вычислений (HPC) и моделей FM и обучения. SageMaker HyperPod предоставляет простой способ начать работу с кластером Slurm всего за несколько минут.

Ниже приведена общая архитектурная диаграмма того, как пользователи взаимодействуют с SageMaker HyperPod и как различные компоненты кластера взаимодействуют друг с другом и с другими услугами AWS, такими как Amazon FSx для Lustre и Amazon Simple Storage Service (Amazon S3).

Работы Slurm отправляются командами в командной строке. Команды для запуска работ Slurm – srun и sbatch. Команда srun запускает обучающую работу в интерактивном и блокирующем режиме, а sbatch работает в режиме пакетной обработки и неблокирующем режиме. srun обычно используется для выполнения немедленных работ, в то время как sbatch может быть использован для запуска работ позже.

Дополнительную информацию о командах и конфигурации Slurm можно найти в документации по Slurm Workload Manager.

Автоматическое возобновление работы и возможности восстановления

Одна из новых функций SageMaker HyperPod – это возможность автоматического возобновления работ. Ранее, когда рабочий узел выходил из строя во время запуска работы по обучению или точной настройки, от пользователей требовалось проверять статус работы, перезапускать работу с последней точкой сохранения и продолжать отслеживать работу на протяжении всего запуска. С учетом того, что работы по обучению или точной настройке могут выполняться дни, недели, или даже месяцы, это становится дорогостоящим вследствие дополнительных административных затрат пользователей для мониторинга и поддержания работы в случае сбоя узла, а также из-за затрат на простой дорогостоящих вычислительных экземпляров.

SageMaker HyperPod обеспечивает восстановление работы с использованием автоматической проверки состояния, замены узла и восстановления работы. Работы Slurm в SageMaker HyperPod мониторятся с помощью пользовательского плагина Slurm SageMaker, использующего фреймворк SPANK. Когда работа по обучению завершается неудачно, SageMaker HyperPod осуществляет проверку состояния кластера с помощью набора проверок состояния. Если в кластере обнаружено неисправное узел, SageMaker HyperPod автоматически удаляет узел из кластера, заменяет его на исправный узел и перезапускает работу по обучению. При использовании контрольных точек в работах по обучению, любая прерванная или неудавшаяся работа может быть возобновлена с последней контрольной точки.

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

Для развертывания SageMaker HyperPod необходимо сначала подготовить ваше окружение путем настройки вашей виртуальной частной сети Amazon (Amazon VPC) и групп безопасности, развернуть вспомогательные службы, такие как FSx for Lustre, в вашей VPC, и опубликовать ваши скрипты жизненного цикла Slurm в S3-хранилище. Затем вы развертываете и настраиваете SageMaker HyperPod и подключаетесь к главному узлу для запуска ваших рабочих заданий.

Необходимые условия

Перед созданием SageMaker HyperPod вы должны настроить вашу VPC, создать файловую систему FSx for Lustre и создать S3-бакет с вашими желаемыми скриптами жизненного цикла кластера. Также вам потребуется последняя версия командной строки AWS (AWS CLI) и установленный плагин CLI для AWS Session Manager, возможности AWS Systems Manager.

SageMaker HyperPod полностью интегрирован с вашей VPC. Для получения информации о создании новой VPC см. Создание сети по умолчанию VPC или Создание VPC. Чтобы обеспечить бесперебойное соединение с максимальной производительностью между ресурсами, следует создавать все ресурсы в одном регионе и доступной зоне, а также убедиться, что правила группы безопасности позволяют соединение между ресурсами кластера.

Затем вы создаете файловую систему FSx for Lustre. Она будет служить высокопроизводительной файловой системой для использования при обучении моделей. Убедитесь, что группы безопасности FSx for Lustre и кластера разрешают входящее и исходящее общение между ресурсами кластера и файловой системой FSx for Lustre.

Для настройки скриптов жизненного цикла вашего кластера, которые выполняются при возникновении событий, таких как добавление нового экземпляра кластера, вы создаете бакет S3, а затем копируете и при необходимости настраиваете скрипты жизненного цикла по умолчанию. В этом примере мы сохраняем все скрипты жизненного цикла в префиксе бакета lifecycle-scripts.

Сначала загрузите образец скриптов жизненного цикла из репозитория GitHub. Вы должны настроить их по своему усмотрению в соответствии с желаемым поведением кластера.

Затем создайте бакет S3 для хранения настроенных скриптов жизненного цикла.

aws s3 mb s3://<имя_вашего_бакета>

Далее скопируйте скрипты жизненного цикла по умолчанию из локального каталога в желаемый бакет и префикс с помощью aws s3 sync:

aws s3 sync . s3://<имя_вашего_бакета>/lifecycle-scripts

Наконец, для настройки клиента для упрощенного подключения к головному узлу кластера вы должны установить или обновить AWS CLI и установить плагин AWS Session Manager CLI для возможности интерактивного терминального подключения для управления кластером и запуска обучающих заданий.

Вы можете создать кластер SageMaker HyperPod с доступными ресурсами по требованию или запросить бронирование мощности в SageMaker. Чтобы создать бронирование мощности, создайте запрос на увеличение квоты для резервирования определенных типов вычислительных экземпляров и выделения мощности на панели управления Service Quotas.

Настройте ваш тренировочный кластер

Для создания вашего кластера SageMaker HyperPod выполните следующие шаги:

  1. На консоли SageMaker выберите Управление кластерами в разделе HyperPod-кластеры в боковой панели навигации.
  2. Выберите Создать кластер.
  3. Укажите имя кластера и при необходимости любые теги для применения к ресурсам кластера, затем выберите Далее.
  4. Выберите Создать группу экземпляров и укажите имя группы экземпляров, необходимый тип экземпляра, желаемое количество экземпляров, а также бакет S3 и путь с префиксом, куда вы предварительно скопировали свои скрипты жизненного цикла кластера.

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

  1. Сначала создайте группу экземпляров контроллера, которая будет включать головной узел кластера.
  2. Для роли IAM (AWS Identity and Access Management) этой группы экземпляров выберите Создать новую роль и укажите любые бакеты S3, к которым экземпляры кластера в этой группе экземпляров должны иметь доступ.

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

  1. Выберите Создать роль.
  2. Введите имя скрипта, который будет запускаться при каждом создании экземпляра, в диалоговом окне скрипта при создании. В этом примере скрипт при создании называется on_create.sh.
  3. Выберите Сохранить.
  4. Выберите Создать группу экземпляров для создания группы экземпляров работника.
  5. Укажите все запрошенные детали, включая желаемый тип экземпляра и количество.

В этом примере используются четыре экземпляра ускоренного вычисления ml.trn1.32xl для выполнения нашей обучающей задачи. Вы можете использовать ту же роль IAM, что и ранее, или настроить роль для рабочих экземпляров. Аналогично, вы можете использовать другие скрипты жизненного цикла для этой группы экземпляров работника, отличные от предыдущей группы экземпляров.

  1. Выберите Next, чтобы продолжить.
  2. Выберите желаемую VPC, подсеть и группы безопасности для экземпляров вашего кластера.

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

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

  1. Выберите Next.
  2. Ознакомьтесь с обзором сведений о кластере, затем выберите Submit.

Возможно, вам будет интересно создать свой HyperPod SageMaker с помощью AWS CLI. Сначала настройте параметры JSON, используемые для создания кластера:

// create-cluster-slurm-default-vpc.json{   "ClusterName": "sagemaker-demo-cluster",   "InstanceGroups": [        {            "InstanceGroupName": "my-controller-group",            "InstanceType": "ml.m5.xlarge",            "InstanceCount": 1,            "lifecycleConfig": {                "SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",                "OnCreate": "on_create.sh"            },            "ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",            "ThreadsPerCore": 1        },         {            "InstanceGroupName": "worker-group-1",            "InstanceType": "ml.trn1.32xlarge",            "InstanceCount": 4,            "lifecycleConfig": {                "SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",                "OnCreate": "on_create.sh"            },            "ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",            "ThreadsPerCore": 1        }    ]}

Затем используйте следующую команду для создания кластера с использованием предоставленных данных:

aws sagemaker create-cluster create-cluster-slurm-default-vpc.json

Запустите вашу первую обучающую задачу с Llama 2

Обратите внимание, что использование модели Llama 2 регулируется лицензией Meta. Чтобы скачать веса модели и токенизатор, посетите веб-сайт и примите лицензию перед запросом доступа на веб-сайте Hugging Face Meta.

После запуска кластера войдите с помощью Session Manager, используя идентификатор кластера, имя группы экземпляров и идентификатор экземпляра. Используйте следующую команду для просмотра сведений о вашем кластере:

aws sagemaker describe-cluster –cluster-name <cluster_name>

Запишите идентификатор кластера, включенный в ARN кластера, в ответе:

“ClusterArn”: “arn:aws:sagemaker:us-west-2:111122223333:cluster/<cluster_id>”

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

aws sagemaker list-cluster-nodes --cluster-name <cluster_name>

Запишите InstanceGroupName и InstanceId в ответе, так как они будут использоваться для подключения к экземпляру с помощью Session Manager.

Теперь вы можете использовать Session Manager для входа в головной узел или один из узлов входа и запустить вашу обучающую задачу:

aws ssm start-session —target sagemaker-cluster:<cluster_id>_<instance_group_name>-<instance_id>

Далее мы собираемся подготовить среду и скачать Llama 2 и набор данных RedPajama. Полный код и пошаговое руководство по этому вопросу можно найти в инструкциях в репозитории AWSome Distributed Training на GitHub.

git clone https://github.com/aws-samples/awsome-distributed-training.git

Следуйте инструкциям, указанным в файле 2.test_cases/8.neuronx-nemo-megatron/README.md. После выполнения шагов по подготовке среды, подготовке модели, скачиванию и токенизации набора данных и предварительной компиляции модели следует отредактировать скрипт 6.pretrain-model.sh и команду отправки задания sbatch, чтобы добавить параметр, позволяющий воспользоваться функцией автоматического возобновления выполнения в SageMaker HyperPod.

Отредактируйте строку sbatch следующим образом:

sbatch --nodes 4 --auto-resume=1 run.slurm ./llama2_7b.sh

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

squeue <jobid>

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

tail -f slurm-run.slurm-<jobid>.out

Очистка

Чтобы удалить кластер SageMaker HyperPod, воспользуйтесь консолью SageMaker или следующей командой AWS CLI:

aws sagemaker delete-cluster --cluster-name <cluster_name>

Заключение

В этой статье мы показали вам, как подготовить вашу среду AWS, развернуть кластер SageMaker HyperPod и обучить модель Llama 2 с 7 миллиардами параметров. SageMaker HyperPod доступен сегодня в регионах Americas (N. Virginia, Ohio и Oregon), Asia Pacific (Singapore, Sydney и Tokyo) и Europe (Frankfurt, Ireland и Stockholm). Они могут быть развернуты с помощью консоли SageMaker, AWS CLI и AWS SDK, и они поддерживают семейства инстансов p4d, p4de, p5, trn1, inf2, g5, c5, c5n, m5 и t3.

Чтобы узнать больше о SageMaker HyperPod, посетите Amazon SageMaker HyperPod.