Перейти к основному содержанию
Скидка 50% все планы, ограниченное время. Начиная от $2.48/mo
15 min left
ИИ и машинное обучение

LoRA против QLoRA против полного файн-тюнинга — какой метод выбрать?

B Автор: Brian 15 мин чтения
LoRA vs QLoRA vs full fine-tuning compared by VRAM use, quality, and when each method wins

Вы решили дообучить модель на 7B параметров на своих данных. И тут же натыкаетесь на первую настоящую развилку: три метода, и у каждого свой ответ. В документации Unsloth советуют начинать с QLoRA. Axolotl говорит, что всё зависит от вашего железа. Половина статей, которые вы просмотрели, пишут «используйте LoRA почти всегда» и идут дальше. А у вас между тем одна GPU, и вы даже не уверены, что на ней запустится хоть один из этих методов.

Это решение определяет всё остальное. Выбранный метод задаёт бюджет VRAM, бюджет VRAM определяет железо, а железо определяет стоимость. Ошибётесь с методом — либо потратите деньги на память GPU, которая вам не нужна, либо проведёте выходные, гоняясь за крашами из-за нехватки памяти на карте, которая изначально не подходила для этой задачи.

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

Кратко

  • Метод по умолчанию — QLoRA. Для большинства файн-тюнингов на одной GPU начинайте с QLoRA. По таблице Axolotl, запуск QLoRA на модели 7-8B требует примерно 10-14 ГБ VRAM, при коротком контексте и небольших микро-батчах. Это укладывается в бюджет многих потребительских или prosumer-карт на 12-24 ГБ, но не всех карт с малым объёмом VRAM. Обычный LoRA выбирайте, когда памяти достаточно и нужны более быстрые шаги; полный файн-тюнинг оставляйте для редких случаев, когда он действительно необходим.
  • Разница в VRAM огромна. Файн-тюнинг модели 7B требует примерно 60-80 ГБ для полного файн-тюнинга, 16-24 ГБ для LoRA и 10-14 ГБ для QLoRA, согласно опубликованным данным Axolotl. Именно из-за этого разрыва и существуют параметрически эффективные методы.
  • Потеря качества зависит от задачи, а не одинакова для всех. В большинстве задач по следованию инструкциям и структурированному выводу LoRA и QLoRA отстают от полного fine-tuning всего на несколько процентов. Разрыв увеличивается на сложных задачах рассуждения, например в математике — именно там полный fine-tuning всё ещё оправдывает свою стоимость.
  • Полный fine-tuning — это исключение, а не базовый вариант. К нему переходят при значительных сдвигах распределения, изменениях масштаба предобучения или задачах, критичных для рассуждения, где бенчмарки показывают разрыв — а не как безопасный вариант по умолчанию.

Что не охватывает это руководство

Это руководство по выбору метода, а не пошаговое руководство по реализации. Некоторые темы намеренно оставлены за рамками:

  • Варианты LoRA (DoRA, VeRA, LoRA+). Три основных метода — это решение, которое важно принять первым; варианты — это уточнения, к которым обращаются позже.
  • Пошаговый код. Здесь нет команд установки или скриптов обучения. Это отдельное практическое руководство, которое здесь не рассматривается.
  • Обучение на нескольких GPU (FSDP, DeepSpeed ZeRO) и подготовка датасета: обе темы сами по себе весьма обширны.
  • RLHF, DPO и оптимизация предпочтений. Это другой класс целевых функций, отличный от supervised fine-tuning.
  • Стоит ли вообще делать fine-tuning. Если вы не уверены, что fine-tuning, а не retrieval, — правильный инструмент, этот вопрос заслуживает отдельного разбора, прежде чем выбирать метод здесь.

Чем на самом деле отличаются LoRA, QLoRA и full fine-tuning?

Three ways to adapt a model, each with a different training footprint: full fine-tuning updates all weights with the highest training footprint, LoRA freezes the base model and trains small adapter matrices, and QLoRA trains adapters on a quantized 4-bit frozen base for the lowest VRAM use

Full fine-tuning обновляет каждый параметр модели. LoRA замораживает базовую модель и вместо этого обучает небольшие матрицы адаптеров низкого ранга (примерно 0,1-2% от общего числа параметров). QLoRA добавляет ещё один шаг сверх LoRA: он квантует замороженную базовую модель до 4-битной точности (используя тип данных NF4, NormalFloat), чтобы база занимала гораздо меньше памяти, пока вы обучаете адаптеры.

Проще всего удержать все три в голове, представив их лестницей, где каждая ступень убирает одну затратную часть предыдущей.

