Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA. Big Data.. Big Data. llm.. Big Data. llm. lora.. Big Data. llm. lora. NF4.. Big Data. llm. lora. NF4. QLoRA.. Big Data. llm. lora. NF4. QLoRA. Алгоритмы.. Big Data. llm. lora. NF4. QLoRA. Алгоритмы. высоконагруженные системы.. Big Data. llm. lora. NF4. QLoRA. Алгоритмы. высоконагруженные системы. квантизация.. Big Data. llm. lora. NF4. QLoRA. Алгоритмы. высоконагруженные системы. квантизация. Машинное обучение.. Big Data. llm. lora. NF4. QLoRA. Алгоритмы. высоконагруженные системы. квантизация. Машинное обучение. Облачные вычисления.. Big Data. llm. lora. NF4. QLoRA. Алгоритмы. высоконагруженные системы. квантизация. Машинное обучение. Облачные вычисления. оптимизация моделей.

Большие языковые модели требуют огромных объёмов памяти. Например, модель с 8 миллиардами параметров в формате FP16 занимает 24–27 ГБ памяти только для инференса (веса, кэш ключей-значений, буферы). Для полного обучения той же модели нужно уже 84–128 ГБ памяти. Даже с такими методами, как checkpointing активаций или offloading на CPU, требования остаются высокими, особенно для моделей с 70 миллиардами параметров.

Квантизация помогает снизить требования к памяти, уменьшая точность представления весов модели без значительной потери качества. В этой статье разберём основные форматы числовой точности, используемые в квантизации LLM, их особенности и ограничения. Также рассмотрим NF4 — ключевую инновацию из статьи про QLoRA, и разберём, зачем нужны такие методы, как блочная квантизация, двойная квантизация и квантизация по квантилям.

Если вам интересна тема AI-агентов и внедрения нейросетей, заглядывайте в мой Telegram-канал ДругОпенсурса. Там я публикую свежие новости и разборы инструментов в числе первых. |

Начнём с краткого обзора LoRA – метода, который уже значительно сокращает требования к памяти и вычислениям при обучении LLM.

Представление чисел с плавающей точкой

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 1

В школе мы привыкли к десятичной научной нотации: число записывается как мантисса (дробная часть) и порядок (степень 10). Например, 3000 = 3 × 10³. Мантисса определяет точность, порядок – диапазон.

В компьютерах используются двоичные форматы: FP32, BF16 и другие. Число представляется как мантисса × 2^порядок. Мантисса и порядок записываются в двоичном виде.

FP32 (“одинарная точность”)

  • 1 бит на знак

  • 8 бит на порядок

  • 23 бита на мантиссу

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 2

Для представления отрицательных порядков используется смещение (bias). В FP32 оно равно 127. Например, порядок -1 хранится как 126 (127 – 1), а порядок +1 – как 128 (127 + 1). Это упрощает сравнение чисел.

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 3

Диапазон FP32:

  • Максимальное число: ≈ 3.4 × 10³⁸

  • Минимальное положительное число: ≈ 1.18 × 10⁻³⁸

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 4

FP16 (“половинная точность”)

  • 1 бит на знак

  • 5 бит на порядок

  • 10 бит на мантиссу

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 5

Диапазон FP16 значительно меньше: от ≈ 6.5 × 10⁻⁵ до ≈ 6.5 × 10⁴. Для глубокого обучения это проблема: градиенты и активации могут выходить за эти пределы (переполнение или потеря значимости). В статье “Mixed Precision Training” (ICLR 2018) предлагались обходные решения, например, масштабирование потерь, но они не всегда эффективны.

BF16

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 6

Решение проблемы диапазона: оставим 8 бит на порядок (как в FP32), но сократим мантиссу до 7 бит. Диапазон BF16 совпадает с FP32, поэтому при конвертации из FP32 в BF16 не требуется дополнительная настройка модели. Как показано в статье Facebook и Intel (2019), BF16 не уступает FP32 по качеству, в отличие от FP16.

Целочисленная квантизация: INT8

Впервые использована Google в 2018 году, затем адаптирована для NLP в модели Q8BERT (Intel Labs, 2019). Позволяет сократить размер модели в 4 раза и ускорить инференс за счёт целочисленной арифметики.

Как работает квантизация из FP32/BF16 в INT8

  1. Задаём диапазон значений (например, симметричный от -M до +M). Предполагаем, что значения вне диапазона редки или неважны.

  2. Определяем количество уровней квантизации: для INT8 это 2⁸ = 256.

  3. Вычисляем шаг квантизации: шаг = диапазон / уровни.

  4. Квантизуем число:

  • Делим на шаг

  • Округляем до ближайшего целого

    Пример из Q8BERT:

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 7
  • Используются симметричные уровни от -127 до +127.

  • Масштабный коэффициент (scaling factor) вычисляется как M / 127.

Проблемы равномерной квантизации

