Обзор и руководство по началу работы с обучающим компилятором SageMaker.

Введение

Глубокие нейронные сети неуклонно становятся больше с каждым годом, поскольку аппаратные и алгоритмические достижения позволили создавать нейронные сети, состоящие из сотен миллиардов параметров. В частности, в моделях-трансформерах, часто используемых для задач обработки естественного языка (NLP), в последние годы резко возросло количество используемых параметров. Например, большое двунаправленное представление энкодера от трансформаторов (BERT), предложенное в 2018 году, имеет более 340 миллионов параметров, а Switch Transformer, предложенное в 2021 году, имеет 1,6 триллиона параметров.

Несмотря на недавние технологические достижения, стоимость и время обучения этих моделей становятся непомерно высокими. В AWS у нас есть опыт разработки от имени наших клиентов, чтобы сократить затраты и время на выполнение учебных заданий для наиболее распространенных сред глубокого обучения (TensorFlow и PyTorch). Два из этих нововведений включают библиотеки SageMaker для параллелизма данных и параллелизма моделей, которые сокращают время обучения конкретным задачам благодаря достижениям в методах распределенного обучения. Если вы хотите глубже изучить наши методы распределенного обучения, я настоятельно рекомендую прочитать нашу публикацию о SageMaker Data Parallel.

В 2021 году мы представили нашу новейшую инновацию для обучения модели глубокого обучения: SageMaker Training Compiler. Доступный как часть SageMaker SDK и требующий минимальных изменений в существующем коде, который использует TensorFlow или PyTorch, SageMaker Training Compiler оптимизирует ваш обучающий код, чтобы он работал более эффективно и потреблял меньше вычислений и памяти, ускоряя выполнение учебных заданий с использованием графического процессора до 50 раз. %. Это усовершенствование сделает современные модели глубокого обучения доступными для более широкой аудитории и обеспечит повышение производительности для наших клиентов, использующих эти платформы на AWS.

В этом посте я познакомлю вас с высокоуровневым дизайном обучающего компилятора SageMaker и покажу, как интегрировать обучающий компилятор SageMaker с библиотекой Hugging Face Transformers. Hugging Face — это компания, которая предлагает простые в использовании инструменты и библиотеки для разработки и развертывания современных моделей НЛП с открытым исходным кодом.

Обучающий компилятор SageMaker

Компиляторы отвечают за преобразование указанного вами кода на языке программирования высокого уровня (например, Python или Java) в машинный код, который выполняется на оборудовании. При переводе языков программирования высокого уровня в машинный код разработчики компиляторов должны принимать решения относительно этого перевода, которые влияют на производительность исполняемого скомпилированного кода. В AWS наши разработчики компиляторов приступили к работе над созданием компилятора, оптимизированного специально для крупномасштабного обучения глубокому обучению, и в результате появился обучающий компилятор SageMaker.

Нейронные сети, созданные с помощью TensorFlow и PyTorch, представлены визуально. и логически в виде графиков. Обучающий компилятор SageMaker использует оптимизации на уровне графа, такие как слияние операторов, планирование памяти и алгебраическое упрощение, чтобы оптимизировать этот граф для выполнения на базовом оборудовании. Кроме того, обучающий компилятор SageMaker обеспечивает внутреннюю оптимизацию (скрытие задержки памяти, оптимизацию, ориентированную на циклы) и оптимизацию потока данных (преобразование макета, удаление общих подвыражений) для эффективной организации обучения.

Слияние операторов в реальном времени — это один из основных методов, лежащих в основе экономии времени, обеспечиваемой обучающим компилятором SageMaker, и поэтому требует более глубокого изучения. Одним из основных узких мест в обучении модели глубокого обучения является стоимость задержек при обращениях к памяти туда и обратно для извлечения и выполнения операторов. Благодаря объединению нескольких операторов обучающий компилятор SageMaker требует, чтобы задание обучения выполняло меньше обращений к памяти и могло выполнять больший набор операторов непосредственно в аппаратных регистрах внутреннего устройства. Это приводит к повышению производительности по сравнению с традиционными подходами к выполнению операторов.

