Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Для чего используется LoRA?
LoRA (Low-Rank Adaptation) — это революционный метод адаптации больших языковых моделей (LLM) с минимальными ресурсами. Это критично для практического применения LLM в Data Science.
Проблема: Fine-tuning больших моделей
# Обучение GPT-3 (175B параметров) требует:
# - GPU память: 700 GB (не существует!)
# - Время обучения: месяцы
# - Стоимость: $1M+
# Даже с gradient checkpointing:
# - GPU память: 24 GB (очень дорого)
# - Время обучения: дни
# - Стоимость: $10,000+
# Результат: невозможно fine-tune для большинства
Решение: LoRA
LoRA добавляет маленькие матрицы рядом с весами моделей и обучает только их.
# Вместо обновления весов W (d × d матрица):
# W_new = W + ΔW где ΔW получается из градиентов
# LoRA использует разложение:
# ΔW ≈ A × B^T где A: (d × r), B: (d × r), r << d
# Параметров для обучения:
# Без LoRA: d² (например, 768² = 590K для BERT-base)
# С LoRA: 2 × d × r (например, 2 × 768 × 8 = 12K)
# Сокращение: 50x меньше параметров!
Практический пример с transformers
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# Загружаем базовую модель
model_name = "meta-llama/Llama-2-7b"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.bfloat16,
device_map="auto"
)
# Без LoRA: требуется ~28 GB GPU памяти для fine-tuning
# С LoRA:
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=["q_proj", "v_proj"], # какие слои адаптировать
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
# Теперь требуется только ~6 GB GPU памяти!
Преимущества LoRA
| Аспект | Обычный Fine-tune | LoRA |
|---|---|---|
| Параметров | 100% (7B) | 0.15% (10M) |
| GPU Память | 28 GB | 6 GB |
| Время обучения | 1 день | 2-4 часа |
| Стоимость (AWS) | $500 | $50 |
| Размер файла | 7 GB | 10 MB |
| Скорость инференса | нормальная | 0% замедления |
| Качество | 100% | 95-99% |
Когда использовать LoRA
# 1. Fine-tuning LLM для специфической задачи
# Пример: обучить GPT для классификации текстов о финансах
# 2. Адаптация к конкретному стилю письма
# Пример: обучить модель писать как конкретный автор
# 3. Быстрое экспериментирование с разными гиперпараметрами
# LoRA позволяет быстро пробовать разные конфигурации
# 4. Обслуживание много моделей на одном сервере
# Base Model: 7B параметров
# LoRA_1: 10 MB (финансы)
# LoRA_2: 10 MB (медицина)
# LoRA_3: 10 MB (закон)
# Total: 7 GB вместо 21 GB (three full models)
Варианты LoRA
# 1. QLoRA (Quantized LoRA)
# - Квантизирует базовую модель до 4-bit
# - Еще меньше памяти (4 GB вместо 6 GB)
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b",
quantization_config=bnb_config,
)
lora_config = LoraConfig(r=16, lora_alpha=32, ...)
model = get_peft_model(model, lora_config)
# Память: 2-3 GB (идеально для GPU 8GB!)
# 2. DoRA (Decomposed Weight-space Retraining)
# - Разделяет вес на величину и направление
# - Немного быстрее сходится
Практический результат
# Пример: обучение Llama-7B для задачи классификации
import json
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM, TrainingArguments, Trainer
# 1. Загружаем базовую модель с квантизацией
base_model_id = "meta-llama/Llama-2-7b"
model = AutoModelForCausalLM.from_pretrained(
base_model_id,
load_in_4bit=True,
device_map="auto",
)
# 2. Конфигурируем LoRA
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_proj", "v_proj", "k_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
# 3. Обучаем
training_args = TrainingArguments(
output_dir="./llama-7b-finance",
per_device_train_batch_size=2,
gradient_accumulation_steps=2,
num_train_epochs=3,
learning_rate=2e-4,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
)
trainer.train()
# Результаты:
# - GPU память: 2 GB (вместо 28 GB)
# - Время: 3 часа (вместо 24 часов)
# - Размер: 10 MB (вместо 7 GB)
# - Качество: 95% от full fine-tune
Выводы
LoRA — это game-changer для:
- Адаптации огромных моделей с минимальными ресурсами
- Обучения специализированных версий моделей
- Использования LLM на обычных GPU (8-12 GB)
- Экономии времени и денег
- Быстрого экспериментирования
Data Scientist ДОЛЖЕН знать:
- Как использовать LoRA для fine-tuning LLM
- Когда full fine-tune лучше, а когда LoRA
- Как выбирать rank и другие гиперпараметры
LoRA открыла возможность использовать LLM без больших облачных бюджетов.