Полный файнтюнинг это самая нижняя ступень — и самая тяжёлая. Каждый вес обучаем, поэтому оптимизатору нужно отслеживать градиент и состояние оптимизатора для каждого параметра модели. Именно туда уходит память, а к математике мы перейдём в следующем разделе.

LoRA (Low-Rank Adaptation) замораживает исходные веса и внедряет небольшие обучаемые матрицы в слои модели. Обучаются только эти матрицы — базовая модель просто едет по инерции. В статье про LoRA сообщается, что это сокращает число обучаемых параметров до 10 000x для модели с 175B параметрами и снижает потребление памяти GPU примерно в 3 раза в этом масштабе, при этом показывая результат «на уровне или лучше, чем файнтюнинг по качеству модели» на моделях, которые тестировали авторы. Поскольку изменяется так мало параметров, обученный результат крошечный. Блог блог PEFT приводит две полезные точки отсчёта: полный чекпоинт на 40 GB для bigscience/mt0-xxl, и отдельный пример LoRA, где сохранённый адаптер весит всего 19 MB. Суть остаётся той же: чекпоинты PEFT обычно крошечные по сравнению с полными чекпоинтами модели.

QLoRA берёт LoRA и уменьшает ту часть, которую LoRA оставила нетронутой: замороженную базу. Квантование этих весов до 4-битного NF4 означает, что базовая модель занимает лишь часть той памяти, которая понадобилась бы при 16 битах, при этом адаптеры сверху продолжают обучаться с полной точностью. В статье про QLoRA NF4 описывается как «теоретически оптимальный с точки зрения информации для нормально распределённых весов» — точный способ сказать, что 4-битное представление выбрано так, чтобы соответствовать реальному распределению весов модели, поэтому потери меньше, чем при наивном 4-битном округлении.

Это и есть весь концептуальный стек: полный файнтюнинг обучает всё, LoRA замораживает базу и обучает адаптеры, QLoRA сжимает замороженную базу и обучает адаптеры. Всё остальное (VRAM, качество, когда что использовать) следует из этих трёх решений.

Сколько VRAM требуется для каждого метода?

VRAM needed by fine-tuning method and model size: full fine-tuning needs 24-32 GB for 1-3B models, 60-80 GB for 7-8B models, and 4-8x 80 GB for 70B+ models, versus much lower requirements for LoRA and QLoRA, with QLoRA fine-tuning a 65B model on a single 48 GB GPU

Для модели 7B приблизительные цифры составляют около 60-80 GB для full fine-tuning, 16-24 GB для LoRA и 10-14 GB для QLoRA, согласно опубликованная таблица Axolotl. Практическое следствие: QLoRA обычно помещается на многих одиночных потребительских или профессиональных GPU с 12-24 GB при коротком контексте и малом батче, тогда как full fine-tuning модели 7B требует памяти дата-центра или конфигурации с несколькими GPU.

Почему full fine-tuning настолько тяжёл? Немного математики. Когда вы обучаете каждый параметр, GPU хранит три вещи на каждый параметр: сам вес, его градиент и состояние оптимизатора (оптимизаторы в стиле Adam хранят два дополнительных значения на вес). Именно поэтому объём памяти в несколько раз превышает размер самой модели. LoRA замораживает базу, поэтому платит этот налог на градиент и оптимизатор только для крошечных матриц адаптера. QLoRA дополнительно хранит замороженную базу в 4-bit вместо 16-bit, снижая самую крупную из оставшихся затрат.

Вот как сравниваются три метода в зависимости от размера модели, на основе документации Axolotl и статьи по QLoRA для показателей крупных моделей:

МетодМодель 1-3BМодель 7-8BМодель 70B+
Full fine-tuning (bf16 + AdamW)24-32 GB60-80 GB4-8x 80 GB
LoRA (bf16)8-12 GB16-24 GB2x 80 GB
QLoRA (4-bit NF4)6-8 GB10-14 GB40-48 GB

Источники: документация Axolotl для всех трёх методов в зависимости от размера модели; в статье о QLoRA независимо сообщается о файнтюнинге модели 65B на одном GPU с 48 GB «при сохранении полной производительности задачи, сравнимой с 16-битным файнтюнингом», что совпадает с показателем 70B для QLoRA. Блог Hugging Face о блог о 4-битной квантизации отдельно показывает модель 13B, обученную на одной T4 с 16 GB, и модель 33B на GPU с 24 GB с использованием QLoRA. Это полезные ориентиры, если ваша цель находится между строками таблицы.

Единственное число, которое стоит запомнить: модель 65B на одной карте 48 GB. Это главный результат QLoRA, и он полностью меняет смысл фразы «у меня всего один GPU».

