Введение

Представления B двунаправленного кодера E кодера R от архитектуры нейронной сети T преобразователей (BERT) [1] недавно получили широкое распространение. большой интерес как со стороны исследователей, так и со стороны промышленности, благодаря впечатляющей точности, которую он смог достичь при решении широкого круга задач [2]. Чтобы помочь сообществу НЛП, мы оптимизировали BERT для использования преимуществ графических процессоров NVIDIA Volta и тензорных ядер. Благодаря этим оптимизациям BERT-large можно предварительно обучить за 3,3 дня на четырех узлах DGX-2H (всего 64 графических процессора Volta). Мы полностью открыли исходный код для наших скриптов подготовки данных и обучающих рецептов, чтобы другие могли воспроизвести результаты исследований из первоначальной публикации, а также использовать их в дальнейших исследованиях или сценариях производства. Код можно найти на GitHub в нашем репозитории Примеры глубокого обучения NVIDIA, который содержит несколько рецептов высокопроизводительного обучения с использованием тензорных ядер Volta.

BERT - это неконтролируемая языковая модель глубокого обучения, для обучения которой требуются только неаннотированные наборы данных. Это открывает возможность обучения на гораздо большем объеме данных по сравнению с подходами, основанными на аннотированных источниках данных. Модель BERT также лучше отражает понимание языков за счет использования двунаправленного контекста между уровнями кодировщиков-преобразователей. Обучение BERT состоит из двух этапов: предварительное обучение языковой модели неконтролируемым образом на огромном количестве неаннотированных наборов данных, а затем использование этой предварительно обученной модели для тонкой настройки для различных задач НЛП, таких как вопрос и ответ, классификация предложений и т. Д. или анализ настроений. Тонкая настройка обычно добавляет один или два дополнительных слоя для конкретной задачи и дополнительно обучает модель с использованием аннотированного набора данных для конкретной задачи, начиная с предварительно обученных весов магистрали. Сквозной процесс можно резюмировать с помощью рисунка 1, а результаты представлены в следующих разделах.

Подготовка данных

Точные шаги, используемые для подготовки необработанного обучающего корпуса для обучения модели BERT, могут повлиять на точность окончательного прогноза после обучения. Поэтому мы предоставили сценарии, которые полностью автоматизированы для загрузки, извлечения, правильного форматирования и предварительной обработки данных в TFRecords, подходящие для предварительного обучения и воспроизведения результатов, которые мы представляем здесь. Сценарии были написаны для разделения каждого шага, чтобы можно было включить дополнительные шаги и / или дополнительные данные в соответствии с потребностями вашего конкретного приложения.

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

Предварительная подготовка

Хотя существующие предварительно обученные веса доступны, вы можете предварительно обучить BERT на ваших собственных данных, связанных с текущей задачей тонкой настройки. Например, биомедицинская литература содержит множество собственных существительных, специфичных для предметной области, и точность ответов на вопросы можно повысить почти на 10% путем предварительного обучения на соответствующих источниках данных [3].

Обучение смешанной точности обеспечивает до 3-х кратное ускорение за счет выполнения многих операций в формате половинной точности с использованием тензорных ядер в архитектурах Вольта и Тьюринга. Обучение со смешанной точностью включается в TensorFlow автоматически с помощью пары строк кода. Мы также обнаружили, что компилятор XLA JIT обеспечивает значительное ускорение при использовании в сочетании со смешанной точностью.

Результаты тестирования в таблице 1 показывают, что наш рецепт (подготовка данных, предварительное обучение, точная настройка и логический вывод) с BERT-large и смешанной точностью на графических процессорах Volta воспроизводит точность из исходной статьи. Результаты получены с помощью Tensorflow 1.13.1 в контейнере 19.03-py3 NGC с включенным XLA.

На рисунке 2 показаны потери при обучении в зависимости от шагов при обучении BERT-large по идентичным кривым со смешанной точностью и без нее. Тренировка смешанной точности с тензорными ядрами обеспечивает значительное ускорение - тренировка без смешанной точности занимает около 6,8 дней, тогда как после включения автоматической смешанной точности требуется всего около 4,5 дней (в 1,5 раза быстрее) и только 3,3 дня (в 2,1 раза быстрее) после дальнейшее включение компилятора XLA. В этом эксперименте мы использовали размер пакета 4 на графический процессор, чтобы точно имитировать исходные опубликованные результаты с глобальным размером пакета 256. Недавние исследования показали, что BERT может успешно обучаться с использованием пакетов большего размера, что дает возможность для дополнительного ускорения. Например, если при размере пакета 4 на графический процессор ускорение составляет 2,1 раза, то при размере пакета 8 на графический процессор ускорение будет примерно в 3 раза.

Точная настройка и вывод

В нашем репозитории BERT мы также предоставляем сценарии, которые точно настраивают предварительно обученную модель BERT для задачи ответа на вопросы SQuAD с использованием смешанной точности. В таблице 1 эти сценарии использовались для получения результатов точной настройки, помеченных как «Текущая работа». Наша пиковая пропускная способность при точной настройке составляет примерно 143 предложения в секунду при общем размере пакета из 160 последовательностей в одной системе DGX-1, состоящей из 8 графических процессоров V100–32 ГБ. Наша производительность вывода на одном графическом процессоре V100–32 ГБ составляет 119 предложений в секунду.

Заключение и дополнительная работа

Мы смогли оптимизировать время получения решения для сквозного обучения BERT с использованием графических процессоров и обучения со смешанной точностью с помощью тензорных ядер. Обучение с использованием смешанной точности позволило достичь той же точности результатов, что и обучение с одинарной точностью, при этом существенно ускорив процесс - время тренировки сократилось до менее чем половины времени с одинарной точностью. Все скрипты и рецепты для воспроизведения нашей работы с помощью TensorFlow, включая подготовку данных, опубликованы на GitHub. Кроме того, Megatron-LM - это репозиторий PyTorch для исследования больших языковых моделей, который можно использовать для обучения BERT, и который будет продолжать обновляться NVIDIA с дополнительными крупномасштабными исследованиями в области языкового моделирования. И последнее, но не менее важное: репозиторий BERT in GluonNLP для MXNet также поддерживает обучение BERT со смешанной точностью на графических процессорах. Мы надеемся, что эти ресурсы GPU помогут ускорить исследования и разработки в сообществе НЛП.

Авторы

Кристофер Форстер; Тор Йонсен; Света Мандава; Шарат Турувекере Шринивас; Дэю Фу; Джули Бернауэр; Эллисон Грей; Шаран Четлур, Рауль Пури

Ссылки

[1] Девлин, Джейкоб и др. «Берт: Предварительная подготовка глубоких двунаправленных преобразователей для понимания языка». Препринт arXiv arXiv: 1810.04805 (2018).

[2] Таблица лидеров GLUE

[3] Ли, Джинхёк и др. «BioBERT: предварительно обученная модель представления биомедицинского языка для биомедицинского анализа текста». Препринт arXiv arXiv: 1901.08746 (2019).