Дообучение локальной LLM: LoRA, QLoRA или RAG — что выбрать

Локальный ИИ · fine-tuning · LoRA / QLoRA

Дообучение локальной LLM: LoRA, QLoRA, RAG и практический запуск

Не каждую проблему нужно решать обучением модели. Если нейросеть должна помнить новые документы — чаще нужен RAG. Если же нужно устойчиво изменить формат ответов, стиль, терминологию, tool calling или поведение на конкретном типе задач — начинается область fine-tuning. Для домашней GPU самый практичный путь сегодня — LoRA или QLoRA.

Актуально: сентябрь 2026 Unsloth · Hugging Face PEFT · TRL Windows · Linux · NVIDIA / AMD / Intel
LoRA QLoRA SFT PEFT Unsloth GGUF
Если нужен короткий алгоритм. Сначала проверьте prompt и RAG. Если проблема не в знаниях, а в устойчивом поведении модели, начинайте с SFT + QLoRA. Для первого эксперимента достаточно небольшой instruct-модели и качественного набора примеров. Обучайте адаптер, проверяйте на отложенных данных и только потом экспортируйте в GGUF/Ollama.

Когда локальную LLM действительно стоит дообучать

Fine-tuning полезен, когда нужно изменить поведение модели, а не просто показать ей очередной документ.

Формат ответа Например, всегда выдавать JSON определённой схемы или технический отчёт заданной структуры.
Стиль Устойчивый тон, терминология, формат диалога или корпоративная манера.
Классификация Категории заявок, писем, технических ошибок или документов.
Tool calling Научить модель лучше выбирать конкретные функции и формировать аргументы.
Узкая задача Повторяемый workflow, где сотни хороших примеров важнее широты знаний.
Доменный язык Стабильное использование терминов и паттернов конкретной предметной области.

Fine-tuning также способен добавлять доменные знания, но использовать его как замену обновляемой базы знаний часто неудобно: при каждом изменении данных модель пришлось бы обучать заново.

RAG или fine-tuning: что выбрать

Задача Что обычно лучше Почему
Ответы по постоянно меняющимся документам RAG Документы можно переиндексировать без обучения модели.
Стабильный стиль/формат ответа LoRA / QLoRA Поведение закрепляется в adapter weights.
Ответы со ссылкой на источник RAG Модель получает конкретный retrieved fragment.
Лучше выполнять повторяемую узкую задачу Fine-tuning Модель учится на множестве правильных примеров выполнения.
И знания, и специализированное поведение RAG + fine-tuning Эти методы не исключают друг друга.
Не начинайте с обучения, если модель просто не знает свежий документ. Для этого уже есть RAG. Fine-tuning оправдан, когда prompt + retrieval не дают устойчивого нужного поведения.

Гайд по RAG: локальная нейросеть для PDF и документов.

Что такое LoRA

LoRA — Low-Rank Adaptation — метод parameter-efficient fine-tuning. Основные веса base model остаются замороженными, а обучение изменяет небольшие добавочные low-rank matrices.

Base model Замороженные веса

Основная модель не переписывается целиком.

+
LoRA adapter Маленькие обучаемые матрицы

Именно они обновляются во время training.

=
Результат Специализированная модель

Base + adapter дают новое поведение.

Hugging Face PEFT называет LoRA одним из наиболее популярных и удобных методов PEFT. Главный выигрыш — обучается лишь небольшая доля параметров вместо всей модели.

Что такое QLoRA

QLoRA сохраняет идею LoRA, но base model загружается в 4-bit представлении. Это резко уменьшает VRAM, необходимую для training.

QLoRA = 4-bit base model + обучаемые LoRA adapters

В Hugging Face bitsandbytes для QLoRA используется 4-bit quantization; для обучения 4-bit base models документация рекомендует тип NF4.

Не путайте QLoRA с GGUF Q4_K_M. QLoRA training обычно работает с 4-bit training representation вроде NF4 через bitsandbytes. Q4_K_M — другой формат, типичный для GGUF inference.

LoRA или QLoRA

LoRA Base model в 16-bit. Быстрее и немного точнее, но требует значительно больше VRAM.
QLoRA Base model в 4-bit. Намного экономнее по VRAM, поэтому удобнее для домашней GPU.

В актуальной документации Unsloth LoRA описывается как 16-bit training, а QLoRA — как 4-bit. Unsloth оценивает LoRA как немного быстрее и точнее, но примерно в четыре раза более требовательную по памяти.