Вывод раздела: иерархия VRAM выглядит так: full >> LoRA > QLoRA, и разница между full и QLoRA настолько велика, что задачу можно перенести со стойки с несколькими GPU на одну карту.

Действительно ли LoRA или QLoRA снижают качество?

В большинстве задач по следованию инструкциям и структурированному выводу LoRA и QLoRA отстают от полного файнтюнинга всего на несколько процентов. Разрыв увеличивается на сложных задачах рассуждения (особенно в математике), где полный файнтюнинг явно сохраняет преимущество. Так что ответ не «почти эквивалентно» и не «хуже». Всё зависит от задачи, и тип задачи подскажет, на какой стороне этой границы вы находитесь.

Наиболее наглядные данные по типам задач получены из исследования Anyscale за сентябрь 2023 года на исследование Anyscale на Llama 2. На ViGGO, задаче структурированного функционального представления, LoRA достигла примерно 95% точности полного fine-tuning на моделях 7B и 13B: разрыв в 2%, который авторы посчитали приемлемым компромиссом. На генерации SQL LoRA почти сравнялась с полным fine-tuning, а модель LoRA 13B даже превзошла полностью настроенную 7B. На GSM8k, бенчмарке математических рассуждений, LoRA стабильно уступала полному fine-tuning на 7B и 13B, и разрыв сокращался только на 70B. Команда Anyscale считает, что низкоранговая аппроксимация LoRA может не улавливать такой сложный навык, как многошаговая математика.

Одна оговорка к этим цифрам: исследование проводилось на Llama 2 в сентябре 2023 года. Закономерность по типу задачи (структурированный вывод близко, сложные рассуждения дальше) — это устойчивый вывод, который сохраняется по духу с тех пор. Но точные процентные показатели могут отличаться на более новой базовой модели, такой как Llama 3 или Mistral, так что относитесь к цифрам как к форме компромисса, а не гарантии для вашей модели.

История качества QLoRA — своя собственная. В статье о QLoRA сообщается, что Guanaco, ее модель на 65B, обученная с QLoRA, достигла 99,3% производительности ChatGPT на бенчмарке Vicuna. Впечатляюще, но привязано к этому конкретному бенчмарку и сравнению 2023 года, а не общее утверждение «QLoRA равен ChatGPT». По сравнению с обычной LoRA, Axolotl характеризует QLoRA как имеющую «небольшую деградацию из-за шума квантования»: 4-битная база вносит небольшие ошибки, которых нет у базы LoRA с полной точностью. Для большинства задач это незаметно; для задачи, чувствительной к небольшим сдвигам точности, это стоит проверить, а не предполагать.

Совет: Самый распространенный сюрприз с качеством — не QLoRA против LoRA. Это fine-tuned модель, которая получается хуже базовой модели, с которой вы начали. Обычно это означает, что обучение сделало что-то непреднамеренное: слишком агрессивно на узком наборе данных, или оценивалось только на новой задаче, в то время как общая способность незаметно регрессировала. Всегда тестируйте fine-tuned модель на нескольких запросах за пределами вашего распределения обучения, прежде чем доверять ей. Регресс там — сигнал отступить, а не выпускать.

Вывод раздела: паритет качества зависит от задачи. Структурированный вывод и следование инструкциям безопасны для LoRA/QLoRA; сложные рассуждения — там, где полный fine-tuning все еще оправдывает свою цену.

Когда следует выбирать каждый метод?

Decision tree for picking a fine-tuning method: check available VRAM first, then task type and quality requirement, then speed needs, routing to QLoRA as the default, LoRA as the speed and headroom upgrade, or full fine-tuning as the maximum-performance choice

Начните с QLoRA для большинства случаев fine-tuning на одном GPU. Переходите на обычную LoRA, когда у вас есть запас VRAM и вы хотите более быстрые шаги или чуть более высокий потолок качества. Оставьте полный fine-tuning для случаев, которые в нем действительно нуждаются: большие сдвиги распределения, изменения масштаба предобучения или задачи, критичные к рассуждению, где разрыв в бенчмарках реален. Ориентируйтесь на три параметра по порядку: доступная VRAM, тип задачи и требование к качеству, затем скорость.

Вот маршрутизация в формате «делайте так, а не так»:

1. Сначала проверьте объём VRAM. Если у вас одна карта с 24 ГБ или меньше (большинство потребительских и prosumer-GPU), QLoRA — ваш метод по умолчанию, потому что это единственный из трёх, который надёжно вмещает модель 7B в такой объём. Не беритесь за full fine-tuning на одной потребительской карте: таблица выше уже показывает, что задача 7B туда не влезет, и вы потратите выходные, чтобы убедиться в этом на собственном опыте.

