От обучения новых моделей до развертывания их в производстве, Создатель мудреца Амазонки предлагает наиболее полный набор инструментов для стартапов и предприятий, позволяющих использовать возможности машинного обучения (ML) и глубокого обучения.
Благодаря своей библиотеке с открытым исходным кодом Transformers и платформе машинного обучения Hugging Face делает трансферное обучение и новейшие модели машинного обучения доступными для глобального сообщества ИИ, сокращая время, необходимое специалистам по данным и инженерам машинного обучения в компаниях по всему миру, чтобы воспользоваться преимуществами каждого нового научного исследования. продвижение.
Применение Transformers к новым задачам или областям НЛП требует точной настройки больших языковых моделей, метода, использующего накопленные знания предварительно обученных моделей для их адаптации к новой задаче или определенному типу документов в дополнительном эффективном процессе обучения.
Тонкая настройка модели для получения точных прогнозов для конкретной бизнес-задачи требует обучения больших моделей Transformers, например, BERT, BART, RoBERTa, T5, которые могут быть сложными для масштабируемого выполнения.
Hugging Face тесно сотрудничает с SageMaker, чтобы предоставить готовые к использованию контейнеры для глубокого обучения (DLC), которые делают обучение и развертывание новейших моделей Трансформеров проще и быстрее, чем когда-либо. Поскольку в контейнер интегрированы такие функции, как SageMaker Data Parallel (SMDP), SageMaker Model Parallel (SMMP), конвейерный режим S3, их использование значительно сокращает время, затрачиваемое компаниями на создание решений машинного обучения на основе Transformers, таких как ответы на вопросы, генерация текста и изображений, оптимизации результатов поиска и улучшения автоматизации поддержки клиентов, диалоговых интерфейсов, семантического поиска, анализа документов и многих других приложений.
В этом посте мы сосредоточимся на глубокой интеграции распределенных библиотек SageMaker с Hugging Face, которая позволяет специалистам по данным ускорить обучение и тонкую настройку моделей Transformers с нескольких дней до нескольких часов, и все это в SageMaker.
Обзор распределенного обучения
Практики машинного обучения и специалисты по данным сталкиваются с двумя проблемами масштабирования при обучении моделей: масштабирование размера модели (количество параметров и слоев) и масштабирование обучающих данных. Масштабирование либо размера модели, либо обучающих данных может привести к большей точности, но в глубоком обучении могут быть случаи, когда объем памяти на ускорителе (ЦП или ГП) ограничивает комбинацию размера обучающих данных и размера модель. Например, при обучении большой языковой модели размер пакета часто ограничивается небольшим количеством образцов, что может привести к менее точной модели.
Распределенное обучение может разделить рабочую нагрузку для обучения модели между несколькими процессорами, что называется рабочие. Эти работники работают параллельно, чтобы ускорить обучение модели.
В зависимости от того, что мы хотим масштабировать (модель или данные), существует два подхода к распределенному обучению: параллель данных и модель параллельно.
Параллельность данных — наиболее распространенный подход к распределенному обучению. Параллелизм данных влечет за собой создание копии архитектуры модели и весов на разных ускорителях. Затем вместо того, чтобы передавать всю обучающую выборку одному ускорителю, мы можем разделить обучающую выборку по разным ускорителям и быстрее проходить обучающую выборку. Хотя это добавляет этап, когда ускорителям необходимо передавать информацию о градиенте обратно на сервер параметров, это время с лихвой компенсируется ускорением итерации по части всего набора данных на ускоритель. Из-за этого параллелизм данных может значительно помочь сократить время обучения. Например, обучение одной модели без распараллеливания занимает 4 часа. Использование распределенного обучения может сократить это время до 24 минут. Распределенное обучение SageMaker также реализует передовые методы обновления градиентов.
Модельный параллельный подход используется с большими моделями, слишком большими для одного ускорителя (GPU). Этот подход реализует стратегию распараллеливания, при которой архитектура модели делится на сегменты и размещается на разных ускорителях. Конфигурация каждого из этих сегментов зависит от архитектуры нейронной сети и обычно включает несколько уровней. Связь между ускорителями происходит каждый раз, когда обучающие данные переходят от одного шарда к другому.
Подводя итог, можно сказать, что вам следует использовать распределенный параллелизм обучающих данных для трудоемких задач из-за больших наборов данных или когда вы хотите ускорить свои обучающие эксперименты. Вы должны использовать параллелизм моделей, когда ваша модель не может поместиться на один ускоритель.
Предпосылки
Для выполнения распределенного обучения моделей Hugging Face Transformers в SageMaker необходимо выполнить следующие предварительные условия:
Внедрить распределенное обучение
Библиотека Hugging Face Transformers предоставляет API-интерфейс Trainer, оптимизированный для обучения или точной настройки моделей, предоставляемых библиотекой. Вы также можете использовать его на своих собственных моделях, если они работают так же, как модели Transformers; видеть Trainer Больше подробностей. Этот API используется в нашем примеры скриптов, которые показывают, как предварительно обрабатывать данные для различных задач NLP, которые вы можете использовать в качестве моделей для написания сценария, решающего вашу собственную задачу. Преимущество Trainer API в том, что этот скрипт работает «из коробки» на любой распределенной установке, включая SageMaker.
Trainer API содержит все необходимое для обучения. Сюда входят ваши наборы данных, ваша модель (или функция, которая возвращает вашу модель), compute_metrics
функция, которая возвращает метрики, которые вы хотите отслеживать, из массивов предикатов и меток, вашего оптимизатора и планировщика скорости обучения (предусмотрены хорошие значения по умолчанию), а также все гиперпараметры, которые вы можете настроить для своего обучения, сгруппированные в классе данных, называемом TrainingArguments
. При всем этом он предоставляет три метода — обучение, оценка и прогнозирование — для обучения вашей модели, получения результатов метрик для любого набора данных или получения прогнозов для любого набора данных. Чтобы узнать больше об объекте Trainer, см. Тонкая настройка модели с помощью Trainer API и видео API тренера, который проведет вас через простой пример.
За кулисами Trainer API начинает с анализа среды, в которой вы запускаете свой скрипт при создании TrainingArguments
. Например, если вы запустили обучение с помощью SageMaker, оно просматривает SM_FRAMEWORK_PARAMS
в среде, чтобы определить, включен ли параллелизм данных SageMaker или параллелизм моделей. Затем он получает соответствующие переменные (такие как ранг процесса или размер мира) из среды перед выполнением необходимых шагов инициализации (таких как smdistributed.dataparallel.torch.distributed.init_process_group()
).
Trainer содержит весь тренировочный цикл, поэтому он может настроить необходимые шаги, чтобы убедиться, что smdistributed.dataparallel
backend используется при необходимости без необходимости изменять строку кода в вашем скрипте. Он по-прежнему может работать (хотя и намного медленнее) на вашем локальном компьютере для отладки. Он управляет сегментированием вашего набора данных таким образом, что каждый процесс автоматически видит разные выборки, с перетасовкой в каждую эпоху, синхронизацией ваших градиентов перед шагом оптимизации, обучением смешанной точности, если вы его активировали, накоплением градиента, если вы не можете уместить большой размер пакета на ваши графические процессоры и многие другие оптимизации.
Если вы активировали параллелизм модели, это гарантирует, что процессы, которые должны видеть одни и те же данные (если их dp_rank
то же самое) получают одни и те же партии, и это обрабатывается с разными dp_rank
не вижу одних и тех же семплов, опять же с перетасовкой в каждую эпоху. Он обеспечивает правильную синхронизацию словарей состояний модели или оптимизаторов при постановке контрольных точек и снова обрабатывает все оптимизации, такие как смешанная точность и накопление градиента.
При использовании методов оценки и прогнозирования Trainer выполняет распределенную оценку, чтобы использовать преимущества всех ваших графических процессоров. Он правильно обрабатывает ваши данные для каждого процесса (процесс одного и того же dp_rank
если параллелизм модели активирован) и гарантирует, что прогнозы правильно собраны в том же порядке, что и набор данных, который вы используете, прежде чем они будут отправлены в compute_metrics
функция или только что вернулся. Использование Trainer API не является обязательным. Пользователи по-прежнему могут использовать Keras или PyTorch в Hugging Face. Однако Trainer API может предоставить полезный уровень абстракции.
Обучите модель с помощью SageMaker Hugging Face Estimators
Estimator — это высокоуровневый интерфейс для обучения SageMaker, который выполняет комплексные задачи обучения и развертывания SageMaker. Обучение вашего сценария вызывается, когда вы вызываете fit
на HuggingFace
Оценщик. В Estimator вы определяете, какой скрипт тонкой настройки использовать в качестве entry_point
, который instance_type
использовать и какие гиперпараметры передаются. HuggingFace
параметры см. Оценщик объятий лица.
Распределенное обучение: параллельные данные
В этом примере мы используем новые DLC Hugging Face и SageMaker SDK для обучения распределенной модели Seq2Seq-трансформера задачам вопросов и ответов с использованием библиотек Transformers и наборов данных. bert-large-uncased-целое-слово-маскирование модель точно настроена на отряд набор данных.
В следующих примерах кода показаны этапы создания HuggingFace
оценщик для распределенного обучения с параллелизмом данных.
- Выберите сценарий Hugging Face Transformers:
Когда вы создаете HuggingFace
Estimator можно указать сценарий обучения, хранящийся в репозитории GitHub, в качестве точки входа для Estimator, поэтому вам не нужно загружать сценарии локально. Вы можете использовать git_config
для запуска примеров сценариев Hugging Face Transformers и правой «ветки», если ваш transformers_version
необходимо настроить. Например, если вы используете transformers_version
4.6.1, вы должны использовать 'branch':'v4.6.1
».
- Настройте гиперпараметры обучения, которые передаются в задание обучения:
В качестве гиперпараметра мы можем определить любой Seq2SeqTrainingАргументы и те, которые определены в сценарии обучения.
- Задайте параметры распределения в
HuggingFace
Оценщик:
Вы можете использовать Библиотека параллелизма данных SageMaker из коробки для распределенного обучения. Мы добавили функционал параллелизма данных прямо в Тренер. Чтобы включить параллелизм данных, вы можете просто добавить один параметр в свой HuggingFace
Estimator, чтобы ваш код на основе Trainer использовал его автоматически.
- Создайте
HuggingFace
Оценщик, включающий параметры, определенные на предыдущих шагах, и начните обучение:
Ассоциация Репозиторий Hugging Face Transformers содержит несколько примеров и скриптов для тонкой настройки моделей на задачах от языкового моделирования до классификации токенов. В нашем случае мы используем run_qa.py
из examples/pytorch/question-answering
примеры.
smdistributed.dataparallel
поддерживает обучение модели в SageMaker с только следующие типы экземпляров. Для лучшей производительности мы рекомендуем использовать тип экземпляра, который поддерживает Эластичный тканевый адаптер (ОДВ):
- мл.p3.16xбольшой
- ml.p3dn.24xlarge (рекомендуется)
- ml.p4d.24xlarge (рекомендуется)
Чтобы получить максимальную производительность и максимальную отдачу от SMDataParallel
, вы должны использовать как минимум два экземпляра, но вы также можете использовать один для тестирования этого примера.
Следующие пример тетради содержит более подробные пошаговые инструкции.
Распределенное обучение: параллельная модель
Для распределенного обучения с модельным параллелизмом мы используем библиотеку Hugging Face Transformers и наборы данных вместе с SageMaker SDK для классификации последовательностей на Оценка общего понимания языка (КЛЕЙ) тест на кластере с несколькими узлами и несколькими графическими процессорами с использованием Библиотека параллелизма моделей SageMaker.
Как и в случае с параллелизмом данных, сначала мы устанавливаем конфигурацию git, гиперпараметры обучения и параметры распределения в HuggingFace
Оценщик:
Библиотека параллелизма моделей внутренне использует MPI, поэтому для использования параллелизма моделей необходимо включить MPI с помощью параметра распределения. “processes_per_host
” в предыдущем коде указывает количество процессов, которые MPI должен запускать на каждом хосте. Мы предлагаем их для разработки и тестирования. Во время производства вы можете обратиться в службу поддержки AWS, если вам требуется большая мощность графического процессора. Для получения дополнительной информации см. Запуск задания параллельного обучения распределенной модели SageMaker.
Следующие пример тетради содержит полные сценарии кода.
Точечные экземпляры
С расширением инфраструктуры Hugging Face для SageMaker Python SDK мы также можем воспользоваться преимуществами полностью управляемого Эластичное вычислительное облако Amazon (Амазон EC2) Точечные экземпляры и сэкономьте до 90% стоимости обучения.
Если ваша учебная работа не будет завершена быстро, мы рекомендуем вам использовать чекпойнтинг с управляемой точечной тренировкой, поэтому вам необходимо определить checkpoint_s3_uri
.
Чтобы использовать спотовые инстансы с HuggingFace
Оценщик, мы должны установить use_spot_instances
значение True и определите свой max_wait
и max_run
время. Дополнительные сведения о жизненном цикле управляемого спотового обучения см. Управляемый спот-тренинг в Amazon SageMaker.
Ниже приведен фрагмент кода для настройки Estimator для точечного обучения:
Следующие ноутбук содержит полные сценарии кода.
Заключение
В этом посте мы обсудили распределенное обучение Hugging Face Transformers с помощью SageMaker. Сначала мы рассмотрели варианты использования параллелизма данных и параллелизма моделей. Параллелизм данных, как правило, более уместен, но не обязательно ограничен случаями, когда узким местом обучения являются вычислительные ресурсы, тогда как параллелизм моделей можно использовать, когда модель не помещается в памяти, предоставляемой одним ускорителем. Затем мы показали, как тренироваться обоими методами.
В рассмотренном нами случае использования параллелизма данных обучение модели на одном экземпляре p3.2xlarge (с одним графическим процессором) занимает 4 часа и стоит примерно 15 долларов на момент написания этой статьи. Благодаря параллелизму данных мы можем обучить ту же модель за 24 минуты по цене 28 долларов. Хотя стоимость удвоилась, время обучения сократилось в 10 раз. В ситуации, когда вам нужно обучить множество моделей за короткий период времени, параллелизм данных может обеспечить это при относительно небольшом увеличении затрат. Что касается варианта использования параллелизма моделей, он добавляет возможность обучать модели, которые ранее вообще не могли быть обучены из-за аппаратных ограничений. Обе функции открывают новые рабочие процессы для специалистов по машинному обучению и легко доступны через HuggingFace
Estimator как часть SageMaker Python SDK. Развертывание этих моделей на размещенных конечных точках выполняется по той же процедуре, что и для других Estimators.
Эта интеграция включает другие функции, которые являются частью экосистемы SageMaker. Например, вы можете использовать спотовые инстансы, добавив простой флаг в Estimator для дополнительной оптимизации затрат. В качестве следующего шага вы можете найти и запустить обучающая демонстрация и пример тетради.
Об авторах
Арчис Йоглекар является архитектором партнерских решений AI / ML в команде Emerging Technologies. Он интересуется производительным, масштабируемым глубоким обучением и научными вычислениями с использованием строительных блоков AWS. Его прошлый опыт варьируется от исследований вычислительной физики до разработки платформ машинного обучения в академических кругах, национальных лабораториях и стартапах. Вне компьютера он проводит время за игрой в футбол, с друзьями и семьей.
Джеймс Йи является старшим архитектором партнерских решений AI/ML в команде Emerging Technologies в Amazon Web Services. Он увлечен работой с корпоративными клиентами и партнерами над проектированием, развертыванием и масштабированием приложений AI/ML для получения их бизнес-ценности. Вне работы он любит играть в футбол, путешествовать и проводить время со своей семьей.
Филипп Шмид является инженером по машинному обучению и техническим руководителем в Hugging Face, где он руководит сотрудничеством с командой Amazon SageMaker. Он увлечен демократизацией, оптимизацией и производством передовых моделей NLP, а также упрощением использования Deep Learning.
Сильвен Гуггер является инженером-исследователем в Hugging Face и одним из основных сопровождающих библиотеки Transformers. Он любит программное обеспечение с открытым исходным кодом и помогает сообществу использовать его.
Джефф Будье создает продукты в Hugging Face, создателе Transformers, ведущей библиотеки машинного обучения с открытым исходным кодом. Ранее Джефф был соучредителем Stupeflix, приобретенной GoPro, где он занимал должность директора по управлению продуктами, маркетингу продуктов, развитию бизнеса и корпоративному развитию.
- '
- 100
- 7
- 9
- О нас
- ускорять
- ускоритель
- ускорители
- через
- дополнительный
- плюс
- AI
- Все
- Несмотря на то, что
- Amazon
- Amazon EC2
- Создатель мудреца Амазонки
- Amazon Web Services
- среди
- API
- Приложения
- архитектура
- около
- автоматизация
- AWS
- эталонный тест
- ЛУЧШЕЕ
- Коробка
- Строительство
- бизнес
- призывают
- Пропускная способность
- случаев
- проблемы
- изменение
- классификация
- Соучредитель
- код
- сотрудничество
- сочетание
- Общий
- Связь
- сообщество
- Компании
- Вычисление
- вычисление
- Конфигурация
- Container
- содержит
- Разговорные интерфейсы
- Расходы
- может
- Создающий
- создатель
- служба поддержки
- Клиенты
- данным
- глубокое обучение
- развертывание
- Проект
- Развитие
- различный
- директор
- распределенный
- Документация
- доменов
- в течение
- экосистема
- появление
- инженер
- Инженеры
- Предприятие
- корпоративные клиенты
- Окружающая среда
- пример
- Впечатления
- ткань
- Face
- семья
- быстрее
- Особенности
- First
- соответствовать
- Фокус
- Для стартапов
- Рамки
- функция
- идти
- GitHub
- Глобальный
- хорошо
- GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР
- Графические процессоры
- Аппаратные средства
- имеющий
- помощь
- Как
- How To
- HTTPS
- IAM
- улучшение
- В том числе
- Увеличение
- информация
- интеграции.
- IT
- работа
- keras
- знания
- Этикетки
- Labs
- язык
- большой
- последний
- запуск
- запуск
- вести
- ведущий
- УЧИТЬСЯ
- изучение
- Библиотека
- Ограниченный
- линия
- локальным
- в местном масштабе
- обучение с помощью машины
- управление
- Маркетинг
- Метрика
- смешанный
- ML
- модель
- моделирование
- Модели
- БОЛЕЕ
- самых
- национальный
- необходимый
- сеть
- нервный
- нейронной сети
- НЛП
- Предложения
- смещение
- открытый
- с открытым исходным кодом
- заказ
- Другое
- партнер
- партнеры
- производительность
- Физика
- труба
- Платформа
- мощностью
- Точность
- Predictions
- Проблема
- процесс
- Процессы
- Продукт
- Управление продуктом
- Производство
- Продукция
- обеспечивать
- приводит
- Питон
- pytorch
- вопрос
- ассортимент
- уменьшить
- исследованиям
- Итоги
- Возвращает
- Run
- Бег
- sagemaker
- Шкала
- масштабирование
- Ученые
- SDK
- Поиск
- видит
- Услуги
- набор
- установка
- Sharding
- Короткое
- просто
- Размер
- небольшой
- So
- Футбольный
- Software
- Решения
- скорость
- Расходы
- раскол
- Спотовая торговля
- распространение
- Начало
- Стартапы
- Область
- Стратегия
- поддержка
- Поддержка
- технологии
- снижения вреда
- технологии
- Тестирование
- мир
- Через
- время
- вместе
- знак
- инструменты
- факел
- трек
- Обучение
- Updates
- URI
- пользователей
- Видео
- Web
- веб-сервисы
- Что
- в
- без
- Работа
- рабочие
- работает
- работает
- Мир
- письмо