Robocikowo>ROBOCIKOWO
Trening

QLoRA

2023AktywnyOpublikowano: 10 czerwca 2026Aktualizacja: 10 czerwca 2026Opublikowany
QLoRA (Dettmers et al., 2023) to metoda efektywnego pamięciowo fine-tuningu LLM: zamrożony model bazowy kwantyzuje się do 4-bit (NF4), a uczy jedynie niskorangowych adapterów LoRA w bf16. Trzy innowacje — 4-bit NormalFloat, Double Quantization i Paged Optimizers — pozwalają dotrenować 65B model na pojedynczym GPU 48 GB przy jakości równej pełnemu 16-bit fine-tuningowi.
Kluczowa innowacja
Pozwala dotreniowywać LLM o rozmiarze 65B na jednej karcie 48 GB, kwantyzując zamrożony model bazowy do 4-bitowego formatu NF4 i ucząc tylko adapterów LoRA w wyższej precyzji. Łączy 4-bit NormalFloat, podwójną kwantyzację i paged optimizers, redukując pamięć fine-tuningu ~3× bez utraty jakości względem pełnego 16-bit.
Kategoria
Trening
Poziom abstrakcji
Wzorzec
Poziom operacji
Po-treningTreningModel
Zastosowania
Fine-tuning dużych LLM (33B–70B) na pojedynczym GPU (24–48 GB) zamiast klastraGuanaco — rodzina modeli instrukcyjnych z oryginalnej pracy, jakość bliska ChatGPTDomowe / hobbystyczne dotreniowywanie Llama / Mistral / Qwen na consumer GPU (RTX 3090/4090)Tani alignment domenowy w firmach bez infrastruktury wieloGPUStandardowy backbone dla narzędzi: Hugging Face PEFT, Axolotl, Unsloth, Llama-Factory

Jak działa

QLoRA składa się z trzech komponentów technicznych. (1) 4-bit NormalFloat (NF4) — nowy typ danych do kwantyzacji wag. Wagi sieci neuronowych mają rozkład w przybliżeniu normalny (zero-centered), więc NF4 używa kwantyli rozkładu normalnego jako poziomów kwantyzacji — to information-theoretically optimal dla danych o tym rozkładzie, lepsze niż zwykły 4-bit int lub float. (2) Double Quantization (DQ) — kwantyzuje się także stałe kwantyzacji (quantization constants). Każdy blok 64 wag ma własną stałą skalującą w 32-bit; DQ kwantyzuje te stałe do 8-bit, oszczędzając ~0.37 bit/parametr (dla 65B = ~3 GB). (3) Paged Optimizers — używają unified memory NVIDIA do automatycznego przerzucania stanów optymalizatora między GPU a CPU RAM, gdy pojawia się memory spike (np. długa sekwencja), zapobiegając OOM. Forward/backward: zamrożone wagi NF4 są dekwantyzowane do bf16 w locie podczas mnożenia macierzy, gradient płynie tylko przez adaptery LoRA (W + BA, gdzie B∈R^{d×r}, A∈R^{r×k}, r≪d). Baza nigdy nie jest aktualizowana. Wynik: jakość Guanaco (QLoRA na Llama 65B) dorównuje ChatGPT na Vicuna benchmark przy treningu na jednym GPU w 24h.

Rozwiązany problem

Pełen fine-tuning LLM wymaga trzymania wag, gradientów i stanów optymalizatora w 16-bit — dla modelu 65B to >780 GB VRAM, czyli klaster wielu GPU. Sama LoRA redukuje liczbę trenowanych parametrów, ale zamrożony model bazowy nadal musi siedzieć w 16-bit (130 GB dla 65B). QLoRA atakuje ten ostatni koszt: kwantyzuje zamrożoną bazę do 4-bit, dzięki czemu 65B mieści się w ~35 GB, a całość fine-tuningu w 48 GB. Kluczowe było wykazanie, że 4-bit baza + adaptery LoRA NIE pogarszają jakości — wcześniej zakładano, że agresywna kwantyzacja podczas treningu degraduje wyniki.

Komponenty

4-bit NormalFloat (NF4) baseSkompresowana wiedza bazowa modelu

Model bazowy skwantyzowany do 4-bit typu NormalFloat. Poziomy kwantyzacji to kwantyle rozkładu normalnego — optymalne dla wag zero-centered. Dekwantyzowany do bf16 w locie podczas matmul, nigdy nie aktualizowany.