Для первого домашнего эксперимента обычно начинайте с QLoRA. Full fine-tuning и 16-bit LoRA имеет смысл рассматривать после того, как доказано, что задача вообще выигрывает от обучения.

Сколько VRAM нужно для QLoRA

Ниже — минимальные ориентиры из актуальной документации Unsloth. Это не гарантия: context length, batch size, архитектура и optimizer могут потребовать больше.

Размер модели QLoRA 4-bit LoRA 16-bit
3B≈3,5 ГБ≈8 ГБ
7B≈5 ГБ≈19 ГБ
8B≈6 ГБ≈22 ГБ
9B≈6,5 ГБ≈24 ГБ
11B≈7,5 ГБ≈29 ГБ
14B≈8,5 ГБ≈33 ГБ
27B≈22 ГБ≈64 ГБ
32B≈26 ГБ≈76 ГБ

Практический вывод: QLoRA 7–14B-класса сегодня реально тестировать на обычной потребительской GPU. Но таблица показывает абсолютные минимумы Unsloth, а не «комфортные требования».

Что сильнее всего повышает расход памяти

  • длинный training sequence;
  • batch size;
  • более крупная base model;
  • LoRA rank;
  • отключённый gradient checkpointing;
  • vision/multimodal training;
  • optimizer и дополнительные training states.

Если получаете CUDA OOM, документация Unsloth предлагает в первую очередь снижать batch size до 1–3.

Как выбрать base model

Fine-tuning не исправляет фундаментальные ограничения слабой base model. Поэтому сначала выберите модель, которая уже умеет примерно то, что требуется.

Чат / инструкции Instruct model

Для первого SFT почти всегда проще начать с готовой instruct-версии.

Код Coder model

Дообучайте модель, которая уже сильна в программировании.

Vision VLM

Текстовая модель не станет vision-моделью из-за набора картинок.

Русский язык Проверяйте до обучения

Если base model плохо знает русский, небольшой LoRA не гарантирует чудо.

Dataset важнее большинства hyperparameters

Fine-tuning обучает модель повторять паттерны из dataset. Поэтому ошибки, многословие и плохие ответы тоже становятся training signal.

Простой формат prompt → completion

JSONL
{"prompt":"Определи категорию заявки: Не работает розетка на кухне","completion":"электрика"}
{"prompt":"Определи категорию заявки: Не подключается ноутбук к Wi-Fi","completion":"сеть"}
{"prompt":"Определи категорию заявки: Камера показывает offline","completion":"видеонаблюдение"}

Диалоговый формат

messages
{
  "messages": [
    {"role":"user","content":"Сформируй краткое техническое заключение."},
    {"role":"assistant","content":"Причина: ...\nПроверка: ...\nРешение: ..."}
  ]
}

Hugging Face TRL SFTTrainer поддерживает как language-modeling, так и prompt-completion datasets.

Сколько примеров нужно

Универсального числа нет. Сотня очень чистых и однородных примеров может дать заметный эффект на узкой задаче, а тысячи слабых примеров — испортить модель.

Не генерируйте dataset одной и той же моделью и не принимайте всё без проверки. Вы рискуете просто усилить её собственные ошибки и шаблонность.

Train, validation и test нужно разделять до обучения

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

TrainОсновная часть примеров, по которым обновляется adapter.
ValidationКонтроль training process и hyperparameters.
TestФинальная независимая проверка после обучения.

Для небольшого dataset особенно важно вручную проверить, чтобы очень похожие варианты одного исходного примера не оказались одновременно в train и test.

Установка Unsloth локально

Unsloth сегодня поддерживает Linux и Windows, NVIDIA, AMD и Intel GPU; для разных backend есть отдельные инструкции. Самый простой общий вариант установки:

pip
pip install unsloth

или:

uv
uv pip install unsloth

Для изолированной серверной среды есть официальный Docker image unsloth/unsloth.

Не копируйте старые команды CUDA/PyTorch из случайной статьи. Связка Torch, CUDA, Triton, bitsandbytes и xformers быстро меняется. Для конкретной GPU используйте актуальную installation page Unsloth/PyTorch.

Минимальная схема QLoRA training

Упрощённый workflow выглядит так:

1 4-bit base model

Загружается QLoRA-compatible base model.

2 Добавляется LoRA

Определяются trainable adapter layers.

3 SFTTrainer

Обучение идёт на подготовленном dataset.

4 Evaluation

Сравнивается base model и adapter на test-наборе.

Концептуально код Unsloth выглядит так:

