Модели и платформы ИИ

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

mm
Добавьте Unite.AI в избранные источники в Google

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

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

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

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

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

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

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

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

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

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

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

Обзор

Архитектура Трансформера, представленная в статье “Attention Is All You Need” Васвани и др. (2017), стала основой для многих LLM. Она состоит из кодировщика и декодировщика, каждый из которых состоит из нескольких идентичных слоев.

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

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

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

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

Расчет количества параметров

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

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

Расчет параметров в Трансформер-основанных LLM

Давайте разберем расчет параметров для каждого компонента Трансформер-основанной LLM. Мы будем использовать обозначения из оригинальной статьи, где 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
  4. Нормализация слоев:
    • 2 * 768 = 1 536

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

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

Общее количество параметров для 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 МБ
  • Память модели (16-бит) = 123 383 808 * 2 байта = 246 767 616 байтов ≈ 247 МБ

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

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

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

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

Память обучения ≈ 4 * Память модели

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

  • Рабочая память ≈ 2 * 494 МБ = 988 МБ ≈ 1 ГБ
  • Память обучения ≈ 4 * 494 МБ = 1 976 МБ ≈ 2 ГБ

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

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

Постоянное использование памяти

Постоянное использование памяти состоит из следующих компонентов:

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

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

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

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

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

  1. Нормализация слоев: Требует 4E байтов на слой нормализации, где E = BSH (B – размер пакета, S – длина последовательности, H – размерность скрытых состояний).
  2. Блок внимания:
    • Вычисление QKV: 2E байтов
    • Матрица внимания: 4BSS байтов (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 склонна следовать определенным масштабирующим законам по мере увеличения количества параметров. Kaplan и др. (2020) наблюдали, что производительность модели улучшается как степенная функция количества параметров, вычислительного бюджета и размера набора данных.

Отношение между производительностью модели и количеством параметров можно оценить как:

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

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

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

Техники эффективности

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

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

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

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

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

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

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

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

  • 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 миллиарда

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

Заключение

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

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

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