INOryginalne wagi modelu bazowego.
OUTWagi 4-bit + stałe skalujące per blok.
NF4Domyślny — optymalny dla rozkładu normalnego.
FP4Alternatywa, empirycznie gorsza.

Oficjalna

LoRA adapters (B, A)Trenowalna delta wag

Trenowane macierze B∈R^{d×r}, A∈R^{r×k} (r≪d) w bf16. Jedyna część aktualizowana gradientem. Dla najlepszej jakości podpięte do WSZYSTKICH warstw liniowych.

Double Quantization (DQ)Dodatkowa redukcja pamięci

Stałe skalujące bloków NF4 (normalnie 32-bit) są same kwantyzowane do 8-bit. Oszczędza ~0.37 bit/parametr (~3 GB dla 65B) bez utraty jakości.

Oficjalna

Paged OptimizersOchrona przed OOM przy długich sekwencjach

Stany optymalizatora (np. AdamW 8-bit) są paginowane między GPU a CPU RAM przez NVIDIA unified memory przy memory spikes, zapobiegając OOM.

Oficjalna

Implementacja

Pułapki implementacyjne
LoRA tylko na attention zamiast wszystkich warstw liniowychWysoka

Naiwne LoRA podpina adaptery tylko do q/v. QLoRA pokazuje, że dla osiągnięcia jakości full fine-tuningu adaptery MUSZĄ być na wszystkich warstwach liniowych (włącznie z MLP gate/up/down). Pominięcie tego zostawia jakość na stole.

Rozwiązanie:Ustawić target_modules na wszystkie warstwy liniowe (`all-linear` w PEFT).
Użycie zwykłego int4/fp4 zamiast NF4Średnia

NF4 jest dopasowany do rozkładu normalnego wag i empirycznie bije int4/fp4. Użycie gorszego typu kwantyzacji obniża jakość bez powodu.

Rozwiązanie:Używać `bnb_4bit_quant_type="nf4"` w konfiguracji bitsandbytes.
Merge adapterów do 4-bit bazy → utrata jakościŚrednia

Adaptery LoRA są w bf16, baza w 4-bit. Naiwny merge (W + BA) do 4-bit bazy gubi precyzję adapterów. Należy merge'ować do 16-bit dekwantyzowanej bazy lub trzymać adaptery osobno.

Rozwiązanie:Dekwantyzować bazę do fp16 przed merge, lub trzymać adaptery jako osobny artefakt (zalecane do deployment).
Brak paged optimizer przy długich sekwencjach → OOMNiska

Memory spikes na długich sekwencjach (gradient checkpointing przeładowuje) powodują OOM mimo że średnie zużycie mieści się w VRAM. Paged optimizer rozwiązuje to przez unified memory.

Rozwiązanie:Włączyć `optim="paged_adamw_8bit"` i gradient checkpointing.

Ewolucja

Oryginalny paper · 2023 · NeurIPS 2023 (University of Washington) · Tim Dettmers
QLoRA: Efficient Finetuning of Quantized LLMs
Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, Luke Zettlemoyer
2021
LoRA (Hu et al., Microsoft)

Low-Rank Adaptation — trenowanie tylko niskorangowych adapterów zamiast pełnych wag. Fundament QLoRA.

2022
LLM.int8() (Dettmers et al.)

Ten sam autor wprowadza 8-bit kwantyzację inferencji LLM bez utraty jakości (biblioteka bitsandbytes). Bezpośredni prekursor 4-bit kwantyzacji QLoRA.

2023
QLoRA — paper UW
Punkt przełomowy

Dettmers, Pagnoni, Holtzman, Zettlemoyer publikują QLoRA (arXiv:2305.14314, NeurIPS 2023). NF4 + Double Quantization + Paged Optimizers pozwalają dotrenować 65B na jednym GPU 48 GB. Model Guanaco dorównuje ChatGPT na Vicuna benchmark.

2023
Integracja w Hugging Face PEFT / bitsandbytes

QLoRA trafia do PEFT i Transformers w ciągu tygodni — `load_in_4bit=True` + LoRA staje się jednolinijkową receptą. Masowa adopcja społeczności open-source.

2024
Unsloth, Axolotl, Llama-Factory — narzędzia produkcyjne

Powstają zoptymalizowane frameworki (Unsloth z custom Triton kernelami daje 2× szybszy QLoRA), które czynią 4-bit fine-tuning standardem na consumer hardware.