Архитектура высокого уровня

Компилятор SageMaker Training Compiler доступен непосредственно в выбранных контейнерах глубокого обучения AWS (DLC). Указание соответствующих фреймворков и аргументов параметров оценки активирует обучающий компилятор SageMaker, и если вы вносите свою собственную модель, могут потребоваться дополнительные изменения для вашего обучающего сценария. Компилятор SageMaker Training Compiler затем проанализирует сценарий обучения и автоматически выполнит оптимизацию во время компиляции, что позволит ускорить выполнение задания по обучению модели. Артефакт модели, созданный заданием обучения, затем выводится в Amazon Simple Storage Service (S3).

Начало работы с обучающим компилятором SageMaker с помощью Hugging Face Transformers

Учебный компилятор SageMaker в настоящее время поддерживает PyTorch и TensorFlow. Чтобы быстро освоить обучающий компилятор SageMaker, я покажу вам простой способ интеграции обучающего компилятора SageMaker с API Hugging Face Trainer и PyTorch, метод, который требует минимальных изменений кода, если вам нужно реорганизовать существующую работу.

Предпосылки

Пошаговое руководство

Полный пример этого метода настройки модели для задачи классификации тональности с использованием BERT-base-cased можно найти на странице Примеры AWS GitHub. В этом примере предполагается использование одного экземпляра p3.2xlarge. Кроме того, в примере предполагается использование PyTorch v1.9.0 и Transformers v.4.11.0.

Важно! Обучающий компилятор SageMaker был протестирован на определенном числе моделей. Хотя вы можете экспериментировать с обучающим компилятором SageMaker на моделях, не перечисленных на странице документации AWS, производительность обучающего компилятора SageMaker на других моделях не тестировалась. В таблице поддерживаемых моделей также указаны рекомендуемые параметры размера партии. Если вы отклоняетесь от протестированных моделей и рекомендуемых настроек размера партии, вам нужно будет перенастроить параметры, прежде чем разблокировать какое-либо ускорение обучения.

В следующем пошаговом руководстве я покажу вам, как использовать функцию генерации кода Hugging Face для быстрого создания обучающего кода для использования с Amazon SageMaker. Затем я проведу вас через шаги, необходимые для создания кода, сгенерированного Hugging Face, для интеграции с обучающим компилятором SageMaker. В пошаговом руководстве я выбираю задачу «Классификация текста» в качестве задачи модели, для которой я хочу точно настроить свою предварительно обученную модель.

  1. Выберите одну из наших протестированных моделей, которая также доступна как Предварительно обученная модель с обнимающим лицом.
  2. Теперь давайте сгенерируем наш стартовый код. Перейдите на страницу модели Hugging Face для выбранной модели (например, вот страница для roberta-large).
  3. В верхней части страницы нажмите «Поезд» › «Amazon SageMaker».

4. Выберите задачу, для которой вы хотите настроить модель, и выберите AWS для конфигурации.

5. Скопируйте отображаемый код в буфер обмена, создайте блокнот Jupyter, работающий в среде разработки Amazon SageMaker, и вставьте код в свой блокнот.

6. Подготовьте данные для обучения, разделив их на наборы данных для обучения, проверки и тестирования по желанию, и загрузите данные в S3. Сохраните пути S3 в переменных, определенных в блокноте Jupyter. При подготовке данных вам может пригодиться Библиотека наборов данных Hugging Face.

training_input_path=‘s3://example_bucket/s3_prefix_example/train’
test_input_path=‘s3://example_bucket/s3_prefix_example/test’

7. Напишите сценарий обучения и сохраните сценарий обучения в месте, указанном в параметре source_dir вашего оценщика Hugging Face Estimator. Например, обучающие сценарии см. в репозитории Hugging Face GitHub или ссылаются на приведенный выше пример BERT Base Cased. В этом примере ваш сценарий обучения должен использовать класс Trainer из библиотеки Transformers.

