Обзор и руководство по началу работы с обучающим компилятором 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, метод, который требует минимальных изменений кода, если вам нужно реорганизовать существующую работу.
Предпосылки
- Если вы впервые используете Amazon SageMaker, вам необходимо настроить SageMaker.
- Настройте SageMaker Studio или адаптируйте инструкции для SageMaker Notebook Instances или другой среды разработки.
- Обязательно просмотрите SageMaker Training Compiler протестированные типы инстансов и, при необходимости, запросите увеличение квоты, если лимит обслуживания на уровне вашей учетной записи не имеет желаемого типа инстанса и доступного количества необходимых инстансов.
Пошаговое руководство
Полный пример этого метода настройки модели для задачи классификации тональности с использованием 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. В пошаговом руководстве я выбираю задачу «Классификация текста» в качестве задачи модели, для которой я хочу точно настроить свою предварительно обученную модель.
- Выберите одну из наших протестированных моделей, которая также доступна как Предварительно обученная модель с обнимающим лицом.
- Теперь давайте сгенерируем наш стартовый код. Перейдите на страницу модели Hugging Face для выбранной модели (например, вот страница для roberta-large).
- В верхней части страницы нажмите «Поезд» › «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. .