Схема, а не универсальный copy-paste под любую модель
from unsloth import FastLanguageModel

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="YOUR_MODEL",
    max_seq_length=2048,
    load_in_4bit=True,
)

model = FastLanguageModel.get_peft_model(
    model,
    r=16,
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj"
    ],
    lora_alpha=16,
    lora_dropout=0,
    use_gradient_checkpointing="unsloth",
)

Затем dataset передаётся в TRL SFTTrainer и запускается trainer.train(). Конкретный tokenizer/chat template, model class и dataset formatter зависят от выбранной архитектуры.

Какие hyperparameters действительно нужно понимать

Параметр Что меняет Разумный старт
r Ёмкость LoRA adapter 16 или 32
lora_alpha Масштаб влияния adapter ≈ r или 2×r
learning rate Размер шага оптимизации Зависит от метода и dataset
epochs Сколько раз модель видит dataset Обычно 1–3 для instruction SFT
batch size Память и стабильность training При нехватке VRAM начать с 1–2
max sequence length Размер training context Не ставить максимум без необходимости

Unsloth рекомендует для LoRA rank часто начинать с 16 или 32 и предупреждает о diminishing returns/overfitting при чрезмерном числе epochs.

Как понять, что fine-tuning реально помог

До training создайте фиксированный benchmark из реальных задач. После training прогоните:

  1. base model с одинаковым prompt;
  2. base + LoRA adapter;
  3. по возможности RAG/prompt-only baseline;
  4. слепую ручную оценку результатов;
  5. автоматическую метрику, если задача допускает её.

Для classification

Accuracy, precision/recall/F1.

Для JSON / structured output

Процент валидного JSON и точное соблюдение schema.

Для tool calling

Правильный выбор tool + корректность arguments + успешность полного workflow.

Для свободного текста

Human evaluation на отложенных реальных запросах важнее одной aggregate метрики.

Fine-tuning должен выигрывать у baseline. Если новый adapter не лучше хорошего system prompt или RAG, дополнительные training complexity и maintenance не оправданы.

Как выглядит переобучение

Модель может отлично повторять training examples и одновременно стать хуже на новых формулировках.

Признаки:

  • training loss падает, validation перестаёт улучшаться;
  • ответы становятся слишком одинаковыми;
  • модель копирует целые куски training data;
  • хуже работает на вопросах вне узкого шаблона;
  • теряет полезные способности base model.

Увеличивать epochs только потому, что «GPU ещё свободна» — плохая стратегия.

Сохранять adapter или целую модель

Одно из главных преимуществ LoRA — adapter может быть очень небольшим относительно base model.

Base + adapter Удобно хранить несколько специализаций одной модели и быстро переключать их.
Merged model Проще для runtime, который не умеет подключать LoRA отдельно.

Hugging Face PEFT предоставляет merge_and_unload() для объединения adapter weights с base model в standalone model. Но merge — отдельный этап deployment, а не обязательная часть обучения.

Как превратить fine-tuned модель в GGUF

Unsloth умеет экспортировать fine-tuned модель напрямую в формат GGUF для llama.cpp, Ollama, LM Studio и других локальных runtimes.

Q4_K_M
model.save_pretrained_gguf(
    "my-model",
    tokenizer,
    quantization_method="q4_k_m"
)

Можно также экспортировать Q8_0 или F16:

Другие варианты
model.save_pretrained_gguf("my-model-q8", tokenizer, quantization_method="q8_0")
model.save_pretrained_gguf("my-model-f16", tokenizer, quantization_method="f16")
QLoRA training 4-bit и финальный GGUF Q4_K_M — не один и тот же quantization step. После обучения модель/adapter экспортируются и затем преобразуются в inference-формат.

Подробнее о GGUF: GGUF и квантизация локальных LLM.

Как запустить fine-tuned модель в Ollama

Один практичный путь — экспортировать модель в GGUF, создать Modelfile и импортировать её в Ollama.

Modelfile
FROM ./my-model-Q4_K_M.gguf
Создание локальной модели
ollama create my-finetuned-model -f Modelfile
ollama run my-finetuned-model

Unsloth также имеет отдельную официальную инструкцию сохранения fine-tuned models в Ollama и автоматического создания Modelfile.

Нужно ли merge LoRA adapter с base model

Не всегда.

Runtime умеет LoRA Не merge

Adapter остаётся маленьким и можно переключать специализации.

Нужен standalone GGUF Merge / export

Удобно для Ollama/llama.cpp как одной модели.

QLoRA Merge осторожно

Base model при training была quantized; используйте документированный export path.

Несколько adapters Хранить отдельно

Не обязательно создавать отдельную многогигабайтную модель на каждую задачу.

Для QLoRA особенно разумно использовать export/merge процедуры фреймворка, а не вручную «переквантовывать» уже quantized layers.

Главные ошибки при первом fine-tuning

1. Fine-tuning вместо RAG

Если задача — отвечать по свежему прайс-листу, документации или базе знаний, обучение часто лишнее.

2. Плохой dataset

Модель учится именно тем ошибкам и шаблонам, которые вы в него положили.

3. Нет baseline до training

После обучения невозможно понять, стало лучше или просто иначе.

4. Слишком большая модель

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

5. Слишком длинный context

Training sequence напрямую влияет на VRAM и время обучения.

6. Слишком много epochs

Повтор одного маленького dataset десятки раз ускоряет memorization, а не обязательно улучшает generalization.

7. Проверка на training data

Это измеряет способность запоминать, а не работать на новых запросах.

8. Сразу merge и удалить adapter

Сначала сохраните исходный adapter, config, dataset version и параметры training.

Что сохранять вместе с обученной моделью

  • точный base model ID и revision;
  • adapter;
  • dataset или его version/hash;
  • train/validation/test split;
  • LoRA rank и alpha;
  • learning rate;
  • epochs/steps;
  • max sequence length;
  • версии Unsloth/Transformers/PEFT/TRL;
  • результаты baseline и post-training evaluation.
Без этого fine-tuning трудно воспроизвести. Файл adapter без информации о base model и training configuration — неполный артефакт.

Частые вопросы

Можно ли дообучить LLM на домашней RTX?

Да. QLoRA заметно снижает требования к VRAM. По текущим минимальным оценкам Unsloth 7B требует около 5 ГБ, 8B — около 6 ГБ, 14B — около 8,5 ГБ VRAM, но реальный расход зависит от context и batch size.

Что лучше для 8 ГБ VRAM — LoRA или QLoRA?

Обычно QLoRA. 16-bit LoRA требует гораздо больше памяти. На 8 ГБ разумнее работать с небольшой 4-bit base model.

Fine-tuning добавит модели мои документы?

Он может изменить знания модели, но для регулярно меняющихся документов удобнее RAG. Fine-tuning лучше использовать для устойчивого поведения и задач.

Сколько примеров нужно для LoRA?

Фиксированного числа нет. Для узкого поведения эффект может появиться на сотнях качественных примеров; сложные задачи требуют больше данных и тщательной оценки.

Нужно ли обучать base model или instruct model?

Для первого supervised fine-tuning обычно проще instruct model: она уже умеет следовать инструкциям и вести диалог. Base model нужен для более специфических training strategies.

Можно ли fine-tuned модель запустить в Ollama?

Да. Один из типовых путей — экспортировать её в GGUF и импортировать через Modelfile. Unsloth имеет отдельные инструменты экспорта в GGUF/Ollama.

QLoRA и Q4_K_M — одно и то же?

Нет. QLoRA использует 4-bit представление base model для training, часто NF4. Q4_K_M — GGUF quant для inference.

Что такое SFT?

Supervised Fine-Tuning — обучение на примерах правильного входа и ожидаемого ответа. Для большинства первых LoRA/QLoRA-задач это базовый метод.

Можно ли обучать gpt-oss локально?

Да, современные fine-tuning framework поддерживают gpt-oss. Unsloth отдельно заявляет оптимизированное обучение MoE-моделей и приводит gpt-oss-20b как поддерживаемый пример.

Живой спрос

Почему LoRA/QLoRA снова обсуждают в 2026 году

После роста RAG многие пользователи решили, что fine-tuning больше не нужен. Но это две разные технологии. В свежей ветке LocalLLaMA от 26 августа 2026 отдельно обсуждается практический случай, где LoRA/QLoRA оказался полезнее RAG для специализированного поведения модели.

Параллельно инструменты стали заметно доступнее: Unsloth публикует минимальные VRAM-оценки для QLoRA на потребительских GPU, Hugging Face TRL напрямую поддерживает PEFT/QLoRA через SFTTrainer, а готовую модель можно экспортировать обратно в GGUF и Ollama.

Open source

Полезные проекты

Первичные источники

Документация

Локальное дообучение LLM

Не уверены, нужен ли вам RAG или QLoRA?

Можно сначала определить задачу и baseline, подобрать base model и dataset, оценить VRAM, а затем настроить локальный fine-tuning и экспорт результата в Ollama без лишнего обучения большой модели.