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

By
Аюш Миттал Mittal
Большие языковые модели (LLM) добились значительных успехов в последние годы. Такие модели, как GPT-4, Gemini от Google и Claude 3, устанавливают новые стандарты возможностей и приложений. Эти модели не только улучшают генерацию и перевод текста, но и открывают новые горизонты в мультимодальной обработке, объединяя текстовые, графические, аудио- и видеоданные для создания более комплексных решений на основе ИИ.
Например, модель GPT-4 от OpenAI продемонстрировала значительные улучшения в понимании и создании текста, похожего на человеческий, в то время как модели Gemini от Google превосходно справляются с обработкой различных типов данных, включая текст, изображения и аудио, обеспечивая более плавное и контекстно-релевантное взаимодействие. Аналогичным образом, модели Claude 3 от Anthropic известны своей многоязычностью и повышенной производительностью при выполнении задач ИИ.
Поскольку развитие LLM продолжает ускоряться, понимание тонкостей этих моделей, особенно их параметров и требований к памяти, становится решающим. Данное руководство призвано прояснить эти аспекты, предлагая подробное и простое для понимания объяснение.
Основы больших языковых моделей
Что такое большие языковые модели?
Большие языковые модели — это нейронные сети, обученные на огромных наборах данных для понимания и генерации человеческого языка. Они полагаются на такие архитектуры, как «Трансформеры», которые используют такие механизмы, как самообслуживание, для обработки и создания текста.
Важность параметров в LLM
Параметры являются основными компонентами этих моделей. Они включают в себя веса и смещения, которые модель корректирует в процессе обучения для минимизации ошибок прогнозов. Количество параметров часто коррелирует с производительностью и производительностью модели, но также влияет на её вычислительные ресурсы и требования к памяти.
Понимание архитектуры трансформатора
Обзор
Архитектура Transformer, представленная в статье Васвани и др. «Внимание — это все, что вам нужно». (2017) стал основой для многих программ LLM. Он состоит из кодера и декодера, каждый из которых состоит из нескольких одинаковых слоев.
Компоненты кодера и декодера
- кодировщик: обрабатывает входную последовательность и создает контекстно-зависимое представление.
- дешифратор: Генерирует выходную последовательность, используя представление кодировщика и ранее сгенерированные токены.
Ключевые строительные блоки
- Многоголовое внимание: позволяет модели одновременно фокусироваться на разных частях входной последовательности.
- Нейронные сети прямого распространения: добавляет модели нелинейность и сложность.
- Нормализация слоя: Стабилизирует и ускоряет тренировку за счет нормализации промежуточных результатов.
Вычисление количества параметров
Расчет параметров в LLM на основе трансформатора
Давайте разберём расчёт параметров для каждого компонента модели LLM на основе Transformer. Будем использовать обозначения из оригинальной статьи, где 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 XNUMX XNUMX
- Нормализация слоя:
- 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 нам необходимо учитывать два основных типа использования памяти:
- Модель памяти: Память, необходимая для хранения параметров модели.
- Рабочей памяти: память, необходимая во время вывода или обучения для хранения промежуточных активаций, градиентов и состояний оптимизатора.
Расчет памяти модели
Память модели напрямую связана с количеством параметров. Каждый параметр обычно хранится в виде 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 понимание использования памяти критически важно для эффективного распределения ресурсов. Давайте разделим требования к памяти на две основные категории: использование памяти в устойчивом состоянии и пиковое использование памяти.
Устойчивое использование памяти
Стационарное использование памяти включает в себя следующие компоненты:
- Вес модели: копии параметров модели FP32, требующие 4N байт, где N — количество параметров.
- Состояния оптимизатора: Для оптимизатора Адама это требует 8N байт (2 состояния на параметр).
- Градиенты: копии градиентов FP32, требующие 4N байт.
- Входные данные: Предполагая, что входные данные имеют тип int64, для этого требуется 8BD байт, где B — размер пакета, а D — входное измерение.
Общее использование памяти в устойчивом состоянии можно приблизительно определить следующим образом:
- M_steady = 16N + 8BD байт
Использование пиковой памяти
Пиковое использование памяти происходит во время обратного прохода, когда сохраняются активации для вычисления градиента. Основными факторами, влияющими на пиковую память, являются:
- Нормализация слоя: требуется 4E байта на норму слоя, где E = BSH (B: размер пакета, S: длина последовательности, H: скрытый размер).
- Блок внимания:
- Вычисление QKV: 2E байта
- Матрица внимания: 4 байта BSS (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 имеет тенденцию подчиняться определенным законам масштабирования по мере увеличения количества параметров. Каплан и др. (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 = 12288d_ff = 4 * 12288 = 49152- Количество слоев = 96
Для одного слоя декодера:
Общие параметры = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 миллиарда.
Итого для 96 слоев:
1.1 миллиард * 96 = 105.6 миллиарда
Остальные параметры берутся из встраивания и других компонентов.
Заключение
Понимание параметров и требований к памяти больших языковых моделей имеет решающее значение для эффективного проектирования, обучения и развертывания этих мощных инструментов. Разбирая компоненты архитектуры Transformer и изучая практические примеры, такие как GPT, мы получаем более глубокое понимание сложности и масштаба этих моделей.
Чтобы лучше понять последние достижения в области больших языковых моделей и их приложений, ознакомьтесь с этими подробными руководствами:
- Изучите полное руководство по Джемме 2: Новая открытая модель большого языка Google для получения информации о его улучшенной производительности и инновационных функциях.
- Узнайте о создании агентов LLM для RAG с нуля и за его пределами.: Полное руководство в котором обсуждаются проблемы и решения в области генерации с расширенным поиском.
- Откройте для себя тонкости Настройка обучения, тонкой настройки и вывода LLM с помощью графических процессоров NVIDIA и CUDA для оптимизации систем искусственного интеллекта.
Последние пять лет я погружался в увлекательный мир машинного обучения и глубокого обучения. Моя страсть и опыт позволили мне принять участие в более чем 50 различных проектах по разработке программного обеспечения, уделяя особое внимание AI/ML. Мое постоянное любопытство также привлекло меня к обработке естественного языка, области, которую я очень хочу исследовать дальше.
Вам может понравиться
-


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


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


Революция MoE: как расширенная маршрутизация и специализация трансформируют программы магистратуры права
-


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


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


Нейросимволический сдвиг: почему чистые LLM-степени натыкаются на стену

