Свяжитесь с нами:

Понимание параметров модели большого языка и требований к памяти: глубокое погружение

Искусственный интеллект

Понимание параметров модели большого языка и требований к памяти: глубокое погружение

mm
Расчет параметров в LLM на основе трансформатора

Большие языковые модели (LLM) добились значительных успехов в последние годы. Такие модели, как GPT-4, Gemini от Google и Claude 3, устанавливают новые стандарты возможностей и приложений. Эти модели не только улучшают генерацию и перевод текста, но и открывают новые горизонты в мультимодальной обработке, объединяя текстовые, графические, аудио- и видеоданные для создания более комплексных решений на основе ИИ.

Например, модель GPT-4 от OpenAI продемонстрировала значительные улучшения в понимании и создании текста, похожего на человеческий, в то время как модели Gemini от Google превосходно справляются с обработкой различных типов данных, включая текст, изображения и аудио, обеспечивая более плавное и контекстно-релевантное взаимодействие. Аналогичным образом, модели Claude 3 от Anthropic известны своей многоязычностью и повышенной производительностью при выполнении задач ИИ.

Поскольку развитие LLM продолжает ускоряться, понимание тонкостей этих моделей, особенно их параметров и требований к памяти, становится решающим. Данное руководство призвано прояснить эти аспекты, предлагая подробное и простое для понимания объяснение.

Основы больших языковых моделей

Что такое большие языковые модели?

Большие языковые модели — это нейронные сети, обученные на огромных наборах данных для понимания и генерации человеческого языка. Они полагаются на такие архитектуры, как «Трансформеры», которые используют такие механизмы, как самообслуживание, для обработки и создания текста.

Важность параметров в LLM

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

Понимание архитектуры трансформатора

Трансформеры-архитектура

Трансформеры Архитектура

Обзор

Архитектура Transformer, представленная в статье Васвани и др. «Внимание — это все, что вам нужно». (2017) стал основой для многих программ LLM. Он состоит из кодера и декодера, каждый из которых состоит из нескольких одинаковых слоев.

Компоненты кодера и декодера

  • кодировщик: обрабатывает входную последовательность и создает контекстно-зависимое представление.
  • дешифратор: Генерирует выходную последовательность, используя представление кодировщика и ранее сгенерированные токены.

Ключевые строительные блоки

  1. Многоголовое внимание: позволяет модели одновременно фокусироваться на разных частях входной последовательности.
  2. Нейронные сети прямого распространения: добавляет модели нелинейность и сложность.
  3. Нормализация слоя: Стабилизирует и ускоряет тренировку за счет нормализации промежуточных результатов.

Вычисление количества параметров

Трансформаторное обучение

Предварительно обученные модели для эффективного обучения трансформаторов

Расчет параметров в LLM на основе трансформатора

Давайте разберём расчёт параметров для каждого компонента модели LLM на основе Transformer. Будем использовать обозначения из оригинальной статьи, где d_model представляет собой размерность скрытых состояний модели.

  1. Встраивание слоя:
    • Параметры = vocab_size * d_model
  2. Многоголовое внимание:
    • При покупке недвижимости h головы, с d_k = d_v = d_model / h:
    • Параметры = 4 * d_model^ 2 (для Q, K, V и прогнозов выхода)
  3. Сеть прямой связи:
    • Параметры = 2 * d_model * d_ff + d_model + d_ff
    • где d_ff обычно 4 * d_model
  4. Нормализация слоя:
    • Параметры = 2 * d_model (для масштаба и предвзятости)

Общие параметры для одного слоя Трансформера:

  • Parameters_layer = Parameters_attention + Parameters_ffn + 2 * Parameters_layernorm

Для модели с N слои:

  • Общие параметры = N * Parameters_layer + Parameters_embedding + Parameters_output

Пример расчета

Рассмотрим модель со следующими характеристиками:

  • d_model = 768
  • h (количество голов внимания) = 12
  • N (количество слоев) = 12
  • vocab_size = 50,000
  1. Встраивание слоя:
    • 50,000 * 768 = 38,400,000
  2. Многоголовое внимание:
    • 4 * 768^2 = 2,359,296
  3. Сеть прямой связи:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616 XNUMX XNUMX
  4. Нормализация слоя:
    • 2 * 768 = 1,536

Общие параметры на слой:

  • 2,359,296 4,719,616 2 + 1,536 7,081,984 XNUMX + (XNUMX * XNUMX XNUMX) = XNUMX XNUMX XNUMX

Общие параметры для 12 слоев:

  • 12 * 7,081,984 = 84,983,808

Общие параметры модели:

  • 84,983,808 + 38,400,000 = 123,383,808

Эта модель будет иметь около 123 миллионов параметров.

Типы использования памяти

При работе с LLM нам необходимо учитывать два основных типа использования памяти:

  1. Модель памяти: Память, необходимая для хранения параметров модели.
  2. Рабочей памяти: память, необходимая во время вывода или обучения для хранения промежуточных активаций, градиентов и состояний оптимизатора.

Расчет памяти модели

Память модели напрямую связана с количеством параметров. Каждый параметр обычно хранится в виде 32-битного числа с плавающей запятой, хотя в некоторых моделях используется обучение смешанной точности с 16-битными числами с плавающей запятой.

Память модели (байты) = количество параметров * байт на параметр

Для нашей примерной модели со 123 миллионами параметров:

  • Память модели (32-битная) = 123,383,808 4 493,535,232 * 494 байта = XNUMX XNUMX XNUMX байта ≈ XNUMX МБ
  • Память модели (16-битная) = 123,383,808 2 246,767,616 * 247 байта = XNUMX XNUMX XNUMX байта ≈ XNUMX МБ

Оценка рабочей памяти

