В последние несколько лет наблюдается бурное развитие в области обработки естественного языка (NLP). Хотя аппаратное обеспечение улучшилось, например, с помощью ускорителей последнего поколения от NVIDIA и Amazon, специалисты по продвинутому машинному обучению (ML) по-прежнему регулярно сталкиваются с проблемами масштабирования своих больших языковых моделей на нескольких графических процессорах.
В этом сообщении блога мы кратко подводим итоги развития крупномасштабных и мелкомасштабных моделей НЛП, прежде всего благодаря абстракции, предоставляемой Hugging Face, и модульной серверной части Amazon SageMaker. В частности, мы отмечаем запуск четырех дополнительных функций в параллельной библиотеке моделей SageMaker, которые открывают доступ к предварительному обучению и точной настройке модели NLP со 175 миллиардами параметров для клиентов.
Мы использовали эту библиотеку на обучающей платформе SageMaker и добились пропускной способности 32 образца в секунду на 120 экземплярах ml.p4d.24xlarge и 175 миллиардах параметров. Мы ожидаем, что если мы увеличим это число до 240 экземпляров, обучение полной модели займет 25 дней.
Дополнительные сведения о параллелизме моделей см. в статье Параллелизм моделей Amazon SageMaker: общая и гибкая платформа для обучения работе с большими моделями.
Вы также можете увидеть ноутбук GPT2, который мы использовали для получения этих показателей производительности на нашем Репозиторий GitHub.
Чтобы узнать больше о том, как использовать новые функции в параллельной модели SageMaker, см. Расширенные возможности параллельной библиотеки моделей SageMaker для PyTorchкачества Использование с SageMaker Python SDK.
NLP на Amazon SageMaker — Hugging Face и модельный параллелизм
Если вы новичок в Hugging Face и NLP, самое главное, что вам нужно знать, это то, что приложения, использующие обработку естественного языка (NLP), начинают достигать производительности на уровне человека. Это в значительной степени обусловлено механизмом обучения, называемым внимание, которая породила модель глубокого обучения, называемую трансформатор, что гораздо более масштабируемо, чем предыдущие последовательные методы глубокого обучения. Теперь известный модель БЕРТ был разработан, чтобы извлечь выгоду из трансформатора, и попутно разработал несколько полезных тактик НЛП. Трансформеры и набор моделей как внутри, так и вне НЛП, вдохновленных BERT, являются основной системой для ваших результатов поиска Google, в твоем Результаты Google переводчикакачества множество новых стартапов.
SageMaker и Hugging Face объединились, чтобы сделать это проще для клиентов, чем когда-либо прежде. Мы запустили контейнеры глубокого обучения Hugging Face (DLC), чтобы вы могли обучать и размещать предварительно обученные модели непосредственно из Hugging Face. хранилище более 26,000 XNUMX моделей. Мы запустили обучающий компилятор SageMaker для вас, чтобы ускорить время выполнения ваших тренировочных циклов Hugging Face до 50%. Мы также интегрировали флагманский SDK для Transformers Hugging Face наши распределенные учебные библиотеки чтобы сделать масштабирование ваших моделей НЛП проще, чем когда-либо прежде.
Дополнительные сведения о моделях Hugging Face Transformer на Amazon SageMaker см. Поддержка моделей трансформеров, обнимающих лицо.
Новые функции для крупномасштабного обучения моделей НЛП с помощью параллельной библиотеки моделей SageMaker.
На AWS re:Invent 2020 компания SageMaker представила распределенные библиотеки, которые обеспечивают наилучшую производительность в облаке для обучения моделей компьютерного зрения, таких как Маска-RCNN и модели НЛП, такие как Т5-3Б. Это возможно благодаря расширенным коммуникационным примитивам, которые на 20–40 % быстрее, чем NCCL на AWS, и методам распределения моделей, которые позволяют масштабировать чрезвычайно большие языковые модели для десятков, сотен и тысяч графических процессоров.
Параллельная библиотека моделей SageMaker (SMP) всегда давала вам возможность взять предопределенную модель NLP в PyTorch, будь то через Hugging Face или где-либо еще, и разделить эту модель на несколько графических процессоров в вашем кластере. Другими словами, SMP разбивает вашу модель на более мелкие фрагменты, чтобы вы не сталкивались с ошибками нехватки памяти (OOM). Мы рады добавить дополнительные методы экономии памяти, которые имеют решающее значение для крупномасштабных моделей, а именно:
- Тензорный параллелизм
- Разделение состояния оптимизатора
- Контрольная точка активации
- Разгрузка активации
Вы можете комбинировать эти четыре функции, чтобы более эффективно использовать память и обучать модели НЛП экстремального масштаба следующего поколения.
Распределенное обучение и тензорный параллелизм
Чтобы понять тензорный параллелизм, полезно знать, что существует много видов распределенного обучения или параллелизма.. Вы, вероятно, уже знакомы с наиболее распространенным типом, параллелизм данных. Суть параллелизма данных работает следующим образом: вы добавляете дополнительный узел в свой кластер, например, переходите от одного к двум экземплярам ml.EC2 в оценщике SageMaker. Затем вы используете платформу параллельных данных, такую как Horovod, PyTorch Distributed Data Parallel или SageMaker Distributed. Это создает реплики вашей модели, по одной на ускоритель, и обрабатывает разбиение данных на каждый узел, а также объединение всех результатов на этапе обратного распространения вашей нейронной сети. Подумайте о распределенном градиентном спуске. Параллелизм данных также популярен на серверах; вы разделяете данные на все графические процессоры, а иногда и на ЦП на всех ваших узлах. Следующая диаграмма иллюстрирует параллелизм данных.
Модель параллелизма немного отличается. Вместо того, чтобы делать копии одной и той же модели, мы разделяем вашу модель на части. Затем мы управляем ее запуском, поэтому ваши данные по-прежнему проходят через вашу нейронную сеть точно таким же математическим образом, но разные части вашей модели находятся на разных графических процессорах. Если вы используете ml.p3.8xlarge, у вас есть четыре NVIDIA V100, поэтому вы, вероятно, захотите разбить свою модель на 4 части, по одной на каждый GPU. Если вы подскочите до двух ml.p4d.24xlarge, всего в вашем кластере будет 16 A100, поэтому вы можете разбить свою модель на 16 частей. Это также иногда называют конвейерный параллелизм. Это связано с тем, что набор уровней в сети разделен между графическими процессорами и работает конвейерным образом для максимального использования графического процессора. Следующая диаграмма иллюстрирует параллелизм модели.
Чтобы реализовать параллелизм модели в масштабе, нам нужен третий тип распределения: тензорный параллелизм. Тензорный параллелизм применяет те же концепции на один шаг дальше — мы разбиваем самые большие слои вашей нейронной сети и размещаем части самих слоев на разных устройствах. Это актуально, когда вы работаете со 175 миллиардами параметров или более и пытаетесь поместить в ОЗУ даже несколько записей вместе с частями вашей модели для обучения этого преобразователя. Следующая диаграмма иллюстрирует тензорный параллелизм.
Включить тензорный параллелизм, установите его в параметрах smp вы переходите к вашему оценщику.
В предыдущем коде pipeline_parallel_degree
описывает, на сколько сегментов ваша модель должна быть разделена на основе параллелизма конвейера, который мы обсуждали выше. Другое слово для этого множество.
Чтобы включить тензорный параллелизм, установите tensor_parallel_degree
до желаемого уровня. Убедитесь, что вы выбираете число, равное или меньшее, чем количество графических процессоров на экземпляр, поэтому не больше 8 для машин ml.p4d.24xlarge. Дополнительные изменения скрипта см. Запуск задания параллельного обучения распределенной модели SageMaker с тензорным параллелизмом.
Параметр ddp относится к параллельному распределению данных. Обычно вы включаете это, если используете параллелизм данных или тензорный параллелизм, потому что библиотека параллелизма моделей использует DDP для этих функций.
Разделение состояния оптимизатора, разгрузка активации и контрольные точки
Если у вас очень большая модель, вам также нужно очень большое состояние оптимизатора. Подготовить оптимизатор для SMP очень просто: просто возьмите его с диска в своем сценарии и загрузите в smp.DistributedOptimizer()
объект.
Убедитесь, что вы включили это в оценщике, установив shard_optimizer_state
к истине в smp_options
вы используете для настройки SMP:
Подобно тензорному и конвейерному параллелизму, SMP профилирует вашу модель и размер вашего мира (общее количество графических процессоров во всех ваших учебных узлах), чтобы найти лучшие стратегии размещения.
В глубоком обучении выходные данные промежуточного уровня также называются активациями, и их необходимо сохранять во время прямого прохода. Это связано с тем, что их необходимо использовать для вычисления градиента в обратном проходе. В большой модели одновременное хранение всех этих активаций в памяти может создать значительные узкие места памяти. Чтобы устранить это узкое место, вы можете использовать контрольная точка активации, третья новая функция в библиотеке параллелизма моделей SageMaker. Контрольная точка активации или контрольная точка градиента, — это метод сокращения использования памяти за счет очистки активаций определенных слоев и их пересчета во время обратного прохода. Это эффективно обменивает дополнительное время вычислений на сокращение использования памяти.
Наконец, разгрузка активации напрямую использует контрольную точку активации. Стратегия заключается в том, чтобы во время обучения модели в оперативной памяти графического процессора оставалось всего несколько тензорных активаций. В частности, мы перемещаем активации с контрольными точками в память ЦП во время прямого прохода и загружаем их обратно в ГП для обратного прохода определенного микропакета.
Микропартии и стратегии размещения
Другими темами, которые иногда вызывают недоумение у клиентов, являются микропакеты и стратегии размещения. Оба эти гиперпараметра можно указать в параллельной библиотеке модели SageMaker. В частности, микропакеты актуальны при реализации моделей, основанных на конвейерном параллелизме, таких как те, которые имеют размер не менее 30 миллиардов параметров.
Микропакеты являются подмножествами минипакетов. Когда ваша модель находится в цикле обучения, вы определяете определенное количество записей, которые нужно выбрать и передать вперед и назад по слоям — это называется минипартияили иногда просто партия. Полный проход через ваш набор данных называется эпоха. Для выполнения прямых и обратных проходов с конвейерным параллелизмом библиотека параллельных моделей SageMaker разбивает пакеты на более мелкие подмножества, называемые микропакетами, которые запускаются по одному для максимального использования графического процессора. Получающийся в результате гораздо меньший набор примеров для каждого графического процессора называется микропакетом. В нашем примере с GPT-2 мы добавили по умолчанию 1 микробатч непосредственно в сценарий обучения.
По мере расширения конфигурации обучения вам настоятельно рекомендуется изменить размер партии и размер микропакета соответственно. Это единственный способ обеспечить хорошую производительность: вы должны рассматривать размер пакета и размер микропакета как функцию общего размера вашего мира, когда вы полагаетесь на параллелизм конвейера.
Стратегии размещения — это то, как указать SageMaker физически, где размещать разделы вашей модели. Если вы используете как параллельную модель, так и параллельную работу с данными, установка placement_strategy
в “cluster”
размещает реплики модели в идентификаторах устройств (GPU), которые физически расположены близко друг к другу. Однако, если вы действительно хотите быть более предписывающим в своей стратегии параллелизма, вы можете разбить ее на одну строку с различными комбинациями трех букв: D для параллелизма данных, P
указывает на параллелизм конвейера и T
для тензорного параллелизма. Обычно мы рекомендуем сохранять размещение по умолчанию "cluster"
, потому что это наиболее подходит для обучения крупномасштабной модели. Размещение «кластера» соответствует «DPT
».
Дополнительные сведения о стратегиях размещения см. Стратегия размещения с тензорным параллелизмом.
Пример использования
Давайте представим, что у вас есть один ml.p3.16xlarge на вашей тренировочной работе. Это дает вам 8 NVIDIA V100 на узел. Помните, что каждый раз, когда вы добавляете дополнительный экземпляр, вы испытываете дополнительную нагрузку на полосу пропускания, поэтому всегда лучше иметь больше GP'U на одном узле. В этом случае лучше иметь один ml.p3.16xlarge, чем, например, два ml.p3.8xlarge. Несмотря на то, что количество графических процессоров такое же, дополнительные накладные расходы на пропускную способность дополнительного узла замедляют вашу пропускную способность.
Следующая диаграмма иллюстрирует четырехсторонний параллелизм модели в сочетании с двусторонним параллелизмом данных. Это означает, что у вас фактически есть две реплики вашей модели (параллельные данные), каждая из которых разделена на четыре графических процессора (параллельная модель).
Если какие-либо из этих разделов модели слишком велики для одного графического процессора, вы можете добавить дополнительный тип распределения — тензорный параллелизм — чтобы выплюнуть его и использовать оба устройства.
Заключение
В этом сообщении блога мы обсудили распределенные обучающие библиотеки SageMaker, уделив особое внимание параллелизму моделей. Мы поделились эталонными показателями производительности из нашего последнего теста, достигнув 32 выборок в секунду на 120 инстансах ml.p4d.24xlarge и 175 млрд параметров на Amazon SageMaker. Мы ожидаем, что если мы увеличим это число до 240 экземпляров p4, то сможем обучить модель с параметрами 175 Б за 25 дней.
Мы также обсудили новейшие функции, обеспечивающие крупномасштабное обучение, а именно тензорный параллелизм, сегментирование состояния оптимизатора, контрольные точки активации и разгрузку активации. Мы поделились некоторыми советами и рекомендациями по включению этой функции с помощью обучения работе с Amazon SageMaker.
Попробуйте сами используя тот же блокнот, который сгенерировал наши числа, который доступен на GitHub здесь. Вы также можете запросить дополнительные графические процессоры для своей учетной записи AWS через запросите подтверждение лимита обслуживания прямо здесь.
Об авторах
Эмили Уэббер присоединился к AWS сразу после запуска SageMaker и с тех пор пытается рассказать об этом миру! Помимо создания новых возможностей машинного обучения для клиентов, Эмили любит медитировать и изучать тибетский буддизм.
Адитья Биндал является старшим менеджером по продукту AWS Deep Learning. Он работает над продуктами, которые облегчают клиентам обучение моделей глубокого обучения на AWS. В свободное время он любит проводить время с дочерью, играть в теннис, читать историческую литературу и путешествовать.
Луис Кинтела является менеджером по разработке программного обеспечения для параллельной библиотеки моделей AWS SageMaker. В свободное время его можно встретить за рулем своего Harley в Сан-Франциско.
- Коинсмарт. Лучшая в Европе биржа биткойнов и криптовалют.
- Платоблокчейн. Интеллект метавселенной Web3. Расширение знаний. БЕСПЛАТНЫЙ ДОСТУП.
- КриптоХок. Альткоин Радар. Бесплатная пробная версия.
- Источник: https://aws.amazon.com/blogs/machine-learning/train-175-billion-parameter-nlp-models-with-model-parallel-additions-and-hugging-face-on-amazon-sagemaker/
- "
- 000
- 100
- 2020
- 39
- О нас
- ускоритель
- Учетная запись
- достигнутый
- через
- дополнительный
- адрес
- продвинутый
- Все
- уже
- Amazon
- Другой
- Приложения
- ПЛОЩАДЬ
- доступен
- AWS
- залив
- ЛУЧШЕЕ
- Крупнейшая
- миллиард
- Блог
- Строительство
- Вызывать
- изменение
- облако
- код
- комбинации
- Общий
- Связь
- Конфигурация
- замешательство
- Контейнеры
- Основные
- может
- Клиенты
- данным
- развитый
- Застройщик
- Развитие
- устройство
- Устройства
- различный
- распределенный
- распределение
- вниз
- управляемый
- позволяет
- особенно
- пример
- опыт
- Впечатления
- экстремальный
- Лицо
- быстрее
- Особенность
- Особенности
- Рассказы
- соответствовать
- после
- вперед
- найденный
- Рамки
- полный
- функция
- Общие
- порождать
- GitHub
- будет
- хорошо
- Google Поиск
- GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР
- Аппаратные средства
- полезный
- Выделите
- исторический
- Как
- How To
- HTTPS
- Сотни
- расширились
- информация
- вдохновленный
- интегрированный
- вопросы
- IT
- работа
- присоединился
- Прыгать
- хранение
- язык
- большой
- последний
- запуск
- УЧИТЬСЯ
- изучение
- уровень
- Библиотека
- загрузка
- машина
- обучение с помощью машины
- Продукция
- Создание
- менеджер
- Память
- ML
- модель
- Модели
- модульный
- самых
- двигаться
- а именно
- натуральный
- сеть
- Новые функции
- узлы
- ноутбук
- номера
- Другие контрактные услуги
- бумага & картон
- партнерство
- производительность
- кусок
- Платформа
- Популярное
- возможное
- первичный
- Продукт
- Продукция
- Профили
- обеспечивать
- Оперативная память
- RE
- Reading
- рекомендовать
- учет
- уменьшить
- Итоги
- Run
- Бег
- Сказал
- масштабируемые
- Шкала
- масштабирование
- SDK
- Поиск
- обслуживание
- набор
- установка
- Sharding
- общие
- значительный
- Размер
- So
- Software
- конкретно
- скорость
- Расходы
- раскол
- Область
- стратегий
- Стратегия
- поставка
- тактика
- снижения вреда
- тестXNUMX
- мир
- тысячи
- Через
- время
- Советы
- советы и рекомендации
- вместе
- Темы
- торги
- Обучение
- понимать
- использование
- использовать
- видение
- в
- работает
- работает
- Мир
- лет