🎯 Definicja

LoRA Adapter (skrót: Low-Rank Adaptation of Large Language Models) to technika efektywnego dostrajania dużych modeli językowych (LLM), która polega na „zamrożeniu” oryginalnych wag modelu i modyfikacji tylko niewielkich, dodanych parametrów o niskiej randze (low-rank). LoRA umożliwia szybkie, oszczędne i efektywne dostrajanie modeli bez konieczności trenowania wszystkich ich wag.

🔑 Kluczowe punkty

  • Parametry bazowe modelu pozostają niezmienione (zamrożone) – uczenie dotyczy tylko adapterów.
  • Dodawane są dwie małe macierze (A i B) do każdej warstwy, które reprezentują korekcję wag.
  • Obniża koszty pamięci i obliczeń – znaczna oszczędność vs full fine-tuning.
  • Możliwość szybkiego przełączania się między wariantami modelu z różnymi adapterami.
  • Zyskała dużą popularność dzięki efektywności w systemach typu Hugging Face Transformers, Bitsandbytes i PEFT (Parameter-Efficient Fine-Tuning).

📚 Szczegółowe wyjaśnienie

Jak działa LoRA?

Dla każdej warstwy liniowej w modelu, np. W ∈ ℝ^{d×k}, zamiast uczyć W, dodajesz korektę:

W_loRA = W + ΔW
ΔW = B × A → gdzie A ∈ ℝ^{r×k}, B ∈ ℝ^{d×r}, z r ≪ d,k

Zamiast uczyć W (duży, pełnowymiarowy tensor), LoRA uczy niewielkie A i B — dwie macierze o zmniejszonej randze r, często r=4, 8, 16.

Korzyści:

WłaściwośćPełen fine-tuningLoRA Adapter
Parametry aktualizowaneWszystkie wagiTylko adaptery
Zużycie GPU RAMWysokieNiskie
Łatwość przełączania modeliBrakAdapter jako plik ∼30MB–100MB
Szybkie eksperymentyNieTak
Skalowanie wiele taskówTrudneŁatwe przez wczytywanie adapterów

Gdzie używamy LoRA?

  • Dostrajanie modeli typu LLaMA, Mistral, BLOOM, GPTQ baz modeli do specyficznych zadań.
  • Tworzenie personalizowanych lub domenowych wersji LLM.
  • Chatboty z zachowaniem tożsamości i stylu konwersacji.
  • Fine-tuning z RAG (Retrieval-Augmented Generation).
  • Popularne środowiska:
    • Hugging Face (peft, transformers)
    • QLoRA (Quantized LoRA – połączenie kvantyzacji + adapterów)
    • Axolotl / Open LLM Leaderboard

💡 Przykład kodu z użyciem Hugging Face peft

from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM
 
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b")
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=8,
    lora_alpha=16,
    lora_dropout=0.1,
    target_modules=["q_proj", "v_proj"]
)
model = get_peft_model(model, lora_config)

🛠️ QLoRA – specjalna odmiana

QLoRA = Quantized + LoRA

  • Modele są najpierw 4-bit quantized (np. z bitsandbytes), potem dostrajane z LoRA.
  • Trenujesz ogromne modele (np. Llama 65B) na jednej karcie A100 40GB.
  • Rewolucja w dostępności LLM dla małych zespołów i projektów open-source.

✅ Zalety LoRA

ZaletaOpis
WydajnośćTylko ułamek parametrów trenowany
KompatybilnośćIntegruje się bezpiecznie z istniejącymi modelami
Łatwość zarządzaniaAdaptery jako osobne pliki – łatwe w wersjonowaniu
ReużywalnośćMożna przełączać adaptery bez przebudowy modelu
Redukcja kosztówTrening 10–100x tańszy od klasycznego fine-tune

❌ Ograniczenia

  • Adaptery wpływają tylko na część wag → mogą nie uchwycić bardzo złożonych relacji w danych.
  • Nie zawsze tak skuteczny jak pełny fine-tune przy dużych zmianach zadania.
  • Potrzebna dobra wiedza co do wyboru warstw target_modules.

📌 Źródła

👽 Brudnopis

  • LoRA = plug-in tuning do LLM 🤖
  • LoraConfig → decyduje gdzie dokładnie „wstawić” adaptery
  • QLoRA = LoRA + 4bit quant – open tuning dla każdego
  • Dobrze działa z LLaMA/Mistral, pod zadania typu chatbot, klasyfikacja, summarization
  • Adapter można trenować 100x taniej → wrzucić na HF, swapować priorytetowe taski
  • Mistral 7B pełne tune = $$$ — LoRA tune ≤ 2h na Colab 🚀