Требования к рабочей памяти могут значительно различаться в зависимости от конкретной задачи, размера пакета и длины последовательности. Грубая оценка рабочей памяти во время вывода:

Рабочая память ≈ 2 * Память модели

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

Тренировочная память ≈ 4 * Модельная память

Для нашей примерной модели:

  • Рабочая память вывода ≈ 2 * 494 МБ = 988 МБ ≈ 1 ГБ
  • Тренировочная память ≈ 4 * 494 МБ = 1,976 МБ ≈ 2 ГБ

Устойчивое использование памяти и пиковое использование памяти

При обучении больших языковых моделей на основе архитектуры Transformer понимание использования памяти критически важно для эффективного распределения ресурсов. Давайте разделим требования к памяти на две основные категории: использование памяти в устойчивом состоянии и пиковое использование памяти.

Устойчивое использование памяти

Стационарное использование памяти включает в себя следующие компоненты:

  1. Вес модели: копии параметров модели FP32, требующие 4N байт, где N — количество параметров.
  2. Состояния оптимизатора: Для оптимизатора Адама это требует 8N байт (2 состояния на параметр).
  3. Градиенты: копии градиентов FP32, требующие 4N байт.
  4. Входные данные: Предполагая, что входные данные имеют тип int64, для этого требуется 8BD байт, где B — размер пакета, а D — входное измерение.

Общее использование памяти в устойчивом состоянии можно приблизительно определить следующим образом:

  • M_steady = 16N + 8BD байт

Использование пиковой памяти

Пиковое использование памяти происходит во время обратного прохода, когда сохраняются активации для вычисления градиента. Основными факторами, влияющими на пиковую память, являются:

  1. Нормализация слоя: требуется 4E байта на норму слоя, где E = BSH (B: размер пакета, S: длина последовательности, H: скрытый размер).
  2. Блок внимания:
    • Вычисление QKV: 2E байта
    • Матрица внимания: 4 байта BSS (S: длина последовательности)
    • Выход внимания: 2E байта
  3. Блок прямой связи:
    • Первый линейный уровень: 2E байта.
    • Активация GELU: 8E байт
    • Второй линейный уровень: 2E байта.
  4. Кросс-энтропийная потеря:
    • Логиты: 6BSV байт (V: размер словаря)

Общий объем памяти активации можно оценить как:

  • M_act = L * (14E + 4BSS) + 6BSV байт

Где L — количество слоев трансформатора.

Общее пиковое использование памяти

Пиковое использование памяти во время тренировки можно приблизительно определить, объединив устойчивую память и память активации:

  • M_peak = M_steady + M_act + 4BSV байта

Дополнительный термин 4BSV учитывает дополнительное выделение в начале обратного прохода.

Понимая эти компоненты, мы можем оптимизировать использование памяти во время обучения и вывода, обеспечивая эффективное распределение ресурсов и повышение производительности больших языковых моделей.

Законы масштабирования и соображения эффективности

 Законы масштабирования для LLM

Исследования показали, что производительность LLM имеет тенденцию подчиняться определенным законам масштабирования по мере увеличения количества параметров. Каплан и др. (2020) заметили, что производительность модели улучшается по степенному закону количества параметров, вычислительного бюджета и размера набора данных.

Взаимосвязь между производительностью модели и количеством параметров можно аппроксимировать следующим образом:

Производительность ∝ N^α

Где N — количество параметров, а α — показатель масштабирования, обычно около 0.07 для задач моделирования языка.

Это означает, что для достижения улучшения производительности на 10% нам необходимо увеличить количество параметров в 10^(1/α) ≈ 3.7 раза.

Методы повышения эффективности

Поскольку LLM продолжает расти, исследователи и практики разработали различные методы повышения эффективности:

a) Тренировка смешанной точности: использование 16-битных или даже 8-битных чисел с плавающей запятой для определенных операций для уменьшения использования памяти и вычислительных требований.

b) Параллелизм модели: Распределение модели по нескольким графическим процессорам или TPU для обработки более крупных моделей, чем может поместиться на одном устройстве.

c) Градиентная контрольная точка: Обмен вычислений на память путем повторного расчета определенных активаций во время обратного прохода вместо их сохранения.

d) Отсечение и квантование: удаление менее важных весов или снижение их точности после тренировки для создания меньших по размеру и более эффективных моделей.

e) Перегонка: Обучение меньших моделей имитированию поведения более крупных моделей, потенциально сохраняя большую часть производительности при меньшем количестве параметров.

Практический пример и расчеты

GPT-3, одна из крупнейших языковых моделей, имеет 175 миллиардов параметров. Он использует декодерную часть архитектуры Transformer. Чтобы понять его масштаб, давайте разобьем количество параметров на гипотетические значения:

  • d_model = 12288
  • d_ff = 4 * 12288 = 49152
  • Количество слоев = 96

Для одного слоя декодера:

Общие параметры = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 миллиарда.

Итого для 96 слоев:

1.1 миллиард * 96 = 105.6 миллиарда

Остальные параметры берутся из встраивания и других компонентов.

Заключение

Понимание параметров и требований к памяти больших языковых моделей имеет решающее значение для эффективного проектирования, обучения и развертывания этих мощных инструментов. Разбирая компоненты архитектуры Transformer и изучая практические примеры, такие как GPT, мы получаем более глубокое понимание сложности и масштаба этих моделей.

Чтобы лучше понять последние достижения в области больших языковых моделей и их приложений, ознакомьтесь с этими подробными руководствами:

Последние пять лет я погружался в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и опыт позволили мне принять участие в более чем 50 различных проектах по разработке программного обеспечения, уделяя особое внимание AI/ML. Мое постоянное любопытство также привлекло меня к обработке естественного языка, области, которую я очень хочу исследовать дальше.