2. Затем оцените вашу задачу и требования к качеству. Если ваша задача — это следование инструкциям, структурированный вывод, SQL или адаптация к общей области, данные Anyscale показывают, что LoRA и QLoRA дают качество, близкое к полному. Оставайтесь на варианте по умолчанию. Если ваша задача требует интенсивного рассуждения (многошаговая математика, сложные логические цепочки) и качество не подлежит компромиссу, это ваша первая реальная причина рассмотреть переход к full fine-tuning, потому что это единственный тип задачи, где бенчмарки показывают устойчивый разрыв.

3. Затем оцените скорость. QLoRA жертвует частью скорости на шаг ради экономии памяти: 4-битную базу нужно деквантовать на ходу. Если у вас достаточно VRAM для обычного LoRA (16-24 ГБ для модели 7B), вы получаете более быстрые шаги и избегаете шума от квантования, что делает LoRA лучшим выбором, когда память не является ограничивающим фактором и вы много итерируете.

Когда is full fine-tuning — правильный ответ? Рекомендация Axolotl прямая: он необходим для предобучения (pre-training) и является выбором «когда у вас достаточно памяти GPU или настроена мульти-GPU конфигурация, и нужна максимальная производительность». За пределами этих условий (а это большинство практических случаев fine-tuning, где существующую модель адаптируют под конкретное поведение или домен) параметрически эффективные методы дают вам почти всё качество за малую долю аппаратных ресурсов.

Unsloth формулирует выбор по умолчанию прямо:

«Мы рекомендуем начинать с QLoRA, поскольку это один из самых доступных и эффективных методов обучения моделей».

Вот и правило. По умолчанию QLoRA, переходите на LoRA для скорости, если хватает памяти, и переходите на полное дообучение только тогда, когда это требуется задачей или масштабом.

Вывод раздела: QLoRA — вариант по умолчанию, LoRA — переход к скорости и запасу ресурсов, полное дообучение — исключение, которое оправдано сдвигом распределения, предобучением или тестом на рассуждение.

В чём люди чаще всего ошибаются насчёт методов fine-tuning?

Именно два заблуждения приводят к большинству впустую потраченных выходных. Первое — считать fine-tuning способом научить модель новым фактам, тогда как его основной эффект — формирование поведения. Второе — считать, что качество можно «купить», просто покрутив ручку: что более высокий ранг LoRA или full fine-tuning вместо QLoRA автоматически дают лучшую модель. Оба утверждения наполовину верны, и именно поэтому они вводят в заблуждение.

Учит ли fine-tuning модель новым фактам?

Здесь действительно есть расхождение между экспертами, поэтому важно уловить нюанс, а не занимать какую-то одну сторону. Несколько практических руководств называют утверждение «fine-tuning учит новым фактам» заблуждением номер один: их аргумент в том, что fine-tuning гораздо лучше формирует то, как модель отвечает, чем надёжно внедряет конкретные факты, которых она никогда не видела на этапе предобучения. Документация Unsloth прямо возражает, называя утверждение о том, что fine-tuning не может учить новым знаниям, «ложным», и описывая fine-tuning как способ «внедрять и изучать новую информацию, специфичную для домена».

Обе стороны частично правы, и примиряющая трактовка такая: fine-tuning надёжно формирует поведение и усиливает знания, которые уже скрыто присутствуют в базовой модели, и может кодировать паттерны, специфичные для конкретного домена. Ненадёжен он в том, чтобы внедрять отдельные факты, полностью отсутствовавшие на этапе предобучения. Чем больше ваша цель похожа на «запомнить этот конкретный документ», тем выше вероятность, что вы выбрали неправильный инструмент, и retrieval может сработать лучше. Так что практическая рекомендация переживает этот спор: опирайтесь на fine-tuning для поведения и стиля, но относитесь скептически к нему как к механизму внедрения фактов.

Всегда ли более высокий ранг LoRA повышает качество?

Нет, и это самая простая ручка, которую легко перекрутить. Интуиция подсказывает, что более высокий ранг даёт адаптеру больше емкости, а значит, больше — значит лучше. Databricks проверила это эмпирически и обнаружила, что удвоение ранга «по всей видимости не приводит к какому-либо заметному повышению качества вывода». Что действительно повлияло в их экспериментах — это то, какие слои они выбирали в качестве целевых (адаптация всех линейных слоёв, а не только блоков внимания), а не накручивание значения ранга. Вывод, который стоит сделать: тратьте усилия на настройку целевых модулей и качество данных, прежде чем тратить их на раздувание ранга.