from transformers import Trainer, TrainingArguments
training_args=TrainingArguments(**kwargs) 
trainer=Trainer(args=training_args, **kwargs)

8. Чтобы убедиться, что вы используете преимущество обучающего компилятора SageMaker, позволяющего помещать в память больший размер пакета, см. раздел Размер пакета для исходного кода и размер пакета для номера обучающего компилятора. Используя полученные значения размера пакета, обновите размер пакета и масштабируйте скорость обучения на основе нового размера пакета в верхней части записной книжки Jupyter.

# the original max batch size that can fit into GPU memory without compiler
batch_size_native=12
learning_rate_native=float(‘5e-5’)
# an updated max batch size that can fit into GPU memory with compiler
batch_size=64
# update learning rate
learning_rate=learning_rate_native/batch_size_native*batch_size

9. Обновите средство оценки HuggingFace, указав правильные параметры для включения обучающего компилятора SageMaker. В настоящее время рекомендуется отключить отладчик, чтобы не повлиять на производительность, но см. Документацию по обучающему компилятору SageMaker для получения последних рекомендаций по отладчику и Обучающий компилятор SageMaker.

Обратите внимание, что на этом шаге мы создаем экземпляр класса TrainingCompilerConfig и передаем его параметру compiler_config. Этот курс дает вам возможность настроить SageMaker Training Compiler для вашей учебной работы. Класс TrainingCompilerConfig принимает два логических аргумента для параметров enabled и debug. Подробнее об этих параметрах смотрите в документации. Не указывая параметр compiler_config в своем оценщике, вы явно отключаете обучающий компилятор SageMaker.

pytorch_huggingface_estimator=HuggingFace(
 source_dir=’./scripts’,
 entry_point=’train.py’,
 instance_count=1,
 instance_type=’ml.p3.2xlarge’,
 transformers_version=’4.11.0',
 pytorch_version=’1.9.0',
 hyperparameters=hyperparameters,
 compiler_config=TrainingCompilerConfig(),
 disable_profiler=True,
 debugger_hook_config=False
)

10. Чтобы запустить задание обучения, вызовите метод fit для объекта Estimator, передав местоположения данных, указанные на шаге 6.

huggingface_estimator.fit({‘train’: training_input_path, ‘test’: test_input_path}, wait=False)

Поздравляем! Теперь вы запустили свое первое задание по обучению с помощью нового компилятора обучения SageMaker. Вы можете отслеживать ход своего задания по обучению в сервисной консоли SageMaker в разделе Обучение › Задания по обучению, и когда обучение будет завершено, ваша модель будет выведена на S3 и готова к развертыванию. Чтобы увидеть завершенный пример с использованием описанных выше методов для тонкой настройки BERT-base-cased, вы можете посетить нашу страницу примеров AWS GitHub.

Заключение

В этом сообщении блога вы узнали о новом обучающем компиляторе SageMaker и о том, как он может помочь сократить время, необходимое для обучения моделей глубокого обучения. Затем мы рассмотрели, как начать работу с новым обучающим компилятором SageMaker с использованием PyTorch и Hugging Face.

Я призываю вас взять то, что вы здесь узнали, и применить обучающий компилятор SageMaker в своих собственных сценариях использования. Вполне вероятно, что вы уже оптимизируете прирост производительности, используя методы обучения с несколькими графическими процессорами или даже с несколькими узлами. Вам будет приятно узнать, что учебный компилятор SageMaker также можно адаптировать к этим сценариям использования (см. распределенное руководство по обучению в документации и найдите пример с несколькими узлами и несколькими графическими процессорами в нашем репозитории AWS GitHub Examples). . У вас также могут быть варианты использования, требующие использования метода, отличного от API Hugging Face Trainer, и для этих вариантов использования проверьте, как вы можете легко адаптировать свои сценарии обучения, чтобы продолжать использовать преимущества производительности SageMaker Training Compiler. .