Перейти к содержанию
Публикация AiManual

QLoRA и 4-битная квантизация: запуск и дообучение LLM на потребительском GPU в 2026

Практическое руководство по QLoRA и 4-битной квантизации: форматы FP4/NF4, двойная квантизация, настройка BitsAndBytesConfig и дообучение моделей от 7B до 65B н

Коротко

Что будет в материале

  1. 01

    Введение: почему 4-битная квантизация и QLoRA стали must-have в 2026

  2. 02

    Основы 4-битной квантизации: FP4, NF4 и двойная квантизация

  3. 03

    QLoRA: эффективное дообучение с 4-битной основой

  4. 04

    Практическое применение: загрузка 4-битных моделей с BitsAndBytesConfig

Модель Llama 7B в 16-битном формате занимает около 14 ГБ видеопамяти только под веса. Для дообучения нужно в 3-4 раза больше: градиенты, состояния оптимизатора, активации. Итоговая цифра упирается в 40-50 ГБ VRAM, что автоматически отсекает владельцев RTX 4080, 4090 и тем более карт с 16 ГБ. QLoRA решает эту проблему через комбинацию 4-битной квантизации базовой модели и низкоранговых адаптеров. На практике это позволяет дообучать модели на 7-65 миллиардов параметров на одной видеокарте с 16 ГБ памяти.

В статье разобраны форматы FP4 и NF4, двойная квантизация, оптимизаторы с управлением памятью и настройка BitsAndBytesConfig. Приведены рабочие конфигурации для Llama 7B и 13B, бенчмарки использования памяти и скорости. Материал ориентирован на ML-инженеров и разработчиков, которые хотят запускать дообучение LLM на локальном железе без аренды A100.

Введение: почему 4-битная квантизация и QLoRA стали must-have в 2026

Рост размеров LLM продолжает опережать рост доступной видеопамяти. Флагманские открытые модели уже перешагнули отметку в 70B параметров, а MoE-архитектуры вроде Qwen3.6-35B-A3B требуют переосмысления подходов к обучению и инференсу. Параллельно сообщество сместило фокус с погони за максимальным качеством на практическую применимость: модель должна работать на железе, которое есть у разработчика, а не только в дата-центре.

4-битная квантизация сжимает веса модели в четыре раза относительно 16-битного представления. QLoRA добавляет к этому механизм дообучения, при котором базовая модель остаётся замороженной в 4-битном виде, а обучаются только небольшие LoRA-адаптеры в 16-битной точности. Результат: модель 65B помещается в память одной карты на 48 ГБ, а 7B и 13B комфортно дообучаются на GPU с 16 ГБ. Это и сделало QLoRA стандартом для независимых разработчиков и небольших команд в 2026 году.

Основы 4-битной квантизации: FP4, NF4 и двойная квантизация

Квантизация снижает точность чисел, которыми представлены веса модели. Вместо 16-битных чисел с плавающей точкой используются 4-битные. Прямое преобразование float16 в int4 даёт катастрофическое падение качества, поэтому применяются специальные форматы, учитывающие распределение весов.

FP4: 4-битный формат с плавающей точкой

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

NF4: нормализованный 4-битный формат

NF4 решает проблему распределения через нормализацию. Вместо фиксированного диапазона чисел NF4 использует квантили нормального распределения. Каждое 4-битное значение соответствует не равному отрезку числовой оси, а участку, который содержит одинаковую долю весов модели. Это позволяет точнее представлять значения в области высокой плотности распределения и грубее на хвостах. На практике NF4 даёт меньшее падение качества по сравнению с FP4, особенно на моделях с выраженной концентрацией весов около нуля.

Двойная квантизация: сжатие констант квантизации

При квантизации весов для каждого блока параметров хранятся константы масштабирования. Для блока из 64 весов в 4-битном формате требуется одна 16-битная константа. Это добавляет примерно 0.5 бита на параметр. Двойная квантизация сжимает сами константы: они квантизуются до 8 бит, что снижает накладные расходы до примерно 0.127 бита на параметр. Для модели 7B экономия составляет около 300 МБ VRAM. Для 65B модели выигрыш достигает 3 ГБ. Это критично, когда каждый гигабайт на счету.

QLoRA: эффективное дообучение с 4-битной основой

QLoRA соединяет 4-битную квантизацию с методом LoRA. Базовая модель квантизуется до 4 бит и замораживается: её веса не обновляются во время обучения. Обучаемые параметры добавляются в каждый слой в виде низкоранговых матриц, которые обучаются в 16-битной точности. После обучения адаптеры можно хранить отдельно и подключать к разным базовым моделям.

Архитектура QLoRA: замороженная основа и адаптеры

