Своя модель

LoRA и QLoRA: в чём разница и что выбрать

QLoRA — это не «улучшенная LoRA», а размен качества и скорости на видеопамять. Разбираем, за счёт чего он работает, и с какого объёма VRAM платить этим разменом уже незачем.

В инструкциях по дообучению 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 и не переживайте: на задаче «пусть отвечает в моей манере» вы упрётесь в качество данных задолго до того, как упрётесь в ошибку квантизации.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт