LoRA (Low-Rank Adaptation) — это метод параметрически эффективного дообучения (parameter-efficient fine-tuning), в котором базовые веса предобученной модели остаются замороженными, а вместо полного обновления матрицы весов обучаются две небольшие низкоранговые матрицы, задающие добавку к исходным весам. Проще говоря, вы адаптируете большую модель под задачу, не переписывая весь её чекпойнт.
В исходной статье 2021 года авторы сообщали качество на уровне полного дообучения или выше на ряде моделей, включая RoBERTa, DeBERTa, GPT-2 и GPT-3, при меньшем числе обучаемых параметров и без добавочной задержки на инференсе. Для практики это означает одно: если вам нужно дообучить уже готовую модель экономнее, LoRA обычно стоит проверять одной из первых.
Английский термин: LoRA (Low-Rank Adaptation). Полный перевод: низкоранговая адаптация. Связанный общий термин: parameter-efficient fine-tuning (PEFT), но LoRA — не синоним PEFT, а один из методов внутри этого класса.
Простыми словами
LoRA можно представить как тонкую настраиваемую накладку поверх уже собранного механизма. Сам механизм вы не разбираете и не перепаиваете; вы добавляете маленький модуль, который слегка меняет поведение системы именно там, где это нужно.
Грубо говоря, вместо того чтобы заново редактировать огромную книгу, вы добавляете компактный набор правок. Базовая книга остаётся прежней, а ваши правки можно хранить отдельно, подключать, отключать и заменять под другую задачу.
Как это работает
Технически идея такая: у вас есть исходная матрица весов слоя W. В полном дообучении вы меняете саму W. В LoRA базовая W заморожена, а изменение представляется как произведение двух меньших матриц низкого ранга. В упрощённой записи получается что-то вроде W + BA, где A и B — обучаемые матрицы меньшего размера.
Базовая модель | | исходные веса W — заморожены v [ линейный слой ] ^ | добавка LoRA = B(Ax) | A и B — маленькие обучаемые матрицы | В результате слой использует исходное поведение + компактную поправку
- Вы берёте предобученную модель.
- Оставляете её базовые веса без обновления.
- Подключаете LoRA-конфигурацию к нужным частям модели.
- Во время обучения обновляются только низкоранговые матрицы LoRA.
- На выходе вы сохраняете адаптер отдельно от полной базовой модели.
В документации Hugging Face PEFT это и описано как базовый механизм LoRA: исходные веса остаются замороженными, а обучение идёт по компактному low-rank-обновлению. Там же отдельно рассматривается слияние весов, поэтому в рабочих процессах LoRA часто воспринимают не как «другую модель», а как компактный набор поправок к уже существующей модели.
Важно не путать это с обучением с нуля. LoRA не создаёт новую архитектуру и не заменяет предобучение: она использует уже существующие знания модели и меняет только часть параметрического поведения через небольшой обучаемый путь.
Где применяется
- Дообучение текстовых моделей без полного переписывания весов. Исходная статья проверяла подход на RoBERTa, DeBERTa, GPT-2 и GPT-3-подобных сценариях, то есть на задачах понимания текста и генерации.
- Эксперименты при ограниченных ресурсах. Поскольку обучаемых параметров меньше, LoRA часто выбирают там, где критична VRAM или где нежелательно хранить много полных копий модели.
- Несколько адаптаций одной базовой модели. В текущей интеграции Transformers/PEFT адаптеры можно загружать, добавлять, обучать, переключать и удалять, не оборачивая модель в отдельный
PeftModel. Это удобно, когда одна база используется для нескольких задач. - Комбинация с другими способами адаптации. Если вы не хотите менять знания модели в весах, а хотите подмешивать контекст на лету, сравните LoRA с RAG. Эти подходы решают разные задачи и часто рассматриваются рядом.
Практический пример
Ниже — не готовый copy-paste-проект, а безопасная схема текущего рабочего процесса по официальной документации Hugging Face. Она полезна тем, что показывает именно последовательность: загрузить базовую модель, создать LoraConfig, подключить адаптер через get_peft_model() или add_adapter(), проверить число обучаемых параметров и только потом запускать тренировку.
pip install peft # если нужен ещё не выпущенный функционал из исходников pip install git+https://github.com/huggingface/peft
from peft import LoraConfig, get_peft_model
base_model = ... # предобученная модель
lora_config = LoraConfig(...) # параметры зависят от модели и задачи
model = get_peft_model(base_model, lora_config)
model.print_trainable_parameters()
# дальше — обычный цикл обучения или Trainer
...
# после обучения сохраняется адаптер
model.save_pretrained('adapter_out')
- Установите PEFT. Документация указывает, что библиотека тестируется на Python 3.9+.
- Если вы работаете через интеграцию Transformers, официальные docs требуют
peft >= 0.19.1. - После подключения LoRA обязательно вызовите
model.print_trainable_parameters(). Это рекомендованная проверка, которая подтверждает, что вы действительно обучаете только нужную часть параметров. - Сохраняемый checkpoint в текущем workflow содержит только веса адаптера и
adapter_config.json, а не полный набор весов базовой модели.
На момент среза источников от 2026-08-16 на странице релизов PEFT последним релизом указан v0.20.0 от 2026-07-28. Это важно, потому что API и поддерживаемые варианты LoRA в этой экосистеме развиваются быстро: перед запуском реального проекта сверяйте именно ту версию, на которой будете обучать и загружать адаптер.
Чем отличается от других подходов
| Подход | Что обучается | Что обычно сохраняется | Когда это уместно |
|---|---|---|---|
| LoRA | Небольшие низкоранговые матрицы поверх замороженных базовых весов | Адаптерные веса и adapter_config.json |
Когда нужно экономнее адаптировать готовую модель |
| Полное дообучение (full fine-tuning) | Все или почти все веса модели | Полный чекпойнт модели | Когда вы готовы обновлять весь набор параметров и принимать более тяжёлый процесс |
| PEFT | Зависит от конкретного метода | Зависит от метода | Когда вы выбираете семейство экономных техник; LoRA — один из вариантов внутри PEFT |
Если вам нужна практическая развилка, а не терминологическое сравнение, посмотрите отдельный материал LoRA vs Full fine-tuning: что выбрать. Для визуального домена полезен соседний термин LoRA для изображений: слово то же, но рабочий контекст другой.
Ограничения и заблуждения
- Заблуждение: «LoRA — это отдельная модель». Нет. Это способ дообучения и хранения компактной адаптации поверх базовой модели.
- Заблуждение: «LoRA всегда лучше полного дообучения». Исходная статья показывает сильные результаты на конкретных моделях и задачах, но это не универсальная гарантия для любого датасета и любой архитектуры.
- Заблуждение: «любой tutorial про LoRA одинаково актуален». В экосистеме Hugging Face API и поддержка вариантов развиваются быстро; сверяйте документацию и релиз, а не старую статью или чужой gist.
- Заблуждение: «оригинальный Microsoft/LoRA и современный PEFT — одно и то же по workflow». Нет. Репозиторий Microsoft — это исходная reference-реализация
loralib, и README прямо указывает, что она поддерживает только PyTorch. Повседневный workflow в PEFT/Transformers может отличаться по обвязке, target-модулям и дополнительным возможностям. - Ограничение совместимости. Источники отдельно предупреждают, что современные PEFT-настройки, целевые модули и дополнительные варианты LoRA зависят от конкретной библиотеки и версии. Переносить адаптер между разными стеками без проверки нельзя.
Редакционное ограничение: эта статья сознательно не перечисляет все поздние варианты LoRA и не разбирает каждое поле LoraConfig, потому что этот слой API меняется быстрее, чем сама базовая идея метода. Для production-настроек ориентируйтесь на актуальный package reference и конкретный релиз PEFT.
Практический вердикт: если у вас уже есть базовая модель и цель — недорого адаптировать её под задачу, LoRA — разумная отправная точка. Если же вам принципиально нужно переобучать весь набор весов, LoRA надо сравнивать с полным fine-tuning, а не считать автоматической заменой.
Связанные материалы
- LoRA vs Full fine-tuning: что выбрать
- VRAM (видеопамять)
- RAG (Retrieval-Augmented Generation)
- LoRA для изображений
Источники
- LoRA: Low-Rank Adaptation of Large Language Models
- GitHub – microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models"
- LoRA · Hugging Face
- LoRA · Hugging Face
- Installation · Hugging Face
- Parameter-efficient fine-tuning · Hugging Face
- Releases · huggingface/peft · GitHub
Вопросы и ответы
LoRA — это отдельная модель?
Нет. Это адаптерный способ дообучения поверх предобученной модели: базовые веса заморожены, а обучаются только компактные low-rank-матрицы.
LoRA заменяет full fine-tuning?
Не всегда. LoRA часто удобна как экономная стартовая стратегия, но полное дообучение остаётся отдельным вариантом, если вам нужно менять весь набор весов.
Что сохраняется после обучения LoRA в текущем PEFT/Transformers workflow?
По официальной документации, сохраняются веса адаптера и файл adapter_config.json, а не полный чекпойнт базовой модели.
Можно ли использовать LoRA без экосистемы Hugging Face?
Да. Исходная reference-реализация Microsoft доступна как loralib, но README отдельно указывает, что она поддерживает только PyTorch.