Сочетание экономии и точности Экономичное обучение моделей GPT NeoX и Pythia с использованием AWS Trainium
Экономичное обучение моделей GPT NeoX и Pythia сочетание экономии и точности с использованием AWS Trainium
Большие языковые модели (или LLM) стали темой ежедневных разговоров. Быстрое принятие их показано количеством времени, необходимым для достижения 100 миллионов пользователей, которое сократилось с “4,5 лет у Facebook” до исторического минимума в “всего 2 месяца у ChatGPT”. Генеративный предварительно обученный трансформер (GPT) использует причинно-обратное обновление для прогнозирования. Эти архитектуры моделей демонстрируют потрясающую производительность в таких задачах, как распознавание речи, генерация текста и ответы на вопросы. Несколько последних моделей, таких как NeoX, Falcon, Llama, используют архитектуру GPT в качестве основы. Обучение LLM требует колоссального количества времени вычислений, что обходится миллионами долларов. В этом посте мы рассмотрим процедуру обучения GPT NeoX на AWS Trainium, специализированном ускорителе машинного обучения (ML), оптимизированном для обучения глубокого обучения. Мы опишем, как эффективно (3,2 млн токенов/$) обучали такие модели с AWS Trainium, не потеряв при этом качество моделей.
Обзор решения
Модели GPT NeoX и Pythia
GPT NeoX и Pythia – это открытые причинно-следственные языковые модели от Eleuther-AI с примерно 20 миллиардами параметров в NeoX и 6,9 миллиарда в Pythia. Оба являются декодерными моделями, следуя подобному архитектурному дизайну, как Chat GPT3. Однако в них также есть несколько дополнений, которые также широко применяются в последних моделях, таких как Llama. Особенно они имеют вращающуюся позиционную эмбеддинг (ROPE) с частичным вращением по измерениям заголовка. Исходные модели (NeoX и Pythia 6.9B) обучаются на доступном открытом наборе данных Pile с удалением дубликатов и использованием бэкэнда Megatron и Deepspeed.
Мы демонстрируем предварительное обучение и дообучение этих моделей на базе экземпляров Trn1, основанных на AWS Trainium, с использованием библиотеки Neuron NeMo. Чтобы создать доказательство концепции и осуществить быстрое воспроизведение, мы будем использовать небольшой набор данных из Википедии, токенизированный с использованием GPT2 метода кодирования с использованием байт-парных энкодеров.
Прохождение
Загрузите предварительно токенизированный набор данных из Википедии, как показано ниже:
- Эта статья AI от Имперского колледжа Лондона и Eleuther AI исследует ролевую игру как рамочный подход для понимания поведения диалоговых агентов.
- Этот AI-бюллетень – все, что вам нужно #77
- Что мы знаем о Mixtral 8x7B новая открытая LLM платформа от Mistral
export DATA_DIR=~/examples_datasets/gpt2mkdir -p ${DATA_DIR} && cd ${DATA_DIR}wget https://s3.amazonaws.com/models.huggingface.co/bert/gpt2-vocab.jsonwget https://s3.amazonaws.com/models.huggingface.co/bert/gpt2-merges.txtaws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/my-gpt2_text_document.bin . --no-sign-requestaws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/my-gpt2_text_document.idx . --no-sign-requestaws s3 cp s3://neuron-s3/training_datasets/gpt/wikipedia/license.txt . --no-sign-request
Как для NeoX 20B, так и для Pythia 6.9B используется ROPE с частичным вращением, например, вращение 25% измерений заголовка и сохранение остальных без вращения. Чтобы эффективно реализовать частичное вращение на ускорителе AWS Trainium, вместо объединения вращающихся и невращающихся измерений, мы добавляем нулевые частоты для невращающихся измерений, а затем вращаем полный набор измерений заголовка. Этот простой трюк позволил нам увеличить пропускную способность (обработка последовательностей в секунду) на AWS Trainium.
Шаги обучения
Для запуска обучения мы используем кластер Trn1, управляемый SLURM, в многоузловой среде вычислительного облака Amazon Elastic Compute Cloud (Amazon EC2), где каждый узел содержит экземпляр trn1.32xl. Каждый экземпляр trn1.32xl имеет 16 ускорителей с двумя рабочими процессами на ускоритель. После загрузки последнего пакета Neuron NeMo используйте предоставленные сценарии предварительного обучения и донастройки neox и pythia с оптимизированными гиперпараметрами и выполните следующее для обучения на четырех узлах.
-
Компиляция: Предварительная компиляция модели с тремя итерациями обучения для генерации и сохранения графов:
sbatch --nodes 4 compile.slurm ./neoX_20B_slurm.sh
-
Запуск: Выполнение обучения путем загрузки сохраненных графов из первых шагов
sbatch --nodes 4 run.slurm ./neoX_20B_slurm.sh
-
Мониторинг результатов
tensorboard --logdir=nemo_experiments/megatron_neox
Те же шаги необходимо выполнить для запуска модели Pythia 6.9B путем замены neox_20B_slurm.sh
на pythia_6.9B_slurm.sh
.
Эксперименты по предварительному обучению и донастройке
Мы продемонстрируем предварительное обучение моделей GPT-NeoX и Pythia на AWS Trainium с использованием библиотеки Neuron NeMo в течение 10 тысяч итераций, а также покажем донастройку этих моделей на 1 тысячу шагов. Для предварительного обучения мы используем токенизатор BPE GPT2 внутри NeMo и следуем той же конфигурации, что и в оригинальной модели. Для донастройки на AWS Trainium требуется изменение нескольких параметров (например, коэффициента деления размера словаря), которые предоставляются в сценариях донастройки для учета различий между Megatron и NeMo и изменений GPU и AWS Trainium. Многозадачное распределенное обучение с различным числом узлов показано в таблице-1.
Модель | Тензорное параллелизм | Параллельное конвейерирование | Количество экземпляров | Стоимость ($/час) | Длина последовательности | Глобальный размер пакета | Производительность (посл./сек) | Соотношение стоимости и производительности (токены/$) |
Pythia 6.9B | 8 | 1 | 1 | 7.59 | 2048 | 256 | 10.4 | 10,102,387 |
8 | 1 | 4 | 30.36 | 2048 | 256 | 35.8 | 8,693,881 | |
NeoX 20B | 8 | 4 | 4 | 30.36 | 2048 | 16384 | 13.60 | 3,302,704 |
8 | 4 | 8 | 60.72 | 2048 | 16384 | 26.80 | 3,254,134 | |
8 | 4 | 16 | 121.44 | 2048 | 16384 | 54.30 | 3,296,632 | |
8 | 4 | 32 | 242.88 | 2048 | 16384 | 107.50 | 3,263,241 | |
8 | 4 | 64 | 485.76 | 2048 | 16384 | 212.00 | 3,217,708 |
Таблица 1. Сравнение средней производительности моделей GPT NeoX и Pythia на обучении до 500 шагов с изменением количества узлов. Ценообразование для trn1.32xl основано на 3-летней зарезервированной эффективной ставке в час.
Далее мы также оцениваем траекторию потерь обучения модели на оборудовании AWS Trainium и сравниваем ее с соответствующим запуском на кластере P4d (ядра Nvidia A100 GPU). Вместе с потерями обучения мы также сравниваем полезные показатели, такие как норма градиента, которая представляет собой 2-норму градиентов модели, рассчитываемых на каждой итерации обучения для отслеживания хода обучения. Результаты обучения показаны на рисунках 1, 2 и донастройка NeoX 20B на рисунке 3.
Рисунок 1. Потери обучения, усредненные по всем работникам (слева) и норма градиента (справа) на каждом шаге обучения. Модель NeoX 20B обучается на 4 узлах с небольшим набором данных Википедии на графическом процессоре и Trainium с теми же гиперпараметрами обучения (глобальный размер пакета = 256). Графический процессор использует BF16 и стандартное смешанное представление (mixed-precision), в то время как AWS Trainium использует полный BF16 с стохастическим округлением. Графики потерь и нормы градиента совпадают для графического процессора и AWS Trainium.
Рисунок 2. Потери обучения, усредненные по всем работникам (слева) и норма градиента (справа) на каждом шаге обучения. Как и в случае с GPT NeoX на рисунке 1, модель Pythia 6.9B обучается на 4 узлах с небольшим набором данных Википедии на графическом процессоре и Trainium с теми же гиперпараметрами обучения (глобальный размер пакета = 256). Графики потерь и нормы градиента совпадают для графического процессора и AWS Trainium.
Рисунок 3. Доведение модели GPT NeoX 20B до итогового состояния на графическом процессоре и AWS Trainium с усредненными по всем работникам потерями обучения (слева) и нормой градиента (справа). Для демонстрации доведения использован небольшой набор данных Википедии. Графики потерь и нормы градиента совпадают для графического процессора и AWS Trainium.
В этой статье мы показали эффективное с точки зрения затрат обучение LLM на оборудовании глубокого обучения AWS. Мы обучили модели GPT NeoX 20B и Pythia 6.9B на Trn1 от AWS с использованием библиотеки NeMo Neuron. Нормализованная по стоимости производительность для 20 миллиардов моделей с использованием AWS Trainium составляет около 3.2M токенов/$. Вместе с экономичным обучением на AWS Trainium мы получаем схожую точность модели, что подтверждается потерями на каждом шаге обучения и траекторией нормы градиента. Мы также доводим доступные контрольные точки для модели NeoX 20B на AWS Trainium. Для получения дополнительной информации о распределенном обучении с помощью NeMo Megatron на AWS Trainium см. Ссылку AWS Neuron для NeMo Megatron. Хороший ресурс для начала доведения модели Llama может быть найден здесь, Llama2 доведение. Для начала работы с управляемым AWS Trainium на Amazon SageMaker см. Обучайте ваши модели машинного обучения с AWS Trainium и Amazon SageMaker.