LoRA или QLoRA: как выбрать способ дообучения LLM — вопрос упирается в один замер: помещается ли база обычной точности вместе с рабочим состоянием обучения. Помещается — кандидат LoRA. Не помещается, но есть поддержанный 4-битный backend — кандидат QLoRA. Оба подхода обучают low-rank адаптеры на замороженной базе.
Механизм адаптера и его пределы
Разберём механизм на уровне, который нужен для выбора. По документации IBM, LoRA добавляет к исходной модели лёгкие низкоранговые матрицы и подстраивает веса так, чтобы выходы соответствовали задаче. Оригинальные веса при этом замораживаются и остаются неизменными. Обучение идёт по небольшому подмножеству параметров, что снижает вычислительные и памятные накладные расходы.
Документация Hugging Face PEFT описывает ту же механику формально: обновление весов ΔW представляется двумя меньшими матрицами через низкоранговое разложение. Исходная матрица весов остаётся замороженной и не получает обновлений. После обучения адаптер можно слить с базовой моделью, чтобы убрать задержку на инференсе. Число обучаемых параметров определяется рангом r и формой исходной матрицы весов.
Замороженная база не меняется, однако обучаемый адаптер может менять поведение и усваивать сведения из обучающих данных. Это не гарантирует полноту или актуальность таких сведений. Документация Unsloth формулирует это так: дообучение настраивает поведение, добавляет и внедряет знания, оптимизирует работу под домен и конкретные задачи. Стандартный метод постобучения — Supervised Fine-Tuning (SFT); к другим методам относятся preference optimization (DPO, ORPO), дистилляция и обучение с подкреплением (GRPO, GSPO).
Второй предел — структурный. Учебная матрица W размером 6×4 содержит 24 веса. Обновление B 6×2 и A 2×4 содержит 12+8=20 параметров. Это структура адаптера, арифметика на игрушечном тензоре. Она показывает, как считается число обучаемых чисел, и не описывает экономию настоящей LLM.
Третий предел — память. По статье QLoRA на arXiv, обычное 16-битное дообучение модели LLaMA на 65B параметров требует более 780 ГБ памяти GPU. Квантизация снижает объём памяти модели, и при этом методы квантизации, работавшие для инференса, ломались при обучении. Именно эту границу QLoRA и сдвигает.
Что это значит для выбора. Размер файла адаптера на диске и полный бюджет обучения — разные величины. В бюджет входят адаптеры, градиенты, состояние оптимизатора и активации. Файл адаптера описывает сохранённые параметры, но не всё состояние работающего обучения. Оценка только по файлу пропускает остальные расходы.
| Что сравниваем | LoRA | QLoRA |
|---|---|---|
| Точность базы | 16-битная, без квантизации | квантизованная, обычно 4-битная |
| Что обучается | low-rank адаптеры | low-rank адаптеры |
| Путь градиента | через замороженную базу | через замороженную квантизованную базу |
| Память под базу | выше | ниже |
| Требование к железу | база и рабочее состояние помещаются | поддержан 4-битный backend |
| Исходные веса | заморожены | заморожены в 4-битном виде |
Учебный вход, артефакт и эталон проверки
Соберём полный учебный вход. Задача: извлечь код и наличие из короткой строки. Данные для примера:
«Код А-10; наличие есть» → {"code":"А-10","stock":true}
«Код Б-20; наличие нет» → {"code":"Б-20","stock":false}
Отложенный вход: «Код В-30; наличие не указано» → {"code":"В-30","stock":null}
Обучения не было. Это условный вход для проверки формата и значений. Измерений обучения нет. Отложенный вход важен тем, что третья строка требует null там, где в обучающих данных были только true и false. Такой случай показывает, что проверять нужно на данных, которых модель не видела.
Артефакт выбора — таблица из двух веток:
| Ветка | Условие | Кандидат |
|---|---|---|
| А | база обычной точности вместе с рабочим состоянием помещается | LoRA |
| Б | база не помещается, но поддержан 4-битный backend | QLoRA |
В обеих ветках нужен запас под адаптеры, градиенты, оптимизатор и активации. Запас оценивают по конфигурации конкретного процесса обучения и затем сверяют с реальным пиком памяти. Один размер файла адаптера недостаточен.
Эталон проверки — фиксация условий. Для сравнения фиксируют одну базу, один split, один шаблон и сопоставимую конфигурацию адаптеров. Точность базы и backend записывают отдельно для каждой ветки: это различающиеся условия сравнения. Измеряют память, время и поля на held-out данных. Победителя без запуска не назначают.
Порядок действий для читателя:
- Записать бюджет памяти: сколько доступно на устройстве.
- Оценить базу обычной точности вместе с рабочим состоянием.
- Проверить, поддержан ли 4-битный backend для выбранной базы.
- Выбрать ветку А или Б по таблице.
- Зафиксировать базу, split, шаблон и конфигурацию адаптеров.
- Если обе конфигурации помещаются на выбранном устройстве, проверить их на одном отложенном наборе; иначе отметить непоместившуюся ветку как недоступную.
- Сравнить память, время и поля ответа.
Шаг 3 решает больше, чем кажется. Документация Hugging Face по 4-битным моделям и bitsandbytes описывает обучение адаптеров поверх 4-битных моделей как метод, представленный в работе QLoRA. Там же приведён блокнот для дообучения 4-битной модели на прикладной задаче в экосистеме Hugging Face. Совместимость конкретной базы с 4-битным backend проверяется по документации загрузчика, и переносить её между продуктами нельзя.
Как читать игрушечную матрицу и отложенный пример
В формуле обновления ΔW=B×A важно проверить размерности. Исходная W имеет 6 строк и 4 столбца. B имеет 6 строк и 2 столбца, A —2 строки и 4 столбца; их произведение снова имеет форму 6×4. Во время обучения меняются элементы A и B. W остаётся исходной замороженной матрицей.
| Объект | Форма | Число параметров | Роль |
|---|---|---|---|
| W | 6×4 | 24 | Замороженная основа |
| B | 6×2 | 12 | Обучаемая часть обновления |
| A | 2×4 | 8 | Обучаемая часть обновления |
| Вместе A и B | Согласованные размерности | 20 | Low-rank обновление |
В такой маленькой матрице разница между 24 и 20 невелика. Из неё нельзя вывести долю экономии в большой модели: там другие формы, ранги и выбранные слои. Карточка помогает проверить умножение матриц и увидеть, какие параметры обучаются. Представление замороженной W высокой или низкой точностью — отдельный выбор, который и различает рассматриваемые конфигурации.
Похожая ручная проверка нужна для данных. В двух учебных строках наличие задано явно словами есть и нет. В отложенной строке сведений о наличии нет. Значение null сохраняет отсутствие сведений, тогда как false утверждает отсутствие товара. Поэтому подмена null на false является ошибкой значений даже при корректном JSON.
Две строки демонстрируют формат и не составляют достаточного обучающего набора. Перед реальным обучением нужно явно описать правило неизвестного значения и проверить, есть ли в тренировочной части примеры такого поведения. Само включение null в отложенный эталон не обучает модель этому правилу. Если она ошибётся, сначала проверяют данные и постановку задачи; выбор между LoRA и QLoRA не снимает этот вопрос.
Структурная корректность и фактическая правильность
Эти две вещи расходятся, и расхождение стоит держать раздельно.
Структурная корректность — формат ответа. Модель вернула JSON с полями code и stock, типы совпали, лишних полей нет. Это проверяется программно и не требует человека. В учебном примере структурная корректность означает, что ответ разбирается парсером и содержит ровно два поля.
Фактическая правильность — совпали ли значения. Для отложенного входа «Код В-30; наличие не указано» правильный ответ содержит stock: null. Модель может вернуть структурно безупречный JSON с stock: false, и это будет фактическая ошибка при идеальном формате.
Разделение даёт практический вывод. Метрика формата и метрика полей считаются отдельно. Если смешать их в одну цифру, непонятно, что чинить: шаблон данных или сами данные.
Тот же разрыв есть в оценке качества модели. По статье QLoRA на arXiv, оценка чат-ботов проводилась в турнирном формате, где модели соревновались парами, а победителя определял GPT-4 или человек-аннотатор. Результаты агрегировались в Elo-рейтинг. Авторы отмечают, что GPT-4 и люди в основном соглашались в ранжировании, и при этом зафиксированы случаи сильного расхождения. Оценка моделью даёт дешёвую альтернативу ручной разметке и несёт собственную неопределённость.
Практический вывод для сравнения LoRA и QLoRA: держите два набора метрик. Формат — доля разбираемых ответов. Факт — доля совпавших полей на held-out данных. Обе считаются на одном и том же отложенном наборе, иначе сравнение веток теряет смысл.
Ещё одна ловушка — перенос ограничений между продуктами. Диапазоны значений, версии библиотек, порты и лимиты принадлежат тому продукту, где они описаны. В документации Hugging Face по 4-битным моделям приведены диапазоны представимых чисел для форматов E4M3 и E5M2, Это свойства конкретных форматов, которые нельзя переносить на все способы квантования. Для выбора между LoRA и QLoRA достаточно знать, что 4-битный backend поддержан, и проверить это по документации загрузчика.
Первоисточники и что из них следует
Внешние утверждения этой статьи опираются на пять документов. Пройдёмся по ним с указанием владельца.
Документация IBM по LoRA: техника опубликована Эдвардом Ху, Йелонгом Шеном и соавторами в работе о низкоранговой адаптации больших языковых моделей. В работе показано, что модели, сокращённые и дообученные через LoRA, превосходили базовые на ряде бенчмарков. Улучшение достигалось без полного дообучения и при заметно меньшем числе обучаемых параметров. Там же приведён пример: полное дообучение GPT-3 требует обучения 175 млрд параметров, а через LoRA число обучаемых параметров сокращается примерно до 18 млн, что снижает требования к памяти GPU примерно на две трети.
Документация IBM описывает QLoRA как вариант LoRA, который сочетает вычисления высокой точности с хранением низкой точности. Это удерживает размер модели малым и сохраняет производительность и точность.
Статья QLoRA на arXiv: авторы показали возможность дообучения квантизованной 4-битной модели без деградации качества. Метод квантизует предобученную модель до 4 бит и добавляет небольшой набор обучаемых low-rank адаптеров. В работе перечислены три нововведения: 4-битный NormalFloat, двойная квантизация и paged-оптимизаторы. Двойная квантизация квантизует константы квантизации и экономит в среднем около 0,37 бита на параметр, что даёт примерно 3 ГБ для модели на 65B. Paged-оптимизаторы используют унифицированную память NVIDIA, чтобы избежать всплесков памяти при контрольных точках градиента на длинных последовательностях.
Документация Unsloth: в модели на 70B параметров добавляются матрицы A и B для выбранных целевых слоёв; приведённая доля обучаемых параметров около 1% относится к описанному примеру. LoRA описан как режим, где исходная модель хранится в 16-битной точности без квантизации, а QLoRA хранит базовые веса в 4 битах. Сравнение с 16 битами даёт сокращение чистого представления весов на 75%; это не универсальное сокращение всей памяти обучения. Там же приведено наблюдение: обучение и инференс в одной точности помогают сохранить точность, поэтому при выдаче в 4 битах обучение тоже ведут в 4 битах.
Документация Hugging Face PEFT: LoRA — один из самых популярных методов PEFT и хорошая отправная точка для знакомства с PEFT. Метод изначально разработан для больших языковых моделей и широко применяется для диффузионных моделей. Оригинальные предобученные веса остаются замороженными, что позволяет держать несколько лёгких переносимых LoRA-моделей под разные задачи на одной базе.
Документация Hugging Face по 4-битным моделям и bitsandbytes: обучение адаптеров поверх 4-битных моделей описано как метод из работы QLoRA, и в экосистеме Hugging Face для этого есть инструменты. Там же приведён блокнот для дообучения 4-битной модели на прикладной задаче.
Из этих пяти документов следует практическое правило. В этом сравнении различается точность хранения базы. В обоих вариантах градиент используется для обучения low-rank адаптеров; замороженные базовые веса не обновляются. Выбор определяется бюджетом памяти и поддержкой 4-битного backend.
Случай, где подход не решает задачу
Разберём конкретную ситуацию. Задача: модель должна отвечать по внутренней базе знаний компании, которая обновляется ежедневно. Дообучение через LoRA или QLoRA здесь не решает задачу.
Причина в механизме. Адаптер может усваивать сведения при обучении, однако обновление внешней базы само по себе не обновляет его параметры. Ежедневное обновление базы знаний потребовало бы ежедневного переобучения адаптера, и каждый прогон занимал бы время и память. Документация Unsloth описывает разницу так: RAG не меняет веса модели и лишь дополняет то, что модель видит на инференсе. Дообучение способно воспроизвести возможности RAG, и обратное неверно.
Второй случай: задача требует точного арифметического вывода на длинных числах. Адаптер меняет эффективное преобразование модели и может влиять на ответы в вычислительных задачах. Точность арифметики нужно проверять отдельно. Дообучение иногда меняет поведение на вычислительных задачах, но не гарантирует точность арифметики. Для обязательного проверяемого вычисления нужен отдельный контроль или вычислительный инструмент.
Третий случай: данных для дообучения мало и они противоречивы. Противоречивую разметку нужно проверить и исправить до обучения. Итоговое поведение адаптера на таких данных заранее неизвестно; его оценивают на отложенных примерах. Противоречия сначала исправляют в данных: смена точности базы сама не задаёт правильную разметку.
Четвёртый случай: нужен новый язык или новая предметная область с нуля. Документация Unsloth советует новичку начинать с небольшой instruct-модели вроде Llama 3.1 (8B) и экспериментировать от неё. Для большинства задач достаточно стандартного SFT. Обучение с подкреплением применяют, когда нужно отточить конкретное поведение, например вызов инструментов, через среду и функцию награды.
Практический вывод: дообучение адаптерами решает задачи формата, стиля и поведения. Задачи свежих знаний и точных вычислений решаются другими средствами. Универсального улучшения от смены LoRA на QLoRA не появляется.
Как выбрать: порядок и проверка
Соберём решение в один проход.
Шаг 1. Замерьте бюджет памяти на устройстве. Это верхняя граница для всего рабочего состояния.
Шаг 2. Оцените базу обычной точности. Если она вместе с рабочим состоянием помещается, ветка А — LoRA.
Шаг 3. Если не помещается, проверьте поддержку 4-битного backend для конкретной базы по документации загрузчика. Поддержан — ветка Б, QLoRA.
Шаг 4. Зафиксируйте одну базу, один split, один шаблон и сопоставимую конфигурацию адаптеров. Точность базы и backend запишите для каждой ветки.
Шаг 5. Если обе ветки помещаются на одном оборудовании, проверьте их на одном отложенном наборе. Непоместившуюся конфигурацию отметьте как недоступную; результаты с другого оборудования сравнивайте с явным указанием этого отличия. Измерьте память, время и поля ответа.
Шаг 6. Сравните формат и факт раздельно. Формат — доля разбираемых ответов. Факт — доля совпавших полей.
Шаг 7. Запишите условия замера рядом с результатом. Без условий цифра не воспроизводится.
Промпт для разбора собственного случая выбора:
Ты помогаешь выбрать между LoRA и QLoRA для дообучения LLM.
Мой случай:
- база: [название и размер модели]
- доступная память: [сколько ГБ на устройстве]
- задача: [что должна делать модель]
- данные: [сколько примеров, какой формат]
- поддержка 4-битного backend: [да, нет, не проверял]
Разбери по шагам:
1. Помещается ли база обычной точности вместе с рабочим состоянием.
2. Какая ветка подходит: А (LoRA) или Б (QLoRA).
3. Что нужно зафиксировать для честного сравнения.
4. Какие метрики считать на held-out данных.
5. Какие риски у выбранной ветки.
Не назначай победителя без запуска. Отдельно укажи, что нужно проверить в документации загрузчика.
В квадратных скобках подставьте свои значения. Поле про поддержку 4-битного backend заполняйте по документации конкретного загрузчика.
Вариации той же задачи:
- Разбор бюджета памяти: попросите расписать, из каких частей складывается рабочее состояние обучения и где узкое место.
- Разбор данных: попросите проверить, хватает ли примеров и есть ли противоречия между ними.
- Разбор метрик: попросите собрать набор метрик формата и факта для вашей задачи.
- Разбор отложенного набора: попросите предложить случаи, которых нет в обучающих данных.
- Разбор ошибок: попросите перечислить типовые причины расхождения формата и факта.
Проверка результата. После прогона сверьте три вещи. Первое: совпали ли условия у обеих веток. Второе: считались ли метрики на одном отложенном наборе. Третье: записаны ли рядом условия замера. Если хотя бы одно не выполнено, сравнение придётся повторить.
Частые вопросы
QLoRA и LoRA — в чём разница?
Здесь сравниваются LoRA на базе 16-битной точности и QLoRA на квантизованной базе. QLoRA использует тот же принцип low-rank адаптеров. В QLoRA база квантизована, обычно до 4 бит, и градиент идёт к адаптерам через замороженную квантизованную базу. Обучаемый объект в обоих случаях один — low-rank адаптеры.
Что выбрать для дообучения на одной видеокарте?
Смотрите на бюджет памяти. Если база обычной точности вместе с рабочим состоянием помещается, кандидат LoRA. Если не помещается, но для базы поддержан 4-битный backend, кандидат QLoRA. Поддержку проверяйте по документации загрузчика.
QLoRA всегда даёт худшее качество?
Статья QLoRA на arXiv описывает дообучение квантизованной 4-битной модели без деградации качества. Документация Unsloth отмечает, что обучение и инференс в одной точности помогают сохранить точность. Итог зависит от базы, данных и конфигурации адаптеров, поэтому качество проверяют на held-out наборе.
Как сравнить две ветки честно?
Зафиксируйте одну базу, один split, один шаблон и сопоставимую конфигурацию адаптеров. Точность базы и backend запишите для каждой ветки. Если обе доступны на выбранном оборудовании, проверьте их на одном отложенном наборе и измерьте память, время и поля ответа. Победителя назначайте по результатам замера.
Хватит ли размера файла адаптера для оценки памяти?
Нет. В рабочее состояние обучения входят адаптеры, градиенты, состояние оптимизатора и активации. Размер файла адаптера описывает только одну часть. Бюджет памяти оценивают по формуле из документации конкретного загрузчика.