LoRA-адаптер для линейного слоя представляет собой пару матриц A и B. Матрица A имеет размерность d_in × r, матрица B - r × d_out, где r - ранг адаптера. Вместо обновления полной матрицы весов W размером d_in × d_out обучается произведение A и B, которое добавляется к выходу замороженного слоя. При r = 16 количество обучаемых параметров для слоя с d_in = d_out = 4096 составляет 131 тысячу вместо 16.7 миллиона. Это сокращает память под градиенты и состояния оптимизатора в сотни раз.

В QLoRA базовые веса хранятся в NF4 или FP4, а вычисления при прямом проходе выполняются в 16-битной точности через деквантизацию на лету. Обучаются только адаптеры, поэтому градиенты считаются только для них. Это ключевой фактор экономии: модель 65B в 4-битном виде занимает около 33 ГБ, а адаптеры с рангом 16 добавляют менее 1 ГБ обучаемых параметров.

Оптимизаторы с управлением памятью

Даже при замороженной основе состояния оптимизатора для адаптеров могут вызвать OOM на картах с ограниченной памятью. QLoRA использует paged optimizers - технику, при которой состояния оптимизатора выгружаются в unified memory, когда GPU-память заканчивается. Это похоже на механизм виртуальной памяти в операционных системах: данные перемещаются между GPU и CPU автоматически. Скорость обучения падает, но процесс не падает с ошибкой. Для моделей 33B и 65B на картах с 24 ГБ эта техника часто становится единственным способом завершить обучение.

Практическое применение: загрузка 4-битных моделей с BitsAndBytesConfig

Библиотека bitsandbytes предоставляет готовую интеграцию с Hugging Face transformers. Загрузка модели в 4-битном режиме сводится к настройке одного объекта BitsAndBytesConfig и передаче его в метод from_pretrained.

Настройка BitsAndBytesConfig: ключевые параметры

Основные параметры конфигурации:

  • load_in_4bit - включает 4-битную загрузку модели.
  • bnb_4bit_quant_type - задаёт формат квантизации: "fp4" или "nf4". По умолчанию используется "nf4".
  • bnb_4bit_use_double_quant - включает двойную квантизацию. Рекомендуется всегда устанавливать в True.
  • bnb_4bit_compute_dtype - тип данных для вычислений после деквантизации. Обычно torch.bfloat16 или torch.float16.

Пример загрузки Llama 7B в 4-битном режиме

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16
)

model_name = "meta-llama/Llama-2-7b-hf"
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    quantization_config=bnb_config,
    device_map="auto",
    trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(model_name)

Модель Llama 7B в таком режиме занимает около 3.9 ГБ VRAM вместо 14 ГБ в float16. На карте с 16 ГБ остаётся достаточно места для батча и активаций при инференсе.

Дообучение с QLoRA на одной видеокарте: от 7B до 65B

Для дообучения используется связка peft и transformers. Библиотека peft добавляет LoRA-адаптеры к загруженной 4-битной модели, после чего запускается стандартный цикл обучения через Trainer или SFTTrainer.

Настройка LoRA-адаптеров

Ключевые параметры LoraConfig:

  • r - ранг адаптера. Типичные значения: 8, 16, 32. Больше ранг - больше обучаемых параметров и выше качество, но больше памяти.
  • lora_alpha - масштабирующий коэффициент. Часто устанавливается в 2 × r.
  • target_modules - список модулей, к которым добавляются адаптеры. Для Llama это обычно ["q_proj", "v_proj", "k_proj", "o_proj"].
  • lora_dropout - dropout для адаптеров, обычно 0.05.

Обучение модели 7B на GPU с 16GB

from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training

model = prepare_model_for_kbit_training(model)

lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)

model = get_peft_model(model, lora_config)

С этими настройками модель 7B дообучается на GPU с 16 ГБ при batch size 4 и длине последовательности 512 токенов. Использование памяти: около 3.9 ГБ под веса, 2-3 ГБ под градиенты и состояния оптимизатора для адаптеров, остальное - под активации. Скорость на RTX 4080 составляет 2-3 итерации в секунду.

Масштабирование до 65B: возможно ли на одной карте?

Модель 65B в 4-битном формате с двойной квантизацией занимает около 33 ГБ VRAM. На карте с 48 ГБ (RTX A6000, RTX 6000 Ada) остаётся 15 ГБ под адаптеры, градиенты и активации. С paged optimizers и аккуратным управлением батчем дообучение проходит, но медленно: 0.3-0.5 итерации в секунду при batch size 1. На карте с 24 ГБ модель 65B не помещается даже в 4-битном виде, здесь нужны дополнительные техники вроде offloading на CPU или разбиение на несколько GPU.

Бенчмарки: Llama 7B и 13B на GPU с 16GB

