LoRA и QLoRA для экономичного дообучения
Обучайте только низкоранговые адаптеры на квантизованной базовой модели — так дообучение модели 70B помещается на одном GPU
«LoRA и QLoRA для экономичного дообучения» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Зачем нужен PEFT?
Полное дообучение Llama 70B требует 8 и более ускорителей H100 и обновляет 70 миллиардов параметров. PEFT (дообучение с эффективным использованием параметров) обновляет менее 1% параметров при сопоставимом качестве. Это даёт огромную экономию.
LoRA: низкоранговая адаптация
LoRA (Hu и др., 2021) обучает небольшие матрицы «адаптеров» вместе с замороженными базовыми весами:
- Добавляются матрицы A x B, где A имеет размерность dxr, а B — rxd; r мало (8, 16, 64)
- Прямой проход: y = Wx + (BA)x
- Обучаются только A и B — параметров на порядки меньше
QLoRA: квантизированная LoRA
QLoRA (Dettmers и др., 2023) дополнительно снижает затраты, квантизуя базовую модель до 4 бит во время обучения:
- Базовая модель в NF4 (4 бита)
- Адаптеры LoRA с более высокой точностью
- Дообучение модели 70B помещается на одном A100/H100
Setup with peft + transformers
# pip install peft transformers bitsandbytes
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
'meta-llama/Llama-3.1-8B-Instruct',
load_in_4bit=True, # QLoRA
device_map='auto'
)
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=['q_proj', 'v_proj'],
lora_dropout=0.05,
bias='none'
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: ~0.5% of totalTraining Loop with TRL
from trl import SFTTrainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
tokenizer=tokenizer,
args=TrainingArguments(
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
num_train_epochs=3,
output_dir='./lora-out'
)
)
trainer.train()
model.save_pretrained('./adapter')Использование Unsloth
Unsloth — самая быстрая библиотека для LoRA, в 2 раза быстрее обычного peft. Интерфейс API для простой замены:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name='meta-llama/Llama-3.1-8B-Instruct',
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']
)Оценка затрат
QLoRA для Llama 3.1 8B на 10k примерах:
- ~4 часа на одном H100
- ~$5–10 затрат на облачный GPU
- Файл адаптера: 100–300 MB
Выбор ранга r
- r = 8 — минимальный вариант для изменений формата и стиля
- r = 16–32 — подходит для большинства случаев
- r = 64+ — для существенного нового поведения и большей ёмкости
Целевые модули
По умолчанию выбирайте проекции внимания (q, v). Для большей ёмкости включите все линейные слои — качество будет выше, но параметров станет больше.
Важные гиперпараметры
- Скорость обучения — обычно от 1e-4 до 5e-4
- Эпохи — 2–5 для SFT
- Размер пакета — зависит от VRAM; используйте накопление градиента, чтобы имитировать больший размер
Объединение адаптера с базовой моделью
При выводе можно объединить LoRA обратно с базовыми весами:
merged = model.merge_and_unload()
merged.save_pretrained('./full-model')Обслуживание нескольких LoRAs
vLLM поддерживает горячую замену LoRAs во время вывода. Это полезно для дообученных под каждого клиента моделей на общей базовой модели:
llm = LLM(model='base', enable_lora=True, max_lora_rank=64)
response = llm.generate(prompt, lora_request=LoRARequest('customer-a', 1, './customer-a-adapter'))Оценка адаптера
Всегда запускайте набор для оценки YOUR на дообученной модели. Иногда после дообучения результат на пограничных случаях хуже — честно учитывайте регрессии.
Преимущество LoRA
Каково главное практическое преимущество LoRA перед полным дообучением?
Повторение
LoRA + QLoRA = экономичное дообучение. Unsloth обеспечивает скорость, а peft/TRL — широкий набор возможностей. Ранг 16–32 подходит для большинства случаев. Проводите оценку по эталонному набору.
Часто задаваемые вопросы
Урок «LoRA и QLoRA для экономичного дообучения» бесплатный?
Да — полный текст урока «LoRA и QLoRA для экономичного дообучения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «LoRA и QLoRA для экономичного дообучения»?
Обучайте только низкоранговые адаптеры на квантизованной базовой модели — так дообучение модели 70B помещается на одном GPU Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «LoRA и QLoRA для экономичного дообучения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Когда дообучение лучше подсказок
- Сбор данных: траектории и воспроизведение трасс
- LoRA и QLoRA для экономичного дообучения
- Оценка дообученных моделей по сравнению с базовой