2024
Warianty: DoRA, QA-LoRA, LoftQ

Następcy poprawiają QLoRA: DoRA (rozdziela magnitude/direction), LoftQ (lepsza inicjalizacja adapterów dla kwantyzowanej bazy), QA-LoRA (kwantyzacyjnie-świadome adaptery dla deployment 4-bit po fine-tuningu).

Hiperparametry (konfigurowalne osie)

LoRA rank (r)Wysoka

Ranga macierzy adapterów B i A. Determinuje liczbę trenowanych parametrów (2·r·d per warstwa). QLoRA pokazuje, że nawet małe r=8–64 wystarcza — większe r nie poprawia jakości, bo limit leży w danych nie w pojemności adaptera.

16Częsty default
64Oryginalna praca Guanaco
Quantization typeKrytyczna

Typ kwantyzacji bazy. NF4 (4-bit NormalFloat) to flagowy wkład — optymalny dla wag o rozkładzie normalnym. FP4 jest alternatywą, gorszą empirycznie. Praca dowodzi przewagi NF4 nad FP4 i int4.

nf4Domyślny i najlepszy
fp4Alternatywa, lekko gorsza
Double Quantization (DQ)Średnia

Czy kwantyzować stałe kwantyzacji. Oszczędza ~0.37 bit/parametr (~3 GB dla 65B) przy zerowej utracie jakości. Niemal zawsze włączone.

trueDomyślne — oszczędność pamięci za darmo
Quantization block sizeŚrednia

Liczba wag dzielących jedną stałą skalującą. Mniejszy blok = dokładniejsza kwantyzacja ale więcej stałych. Praca używa 64 dla NF4 i 256 dla DQ.

64NF4 blok
256DQ blok
Paged optimizerŚrednia

Czy używać unified memory do paginowania stanów optymalizatora przy memory spikes. Zapobiega OOM przy długich sekwencjach. Bez kosztu jakości, niewielki narzut czasu przy spike.

paged_adamw_8bitDomyślne w pracy
LoRA target modulesWysoka

Które warstwy dostają adaptery. Praca pokazuje, że dla najlepszej jakości należy podpiąć LoRA do WSZYSTKICH warstw liniowych (q,k,v,o,gate,up,down), nie tylko attention — to istotne odkrycie odróżniające QLoRA od naiwnego LoRA.

all-linearRekomendowane przez pracę
q_proj,v_projNaiwne LoRA — gorsze

Złożoność obliczeniowa

Złożoność czasowa: O(T · |θ|) + narzut dekwantyzacji NF4→bf16 (~5–30% nad bf16 LoRA). Złożoność przestrzenna: O(0.5 · |θ|) baza (4-bit) + O(2 · r · d · L) adaptery + O(optimizer 8-bit).

Wąskie gardło obliczeniowe

Dekwantyzacja NF4 w locie

Każdy matmul wymaga dekwantyzacji bloku wag z NF4 do bf16. To główny narzut czasowy QLoRA względem czystego LoRA. Custom kernele (Unsloth Triton) redukują go z ~30% do ~5–10%.

Zależy od
kernel qualityblock size

Paradygmat wykonania

Tryb główny
Gęsty

QLoRA modyfikuje reprezentację wag i ścieżkę treningu, nie strukturę modelu — sieć pozostaje gęsta. Można łączyć z MoE (kwantyzacja ekspertów) ale to ortogonalne.

Wzorzec aktywacji
Wszystkie ścieżki aktywne

Równoległość

Poziom równoległości
W pełni równoległy

QLoRA to standardowy supervised training z dodatkową dekwantyzacją w locie. Skaluje się przez DDP/FSDP; dekwantyzacja NF4→bf16 jest tania i równoległa. Główny zysk to redukcja pamięci, nie zmiana profilu równoległości.

Zakres
TreningPomiędzy urządzeniamiPomiędzy tokenamiPomiędzy warstwami

Wymagania sprzętowe

Podstawowe

QLoRA został zaprojektowany pod NVIDIA GPU z bitsandbytes (custom CUDA kernels dla NF4 dekwantyzacji) i unified memory (paged optimizers). Działa od consumer RTX 3090/4090 po data-center A100/H100.

Ograniczony

Idea jest przenośna, ale efektywne 4-bit kernele NF4 są CUDA-first. Wsparcie ROCm/Metal istnieje, ale mniej dojrzałe.