PEFT / LoRA
Jak działa
W podejściu PEFT bazowy model pozostaje w dużej mierze zamrożony, a trening obejmuje jedynie niewielki zestaw dodatkowych parametrów, zwykle w formie adapterów. W przypadku LoRA aktualizacja dużej macierzy wag jest aproksymowana przez iloczyn dwóch mniejszych macierzy niskiego rzędu, dodawanych do wybranych warstw modelu, najczęściej warstw attention lub projekcji liniowych. Dzięki temu liczba trenowanych parametrów dramatycznie spada. Po treningu adapter może być przechowywany oddzielnie od modelu bazowego i ładowany tylko wtedy, gdy jest potrzebny, co upraszcza deployment, współdzielenie i eksperymentowanie z wieloma wariantami dostrojenia.
Rozwiązany problem
PEFT / LoRA rozwiązuje problem wysokiego kosztu pełnego fine-tuningu dużych modeli. Tradycyjne dostrajanie wszystkich parametrów wymaga dużej ilości pamięci GPU, czasu treningu oraz miejsca do przechowywania wielu wariantów modelu. Dodatkowo wdrażanie osobnych, w pełni przetrenowanych kopii dużego modelu dla różnych zadań jest kosztowne operacyjnie. Techniki PEFT ograniczają ten koszt, umożliwiając trenowanie jedynie niewielkiej liczby dodatkowych parametrów, które można łatwo zapisywać, wymieniać i ponownie wykorzystywać.
Kluczowe mechanizmy
Mocne strony i ograniczenia
Komponenty
Macierz A ∈ ℝ^(r×k) mapuje wejście z wymiaru k do przestrzeni o niskiej randze r. Inicjalizowana losowo (Kaiming uniform lub Gaussian). Jest trenowalna.
Macierz B ∈ ℝ^(d×r) mapuje reprezentację z przestrzeni o niskiej randze r z powrotem do oryginalnego wymiaru wyjściowego d. Inicjalizowana zerami, co gwarantuje identyczną wartość wyjściową modelu na początku treningu. Jest trenowalna.
Oryginalna macierz wag wstępnie wytrenowanego modelu o wymiarach d×k. Podczas treningu LoRA parametry W₀ są zamrożone (requires_grad=False) i nie są aktualizowane przez optymalizator. Po treningu: W = W₀ + (α/r)·BA.
Hiperparametr skalujący wkład aktualizacji ΔW = (α/r)·BA do wyjścia warstwy. α (lora_alpha) jest skalowalnym hiperparametrem dobieranym podczas treningu; r (rank) determinuje wymiar przestrzeni adaptacji. Podział α/r sprawia, że optymalny learning rate jest w przybliżeniu niezależny od rangi.
Oficjalna
Implementacja
Zbyt niski rank (r=1–4) dla złożonego zadania uniemożliwia adapterowi naukę wymaganych transformacji. Model uczy się jedynie stylu/formatu, nie treści. Objawia się jako wysokie straty treningowe i słabe wyniki na zadaniu docelowym.
Jeśli macierz B nie jest zainicjalizowana zerami, model na starcie treningu nie jest identyczny z modelem bazowym, co zaburza stabilność i utrudnia konwergencję. Zgodnie z paperem B musi być zainicjalizowane zerami.
Pominięcie operacji W = W₀ + (α/r)·BA przed wdrożeniem skutkuje dodatkowym kosztem obliczeniowym dwóch przebiegów (przez W₀ i przez BA) zamiast jednego, co zwiększa latencję. Ręczne scalenie bez czynnika skalowania (α/r) prowadzi do błędnych wyników.
LoRA adaptery wymagają wyższego learning rate niż pełny fine-tuning (typowo 10–100× wyższy), ponieważ trenuje się znacznie mniej parametrów. Użycie zbyt niskiego LR prowadzi do wolnej konwergencji lub braku adaptacji.
Jeśli czynnik (α/r) nie jest poprawnie zastosowany w forward passie (h = W₀x + (α/r)·BAx), wyniki adaptacji są nieskalowane, co prowadzi do nieprzewidywalnego zachowania modelu, szczególnie przy zmianie r bez dostosowania α.
Ewolucja
Hu et al. opublikowali arXiv:2106.09685. Metoda zamraża wagi bazowe i dodaje pary macierzy niskiej rangi A i B do wybranych warstw Transformera. Zredukowano parametry trenowalnych 10 000× przy równorzędnej jakości z pełnym fine-tuningiem GPT-3 175B.
Papier przyjęty na ICLR 2022. Microsoft opublikował oficjalną implementację referencyjną (github.com/microsoft/LoRA). Społeczność Stable Diffusion adoptuje LoRA do fine-tuningu modeli dyfuzji.
Hugging Face zintegrowało LoRA w bibliotece PEFT (github.com/huggingface/peft), czyniąc je dostępnym dla milionów deweloperów. Dettmers et al. opublikowali QLoRA (arXiv:2305.14314) umożliwiając fine-tuning modeli 65B na pojedynczym GPU 48 GB przez połączenie kwantyzacji 4-bit z adapterami LoRA.
Zhang et al. opublikowali AdaLoRA dynamicznie przydzielającą rank między warstwami na podstawie ważności singular values. Stanowiło to pierwsze systematyczne podejście do optymalizacji budżetu parametrów LoRA.
Liu et al. opublikowali DoRA (arXiv:2402.09353) rozkładając wagi na komponenty kierunkowe i skalarne, stosując LoRA tylko do kierunku. Kalajdzievski zaproponował rsLoRA (rank-stabilized LoRA) ze skalowaniem α/√r dla stabilniejszego treningu przy wyższych rangach.
Hiperparametry (konfigurowalne osie)
Wymiar przestrzeni adaptacji niskiej rangi. Bezpośrednio kontroluje liczbę parametrów trenowalnych (r·(d+k) na warstwę) i zdolność ekspresyjną adaptera. Wyższy r → więcej parametrów, większa zdolność uczenia złożonych transformacji.
Czynnik skalujący w formule (α/r)·BA. Kontroluje efektywną siłę adaptacji. Powszechna heurystyka: alpha = r lub alpha = 2r. Może być zmniejszony po treningu bez konieczności ponownego uczenia.
Które macierze wagowe modelu są adaptowane przez LoRA. W oryginalnym paperze: Wq i Wv w self-attention. W praktyce: często wszystkie liniowe warstwy (Wq, Wk, Wv, Wo, MLP) dla maksymalnej wydajności.
Współczynnik dropout stosowany do wyjść adaptera LoRA podczas treningu, jako regularyzacja. Często ustawiony na 0 lub niskie wartości (0.05–0.1).
Złożoność obliczeniowa
Złożoność przestrzenna: O(r·(d + k)). PEFT / LoRA zmniejsza koszt obliczeniowy dostrajania przez trenowanie tylko niewielkiej części parametrów. LoRA według oryginalnej pracy może redukować liczbę trenowanych parametrów o rzędy wielkości i obniżać wymagania pamięciowe względem pełnego fine-tuningu, zachowując konkurencyjną jakość.
PEFT / LoRA nie jest benchmarkiem, lecz rodziną technik treningowych. Jego ocena opiera się zwykle na porównaniu z pełnym fine-tuningiem pod kątem jakości końcowej, liczby trenowanych parametrów, zużycia pamięci, szybkości treningu oraz łatwości wdrażania adapterów.
Paradygmat wykonania
LoRA jest dense: zarówno oryginalna ścieżka W₀x, jak i ścieżka adaptacji (α/r)·BAx są obliczane dla każdego wejścia. Brak warunkowej aktywacji lub rzadkości. Podczas inferencji (po scaleniu wag) overhead jest zerowy.
Równoległość
Obliczenia BA są w pełni zrównoleglone w ramach warstwy i między warstwami, analogicznie do standardowego mnożenia macierzy w Transformerze. Brak sekwencyjnych zależności między adapterami LoRA w różnych warstwach.
Wymagania sprzętowe
LoRA operuje na mnożeniu macierzy (BA) i addycji do wyjść warstw liniowych — operacje w pełni akcelerowane przez Tensor Cores GPU (NVIDIA A100, H100, RTX 3090+). Redukcja parametrów trenowalnych przekłada się na ~3× mniejsze zużycie pamięci GPU dla stanów optymalizatora.
TPU v4/v5 efektywnie obsługują operacje GEMM użyte w LoRA. Biblioteka Flax/JAX umożliwia implementację LoRA na TPU. Stosowany przez Google przy fine-tuningu modeli Gemini i PaLM z PEFT.