В инструкциях по дообучению QLoRA почти всегда идёт как значение по умолчанию, и складывается впечатление, что это просто более новая и лучшая LoRA. Это не так. QLoRA — компромисс, у которого есть цена, и есть порог, за которым платить её уже не нужно.
#Короткий ответ
LoRA — способ дообучать модель, не трогая её исходные веса: рядом с ними ставятся маленькие обучаемые матрицы-адаптеры, обучаются только они. QLoRA — та же LoRA, но базовая модель дополнительно ужата до 4 бит на параметр, чтобы влезть в скромную видеопамять.
Разница ровно в одном: в QLoRA заморожённая база хранится в сжатом виде. Всё остальное — та же механика адаптеров.
Выбор сводится к одному вопросу: влезает ли база в вашу карту в 16-битной точности вместе с активациями. Влезает — берите LoRA, она быстрее и не вносит ошибку квантизации. Не влезает — берите QLoRA, она даст обучить то, что иначе не запустится вовсе.
#Как это устроено
Полное дообучение требует держать в памяти четыре вещи: сами веса, градиенты по ним, состояния оптимизатора (у Adam это ещё две величины на каждый параметр) и активации. Для модели на семь миллиардов параметров это десятки гигабайт — отсюда и репутация обучения как занятия для дата-центра.
LoRA убирает три слагаемых из четырёх. Исходные веса замораживаются: градиенты по ним не считаются, состояния оптимизатора для них не хранятся. Обучаются только добавленные матрицы, а их размер задаётся рангом — обычно 8, 16 или 32. Обучаемых параметров остаётся доля процента от исходных, и вместе с ними схлопывается основная часть расхода памяти.
Что остаётся: сами замороженные веса всё равно должны лежать в памяти, потому что через них идёт прямой проход. Вот их-то QLoRA и сжимает — до 4 бит на параметр, в формате nf4, с двойным квантованием констант. Во время вычислений блок разжимается обратно в рабочую точность на лету.
Механику адаптеров подробнее — в разборе библиотеки PEFT и того, как устроены адаптеры. Что означают уровни сжатия и где у них точка перелома по качеству — в статье про квантизацию LLM.
#Чем за это платят
Сжатие базы не бесплатно, и честно назвать цену важнее, чем перечислить плюсы.
| Критерий | LoRA | QLoRA |
|---|---|---|
| Хранение базы | 16 бит на параметр | 4 бита на параметр |
| Требование к VRAM | выше | заметно ниже |
| Скорость шага | выше | ниже: разжатие на каждом проходе |
| Ошибка от сжатия | нет | есть, накапливается в прямом проходе |
| Точность результата | потолок базы | потолок базы минус потеря на квантизации |
| Когда осмысленно | база влезает в карту | база не влезает иначе |
Три строки в этой таблице стоит прочитать внимательно. Скорость: разжатие блоков выполняется на каждом прямом проходе, и это реальная работа, а не бесплатная опция — насколько именно медленнее, зависит от карты и от реализации ядра, замеряйте на своей конфигурации. Ошибка квантизации: она мала, но она есть, и обучение идёт поверх слегка искажённой базы. Потолок: адаптер не может поднять модель выше её собственных способностей — ни в LoRA, ни в QLoRA.
#Где проходит порог
Практическое правило простое: QLoRA нужна ровно до того момента, пока база не помещается в карту в 16 битах.
Грубая арифметика, по которой это считается: веса в 16 битах занимают примерно два байта на параметр, в 4 битах — примерно полбайта плюс небольшой накладной расход на константы квантования. К этому прибавляются активации, которые зависят от длины последовательности и размера батча, и небольшой расход на сами адаптеры и их оптимизатор.
Отсюда порядок величин: база на 7–8 миллиардов параметров в 16 битах — это около 14–16 ГБ только под веса, то есть на карте в 16 ГБ обучать её в LoRA уже нечем. Та же база в 4 битах — около 4–5 ГБ, и место под активации остаётся. Ту же модель в 3 миллиарда параметров в 16 битах — около 6 ГБ, и на карте в 12–16 ГБ она уже влезает без сжатия.
Это расчёт по формуле, а не измерение: реальный расход зависит от длины контекста, размера батча, включённого чекпойнтинга активаций и реализации оптимизатора. Полная таблица с разбором слагаемых — в статье про требования к железу для дообучения.
#Что из этого следует на практике
Если у вас карта на 8–12 ГБ. Вопрос выбора не стоит: QLoRA, и база небольшая. В нашем собственном пайплайне «второй копии» для карты на 4 ГБ заявлен потолок в 0,5–1,5 миллиарда параметров в 4 битах, и это честный потолок, а не осторожность.
Если у вас карта на 16 ГБ или бесплатный облачный ускоритель того же класса. Здесь появляется выбор. Компактную базу до трёх миллиардов имеет смысл учить обычной LoRA — быстрее и без потери на сжатии. Базу на 4–8 миллиардов — всё ещё QLoRA.
Если у вас 24 ГБ и больше. QLoRA становится нужна только для по-настоящему крупных баз. Для всего, что вы реально станете запускать дома, хватает LoRA.
Если вы не уверены. Начните с QLoRA: она запустится там, где LoRA упадёт по памяти, а разница в качестве на задаче «сдвинуть стиль» обычно теряется на фоне качества датасета. Переключиться на LoRA, когда станет тесно по скорости, дешевле, чем наоборот.
Ранг адаптера, скорость обучения и число эпох выбираются одинаково в обоих случаях — стартовые значения и порядок их подкрутки собраны в статье про гиперпараметры дообучения.
#Где интуиция подводит
«QLoRA экономит память при запуске модели». Нет: это метод обучения. Экономия при запуске даёт квантизация готовой модели — это отдельная процедура и отдельный формат файла. Путаница возникает потому, что в обоих случаях звучит слово «4 бита».
«Ранг повыше компенсирует потерю от квантизации». Не компенсирует: это разные вещи. Ранг задаёт ёмкость адаптера — сколько поведения он способен вместить. Ошибка квантизации сидит в замороженной базе, и адаптер её не чинит, а учится поверх неё.
«Раз QLoRA обучает в 4 битах, результат тоже будет в 4 битах». Нет. Адаптер обучается в рабочей точности и сохраняется отдельным файлом на десятки мегабайт. Дальше вы либо подключаете его к базе, либо сливаете в веса — и уже потом решаете, в каком формате и с какой квантизацией запускать.
«LoRA точнее, значит, всегда лучше». Только если она у вас запускается. Обучение, которое падает с нехваткой памяти, имеет точность ноль. Общий обзор маршрута — в пилларе про свою модель и дообучение под себя.
#Частые вопросы
#Насколько QLoRA хуже LoRA по качеству?
Разница обычно небольшая и на задаче переноса стиля теряется на фоне качества датасета. Но она не нулевая: обучение идёт поверх сжатой базы, и ошибка квантизации никуда не девается. Если у вас есть память под LoRA — берите LoRA, лишний источник шума в эксперименте не нужен.
#Можно ли обучить QLoRA, а потом использовать адаптер с несжатой базой?
Технически да, адаптер — отдельный файл, и он подключается к базе в любой точности. Но результат обучали поверх сжатых весов, поэтому поведение может немного отличаться от ожидаемого. Проверяйте в той конфигурации, в которой собираетесь пользоваться, а не в той, в которой обучали.
#Какой ранг брать для QLoRA?
Тот же, что для LoRA: метод сжатия базы на выбор ранга не влияет. Для переноса стиля обычно начинают с 8–16 и повышают, только если стиль не сдвинулся при достаточном датасете. Высокий ранг на маленьком наборе данных даёт переобучение, а не качество.
#QLoRA работает на старых видеокартах?
Зависит не от метода, а от поддержки нужных типов данных и ядер в вашей связке драйвера и библиотек. На старых архитектурах, где нет аппаратной поддержки bf16, обучение идёт в fp16 — это рабочий вариант, но требует аккуратности с масштабированием градиентов. Проверяйте поддержку до того, как соберёте датасет.
#Что выбрать, если обучаю в бесплатном облачном блокноте?
Смотрите на выданную карту, а не на метод. На ускорителе класса 16 ГБ QLoRA даёт запас по памяти и позволяет взять базу покрупнее, что обычно ценнее выигрыша в скорости. И помните про ограничение по времени сессии: длинный прогон могут прервать, поэтому сохраняйте промежуточные чекпойнты.
#Вывод
LoRA и QLoRA решают одну задачу — дообучить модель, не трогая её веса. Разница только в том, хранится ли замороженная база в 16 битах или в 4. Всё остальное — ранг, скорость обучения, эпохи, требования к датасету — одинаково.
Если база влезает в вашу карту без сжатия, берите LoRA: быстрее и чище. Если не влезает — берите QLoRA и не переживайте: на задаче «пусть отвечает в моей манере» вы упрётесь в качество данных задолго до того, как упрётесь в ошибку квантизации.