Всегда ли качество LoRA равно полному fine-tuning'у?

Не всегда, и недавняя научная статья указывает на конкретный режим сбоя. "LoRA vs Full Fine-tuning: An Illusion of Equivalence" авторов Shuttleworth et al. показывает, что обучение LoRA может вносить «вторгающиеся измерения» (сингулярные векторы высокого ранга, отсутствующие в полностью дообученных моделях), и связывает их с забыванием в сценариях непрерывного обучения, где одна и та же модель дообучается многократно. Это конкретная оговорка, а не полное отрицание: если вы делаете один раунд fine-tuning для одной задачи, широкие доказательства паритета качества остаются в силе. Если вы выстраиваете цепочку fine-tuning'ов и заботитесь о сохранении общих способностей базовой модели, именно этот режим сбоя стоит отслеживать.

Часто задаваемые вопросы

В чём разница между LoRA, QLoRA и полным fine-tuning'ом?

Полный fine-tuning обновляет каждый параметр модели. LoRA замораживает базовую модель и вместо этого обучает небольшие матрицы адаптеров низкого ранга, примерно 0,1-2% параметров. QLoRA делает то же самое, что и LoRA, а также квантизирует замороженную базовую модель до 4-битной точности NF4, поэтому база занимает намного меньше памяти во время обучения адаптеров. Результат — чёткая иерархия по памяти: полный fine-tuning самый тяжёлый, LoRA легче, QLoRA самый лёгкий.

Сколько VRAM нужно для fine-tuning модели на 7B параметров?

Для модели на 7B параметров данные Axolotl оценивают полный fine-tuning примерно в 60-80 ГБ, LoRA — в 16-24 ГБ, а QLoRA — в 10-14 ГБ. QLoRA — единственный из трёх методов, который обычно помещается в один потребительский или прозюмерский GPU на 12-24 ГБ; полный fine-tuning модели на 7B требует памяти уровня датацентра или нескольких GPU.

Хуже ли качество QLoRA по сравнению с LoRA или полным fine-tuning'ом?

Это зависит от задачи. Для большинства работ по следованию инструкциям и структурированному выводу QLoRA укладывается в несколько процентов от полного fine-tuning, и Axolotl описывает лишь «небольшую деградацию из-за шума квантования» по сравнению с обычной LoRA. Разрыв увеличивается на сложных задачах рассуждения, таких как математика, где полный fine-tuning показал устойчивое преимущество в исследовании Anyscale 2023 года на Llama 2.

Когда полный fine-tuning действительно оправдан?

Полный fine-tuning оправдывает свою цену для предобучения, больших сдвигов распределения и задач, критичных к рассуждению, где бенчмарки показывают реальный разрыв в качестве. Это также путь, когда у вас достаточно памяти GPU или настройка с несколькими GPU и нужно максимальное качество. Для обычного случая (адаптация существующей модели к конкретному поведению или домену) LoRA или QLoRA дают вам большую часть качества за долю от аппаратных затрат.

Учит ли fine-tuning модель новым фактам?

Частично. Fine-tuning надежен для формирования поведения и усиления знаний, уже скрытых в базовой модели, и может кодировать доменно-специфичные паттерны. Он ненадежен для внедрения дискретных фактов, полностью отсутствовавших в предобучении. Здесь есть настоящее разногласие экспертов. Документация Unsloth утверждает, что fine-tuning может учить новым знаниям, в то время как другие руководства называют это главным заблуждением, и примиряющий взгляд — использовать fine-tuning для поведения и стиля, а обращаться к retrieval, когда цель — вспоминать конкретные факты.

Что это значит для вас

Выбор метода сводится к одному варианту по умолчанию и двум путям отступления: начните с QLoRA, переходите на LoRA, когда память не является ограничением и вы хотите более быстрые шаги, переходите на полный fine-tuning только когда это вынуждают сдвиг распределения, предобучение или бенчмарк рассуждения.

После определения метода следующее решение — это подразумеваемое им оборудование. Ваш выбор метода только что сказал вам, ищете ли вы одну потребительскую карту или память дата-центра. Если вы хотите сравнить конкретные карты для ИИ-нагрузок, наш бенчмарк H100 vs RTX 4090 покрывает эту тему. Подбор размера GPU для выбранного вами метода и пошаговое руководство по запуску самого обучающего задания — это отдельные руководства.

Share

Ещё в блоге

Читайте дальше.

Готовы к развёртыванию? От $2,48/мес.

Независимое облако с 2008 года. AMD EPYC, NVMe, 40 Gbps. Возврат денег в течение 14 дней.