Connect with us

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

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

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

mm
Calculating Parameters in Transformer-based LLMs

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

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

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

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

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

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

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

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

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

Transformers-architecture

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

Обзор

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

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

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

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

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

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

Transformer Training

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

Расчет параметров в Трансформер-основанных 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 (для масштабирования и смещения)

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

  • Параметры_слоя = Параметры_внимания + Параметры_сети + 2 * Параметры_нормализации

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

  • Общее количество параметров = N * Параметры_слоя + Параметры_вложения + Параметры_выхода

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

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

  • 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_постоянная = 16N + 8BD байтов

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

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

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

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

  • M_активация = L * (14E + 4BSS) + 6BSV байтов

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

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

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

  • M_пик = M_постоянная + M_активация + 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, мы получаем более глубокое понимание сложности и масштаба этих моделей.

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

Я провел последние пять лет, погружаясь в увлекательный мир Machine Learning и Deep Learning. Моя страсть и экспертиза привели меня к участию в более чем 50 различных проектах по разработке программного обеспечения, с особым акцентом на AI/ML. Мое непрекращающееся любопытство также привело меня к Natural Language Processing, области, которую я с нетерпением жду возможности изучить более подробно.