Модель 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 7B | 14 ГБ | 3.9 ГБ | 5-6 ГБ |
| Llama 13B | 26 ГБ | 7.2 ГБ | 9-10 ГБ |
Инференс с 4-битной моделью на 16 ГБ карте оставляет достаточно памяти для контекста в 4096 токенов и батча из 4-8 запросов.
Производительность дообучения с QLoRA
| Модель | VRAM при обучении | Скорость (batch size 4, seq len 512) | Время на 1000 шагов |
|---|---|---|---|
| Llama 7B | 12-14 ГБ | 2-3 it/s | 6-8 минут |
| Llama 13B | 15-16 ГБ | 1-1.5 it/s | 12-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 минут, а результат даёт понимание, какие задачи вашего проекта можно решить на локальном железе.