Цифры ниже получены на карте уровня RTX 4080 с 16 ГБ VRAM. Модели загружались через bitsandbytes с NF4 и двойной квантизацией. Дообучение выполнялось через QLoRA с рангом 16 и target_modules ["q_proj", "v_proj", "k_proj", "o_proj"].

Использование памяти при загрузке и инференсе

МодельРазмер в float16Размер в NF4 + двойная квантизацияVRAM при инференсе
Llama 7B14 ГБ3.9 ГБ5-6 ГБ
Llama 13B26 ГБ7.2 ГБ9-10 ГБ

Инференс с 4-битной моделью на 16 ГБ карте оставляет достаточно памяти для контекста в 4096 токенов и батча из 4-8 запросов.

Производительность дообучения с QLoRA

МодельVRAM при обученииСкорость (batch size 4, seq len 512)Время на 1000 шагов
Llama 7B12-14 ГБ2-3 it/s6-8 минут
Llama 13B15-16 ГБ1-1.5 it/s12-16 минут

Для сравнения: полное 16-битное дообучение Llama 7B требует 40-50 ГБ VRAM. QLoRA снижает требования в 3-4 раза при сопоставимом качестве на большинстве задач. Подробнее о реальном потреблении памяти при LoRA-обучении можно прочитать в разборе скрытых требований LoRA к VRAM.

Преимущества и ограничения QLoRA

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

Сравнение качества с 16-битным обучением

Оригинальные эксперименты QLoRA показали, что дообучение Guanaco 65B на 4-битной основе достигает 99.3% качества ChatGPT на бенчмарке Vicuna. Разница с полным 16-битным дообучением на большинстве задач укладывается в 1-2%. Для задач классификации, генерации текста и инструктивного дообучения это несущественно. Для задач, требующих точных численных предсказаний, разница может быть заметнее.

Когда QLoRA может не подойти

QLoRA не рекомендуется в случаях, когда нужно обновить все параметры модели: обучение с нуля, радикальная смена домена, работа с архитектурами, где LoRA-адаптеры не поддерживаются для ключевых слоёв. Также QLoRA чувствителен к выбору ранга: слишком низкий ранг ограничивает выразительность адаптеров, слишком высокий съедает выигрыш в памяти. Для задач с жёсткими требованиями к точности и доступными ресурсами полное 16-битное обучение остаётся предпочтительным.

Интеграция QLoRA в экосистему Hugging Face

Hugging Face поддерживает QLoRA через три библиотеки: transformers загружает модель, peft добавляет адаптеры, bitsandbytes выполняет квантизацию. Все три интегрированы на уровне API, поэтому переключение между 8-битным и 4-битным режимом сводится к изменению конфигурации.

Библиотеки: transformers, peft, bitsandbytes

transformers отвечает за загрузку модели и токенизатора, а также за цикл обучения через Trainer. peft реализует LoRA, QLoRA и другие методы параметрически эффективного дообучения. bitsandbytes предоставляет CUDA-ядра для квантизации и деквантизации, включая NF4 и двойную квантизацию. Связка работает на GPU NVIDIA с архитектурой Turing и новее.

Готовые 4-битные модели на HF Hub

Многие популярные модели уже выложены в 4-битном формате. На HF Hub их можно найти по тегам 4-bit и qlora. Использование готовых квантизованных версий экономит время на конвертацию и снижает порог входа. Однако стоит проверять, какой формат использовался: NF4 предпочтительнее FP4 для большинства задач. Для более широкого контекста по оптимизации LLM под ограниченное железо полезен анализ пределов малых моделей.

Заключение: QLoRA как стандарт для работы с LLM на потребительском железе

QLoRA и 4-битная квантизация решают главную проблему независимых разработчиков: доступ к большим языковым моделям без аренды дорогих GPU. Модель 7B дообучается на карте за 500 долларов, модель 13B - на карте за 800 долларов. Потеря качества на большинстве практических задач не превышает 2%. Это делает QLoRA стандартным инструментом для файнтюнинга LLM в 2026 году.

Перспективы развития включают 2-битные и 1-битные форматы, а также fused-ядра для деквантизации, которые ускоряют обучение на новых архитектурах. Уже сейчас появляются подходы, позволяющие обучать MoE-модели в 16 ГБ VRAM без CPU offloading. Подробнее о таких техниках можно прочитать в разборе LoRA-обучения DeepSeek-V4-Flash и материале о RLHF для 20B-моделей на одной GPU.

Если вы ещё не пробовали QLoRA, начните с модели 7B и конфигурации из этой статьи. Настройка занимает 15 минут, а результат даёт понимание, какие задачи вашего проекта можно решить на локальном железе.

Подписаться на канал