Веса трансформеров распределены неравномерно: есть пик около нуля и длинные хвосты (приблизительно гауссово распределение). При равномерной квантизации:

  • Большинство уровней остаются пустыми.

  • Уровни около нуля перегружены, что приводит к большим ошибкам реконструкции.

Для INT8 с 256 уровнями это ещё терпимо. Для INT4 (16 уровней) проблема становится критической.

NF4: квантизация по квантилям

NF4 (NormalFloat 4-bit) предложена в статье про QLoRA. Основная идея: сделать так, чтобы в каждом уровне квантизации было одинаковое количество значений. Это оптимально с точки зрения теории информации.

Как работает NF4

  1. Веса трансформеров центрированы вокруг нуля и распределены по нормальному закону.

  2. Масштабируем их так, чтобы они соответствовали стандартному нормальному распределению N(0,1).

  3. Вычисляем квантили для 16 уровней (INT4) с помощью функции квантилей стандартного нормального распределения.

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 8

Преимущества:

  • Работает даже при обучении (в отличие от INT4, которая ломает градиенты).

  • Оптимально распределяет ошибки квантизации.

Блочная квантизация и двойная квантизация

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

Решение: разбить тензор на блоки и квантизовать каждый блок отдельно. Чем меньше блок, тем меньше ошибка квантизации, но тем больше нужно хранить масштабных коэффициентов.

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 9

Двойная квантизация

Проблема: масштабные коэффициенты для блоков хранятся в FP32 (32 бита на коэффициент). Для модели с миллиардами параметров это значительные накладные расходы.

Решение: квантизовать сами масштабные коэффициенты в INT8. Поскольку они меняются медленнее, чем веса, можно использовать больший размер блока (например, 256). Это сокращает накладные расходы с 0.5 до 0.127 бит на параметр.

LoRA: низкоранговая адаптация

Статья от Microsoft (2021): “LoRA: Low-Rank Adaptation of Large Language Models”.

Идея: вместо полного дообучения модели дообучать только небольшую часть весов.

Как работает:

  1. Веса трансформера (например, матрицы Wq, Wk, Wv) заморожены.

  2. Добавляются две низкоранговые матрицы A и B (размерности M×r и r×N, где r << M, N).

  3. При дообучении обновляются только A и B.

  4. Результат добавляется к исходным весам: W + AB.

Преимущества:

  • Сокращает количество обучаемых параметров на несколько порядков.

  • Не добавляет задержку при инференсе.

QLoRA: квантизация + LoRA

QLoRA (2023) объединяет NF4, блочную двойную квантизацию и LoRA.

Квантизация больших языковых моделей: FP32, BF16, INT8, NF4 и QLoRA - 10

Характерные моменты:

  1. Веса модели хранятся в NF4.

  2. Все вычисления проводятся в BF16.

  3. Для инференса веса деквантизуются в BF16.

  4. Используется блочная двойная квантизация для масштабных коэффициентов.

    Несколько ключевых шагов :

Код для ноутбука HF — 1: загрузите исходную модель, но с k-битной точностью

Код для ноутбука HF — 1: загрузите исходную модель, но с k-битной точностью
Код HF notebook-2: предварительная обработка модели перед тонкой настройкой: замораживание базовой модели; предобразование всех слоев нормализации в формат FP32, так как они очень чувствительны к ошибкам; включение контрольных точек градиента и т.д.

Код HF notebook-2: предварительная обработка модели перед тонкой настройкой: замораживание базовой модели; предобразование всех слоев нормализации в формат FP32, так как они очень чувствительны к ошибкам; включение контрольных точек градиента и т.д.
 Код HF Notebook -3. ПРИМЕЧАНИЕ — мы не объединяем их с исходной моделью . Это делается с помощью функции merge_and_unload() и обычно не требуется.

Код HF Notebook -3. ПРИМЕЧАНИЕ — мы не объединяем их с исходной моделью . Это делается с помощью функции merge_and_unload() и обычно не требуется.

Память и оптимизаторы

Если памяти GPU не хватает, QLoRA использует страничные оптимизаторы от NVIDIA: данные автоматически перемещаются между CPU и GPU постранично.

Результаты

  • NF4 превосходит INT4 по качеству.

  • QLoRA почти не уступает LoRA по качеству, но требует значительно меньше памяти.

QA-LoRA: квантизация для инференса

Проблема QLoRA: при инференсе нужно деквантизовать веса в BF16, что замедляет работу. Кроме того, для NF4 нет аппаратных оптимизаций, поэтому даже обучение идёт медленнее.

Решение: QA-LoRA (2023). Использует стандартный INT4 для ускорения вычислений и получает квантизованную модель на выходе, пригодную для edge-устройств. Улучшает качество квантизации за счёт балансировки степеней свободы LoRA и квантизации.

Заключение

Квантизация — ключевой инструмент для работы с большими языковыми моделями. Методы вроде NF4 и QLoRA позволяют значительно сократить требования к памяти без потери качества. QA-LoRA решает проблему медленного инференса, открывая дорогу для развёртывания моделей на устройствах с ограниченными ресурсами.

Автор: Qwertcoser

Источник