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

By
Aayush Mittal Mittal
Большие языковые модели (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. Она состоит из кодировщика и декодировщика, каждый из которых состоит из нескольких идентичных слоев.
Компоненты кодировщика и декодировщика
- Кодирующий: Обрабатывает входную последовательность и создает контекстно-осведомленное представление.
- Декодирующий: Генерирует выходную последовательность, используя представление кодировщика и предыдущие сгенерированные токены.
Ключевые строительные блоки
- Много-головое внимание: Позволяет модели сосредоточиться на разных частях входной последовательности одновременно.
- Сети прямого распространения: Добавляет нелинейность и сложность модели.
- Нормализация слоев: Стабилизирует и ускоряет обучение, нормализуя промежуточные выходы.
Расчет количества параметров
Расчет параметров в Трансформер-основанных LLM
Давайте разберем расчет параметров для каждого компонента Трансформер-основанной LLM. Мы будем использовать обозначения из оригинальной статьи, где d_model представляет размерность скрытых состояний модели.
- Слой вложения:
- Параметры =
vocab_size*d_model
- Параметры =
- Много-головое внимание:
- Для
hголов, сd_k = d_v = d_model / h: - Параметры = 4 *
d_model^2 (для Q, K, V и выходных проекций)
- Для
- Сеть прямого распространения:
- Параметры = 2 *
d_model*d_ff+d_model+d_ff - Где
d_ffобычно равен 4 *d_model
- Параметры = 2 *
- Нормализация слоев:
- Параметры = 2 *
d_model(для масштабирования и смещения)
- Параметры = 2 *
Общее количество параметров для одного слоя Трансформера:
Parameters_layer=Parameters_attention+Parameters_ffn+ 2 *Parameters_layernorm
Для модели с N слоями:
- Общее количество параметров =
N*Parameters_layer+Parameters_embedding+Parameters_output
Пример расчета
Давайте рассмотрим модель со следующими спецификациями:
d_model= 768h(количество голов внимания) = 12N(количество слоев) = 12vocab_size= 50 000
- Слой вложения:
- 50 000 * 768 = 38 400 000
- Много-головое внимание:
- 4 * 768^2 = 2 359 296
- Сеть прямого распространения:
- 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4 719 616
- Нормализация слоев:
- 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 необходимо учитывать два основных типа использования памяти:
- Память модели: Память, необходимая для хранения параметров модели.
- Рабочая память: Память, необходимая во время вывода или обучения для хранения промежуточных активаций, градиентов и состояний оптимизатора.
Расчет памяти модели
Память модели напрямую связана с количеством параметров. Каждый параметр обычно хранится как 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 ГБ
Постоянное использование памяти и пиковое использование памяти
При обучении больших языковых моделей на основе архитектуры Трансформера понимание использования памяти имеет решающее значение для эффективного распределения ресурсов. Давайте разберем требования к памяти на две основные категории: постоянное использование памяти и пиковое использование памяти.
Постоянное использование памяти
Постоянное использование памяти состоит из следующих компонентов:
- Веса модели: Копии параметров модели в формате FP32, требующие 4N байтов, где N – количество параметров.
- Состояния оптимизатора: Для оптимизатора Adam требуется 8N байтов (2 состояния на параметр).
- Градиенты: Копии градиентов в формате FP32, требующие 4N байтов.
- Входные данные: Предполагая входные данные в формате int64, это требует 8BD байтов, где B – размер пакета, а D – размерность входных данных.
Общее постоянное использование памяти можно оценить как:
- M_steady = 16N + 8BD байтов
Пиковое использование памяти
Пиковое использование памяти происходит во время обратного прохода, когда хранятся активации для вычисления градиентов. Основными вкладчиками в пиковое использование памяти являются:
- Нормализация слоев: Требует 4E байтов на слой нормализации, где E = BSH (B – размер пакета, S – длина последовательности, H – размерность скрытых состояний).
- Блок внимания:
- Вычисление QKV: 2E байтов
- Матрица внимания: 4BSS байтов (S – длина последовательности)
- Выход внимания: 2E байтов
- Блок прямого распространения:
- Первый линейный слой: 2E байтов
- Активация GELU: 8E байтов
- Второй линейный слой: 2E байтов
- Функция потерь:
- Логиты: 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 = 12288d_ff = 4 * 12288 = 49152- Количество слоев = 96
Для одного слоя декодировщика:
Общее количество параметров = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1,1 миллиарда
Общее количество параметров для 96 слоев:
1,1 миллиарда * 96 = 105,6 миллиарда
Остальные параметры приходятся на слой вложения и другие компоненты.
Заключение
Понимание параметров и требований к памяти больших языковых моделей имеет решающее значение для эффективного проектирования, обучения и развертывания этих мощных инструментов. Разбивая компоненты архитектуры Трансформера и изучая практические примеры, такие как GPT, мы получаем более глубокое понимание сложности и масштаба этих моделей.
Чтобы глубже понять последние достижения в области больших языковых моделей и их применения, ознакомьтесь с этими всесторонними гидами:
- Изучите полное руководство по Gemma 2: новой открытой большой языковой модели Google для получения информации о ее улучшенной производительности и инновационных функциях.
- Узнайте о построении агентов LLM для RAG с нуля и далее: всесторонний гид, который обсуждает проблемы и решения в генерации, дополненной извлечением.
- Откройте для себя тонкости настройки обучения, тонкой настройки и вывода LLM с помощью NVIDIA GPU и CUDA (NVDA ) для оптимизации систем ИИ.
Я провел последние пять лет, погружаясь в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и экспертиза привели меня к участию в более чем 50 различных проектах программной инженерии, с особым акцентом на ИИ/МО. Мое непрекращающееся любопытство также привело меня к обработке естественного языка, области, которую я с нетерпением жду возможности изучить дальше.
Узнать больше


Если бот может флиртовать с детьми, что еще он может делать с вашими данными?


Как обмануть абсурдными научными статьями рецензентов ИИ


Модели ИИ предпочитают человеческие тексты генерируемым ИИ


Революция MoE: Как продвинутый маршрутизатор и специализация меняют LLM


Конец эры масштабирования: почему прорывы в алгоритмах важнее, чем размер модели


Почему ИИ не может просто признать, что не знает ответа?

