08 · LLM · 5 min czytania · aktualizacja
Jak zmniejszyć LLM? Czym są kwantyzacja i destylacja wiedzy?
W skrócie
Kwantyzacja zapisuje wagi mniejszą liczbą bitów, a destylacja uczy mały model naśladować duży. Obie zmniejszają koszt przy niewielkiej utracie jakości.
Co to jest
Kwantyzacja to zapis wag (a czasem także aktywacji) sieci neuronowej w niższej precyzji — zamiast 16- lub 32-bitowych liczb zmiennoprzecinkowych używa się 8-, 4-, a nawet mniej bitowych liczb całkowitych ze współczynnikami skali. Destylacja wiedzy (Hinton i in., 2015) to trening mniejszego modelu-ucznia tak, by odtwarzał rozkłady prawdopodobieństwa zwracane przez większy model-nauczyciela.
Obie techniki odpowiadają na ten sam problem: duże modele są drogie w uruchamianiu. Pamięć karty graficznej, przepustowość pamięci i prąd to realne ograniczenia, zwłaszcza na laptopie czy telefonie. Kwantyzacja zmniejsza istniejący model bez trenowania od nowa; destylacja tworzy nowy, mniejszy model, który przejmuje część umiejętności dużego.
Można je łączyć: najpierw zdestylować model do mniejszej architektury, potem go skwantyzować.
Mechanizm — dlaczego tak działa
Kwantyzacja: dlaczego wagi znoszą zaokrąglanie. Wagi w obrębie jednej macierzy mają zwykle wąski, w przybliżeniu dzwonowaty rozkład. Wystarczy wybrać skalę s (np. największą wartość bezwzględną podzieloną przez 127 dla int8) i zapisać każdą wagę jako zaokrągloną liczbę całkowitą q = round(w / s). Przy odczycie w ≈ q · s. Błąd zaokrąglenia działa jak mały szum dodany do wag, a sieci trenowane spadkiem gradientowym są dość odporne na taki szum — leżą w szerokich „dolinach” funkcji straty.
Dlaczego to przyspiesza. Generowanie tekstu w dużym modelu jest ograniczone głównie przepustowością pamięci: na każdy token trzeba wczytać wszystkie wagi. Czterokrotnie mniejsze wagi to w przybliżeniu czterokrotnie mniej danych do przesłania, więc szybsze generowanie, nawet jeśli obliczenia wykonuje się po rozpakowaniu do 16 bitów.
Kłopot z wartościami odstającymi. Dettmers i in. (2022) zauważyli, że w modelach od kilku miliardów parametrów pojawiają się nieliczne wymiary aktywacji o bardzo dużych wartościach. Jedna skala na całą macierz sprawia wtedy, że reszta wartości ląduje w kilku przedziałach i traci precyzję. Rozwiązania: skale dla małych grup wag (np. po 128), osobne traktowanie wartości odstających (LLM.int8()) albo kwantyzacja z kompensacją błędu na podstawie danych kalibracyjnych (GPTQ, Frantar i in., 2023). Poniżej 4 bitów jakość zwykle spada już wyraźnie.
Destylacja: ciemna wiedza. Etykieta „kot” mówi tylko, co jest poprawne. Rozkład nauczyciela mówi więcej: że „pies” był drugą opcją, a „samochód” w ogóle nie wchodził w grę. Hinton i in. nazwali to ciemną wiedzą (dark knowledge). Żeby ją wydobyć, dzieli się logity przez temperaturę T > 1, co spłaszcza rozkład i odsłania relacje między mniej prawdopodobnymi klasami. Uczeń minimalizuje dywergencję KL między swoim a nauczycielskim rozkładem przy tej samej temperaturze, zwykle w połączeniu ze zwykłą stratą na prawdziwych etykietach; składnik destylacyjny mnoży się przez T², by zachować skalę gradientów.
W LLM destylacja ma też drugą postać: duży model generuje odpowiedzi (np. rozwiązania krok po kroku), a mały jest na nich dostrajany. To prostsze, bo nie wymaga dostępu do logitów nauczyciela, ale przekazuje mniej informacji niż pełne rozkłady. Ograniczenie wspólne obu form: uczeń nie przewyższy nauczyciela w tym, czego się od niego uczy, i przy dużej różnicy rozmiarów traci najwięcej na rzadkiej wiedzy i trudnym rozumowaniu.
Na przykładzie
Model 7 mld parametrów zajmuje: w fp32 — 28 GB, w fp16 — 14 GB, w int8 — 7 GB, w int4 — 3,5 GB. Skale fp16 dla grup po 128 wag dokładają 16/128 = 0,125 bitu na wagę, więc realnie 4,125 bitu i około 3,6 GB. To różnica między modelem wymagającym serwerowej karty a modelem, który mieści się w pamięci laptopa. Zaokrąglanie na małym wektorze wag (0,42; −1,27; 0,05; 0,88; −0,31; 2,10; −0,66; 0,13): w int8 skala to 2,10 / 127 ≈ 0,0165, liczby całkowite to 25, −77, 3, 53, −19, 127, −40, 8, a największy błąd po odtworzeniu wynosi 0,0066. W int4 (zakres −7…7) skala to 0,3, a największy błąd rośnie do 0,13 — waga 0,13 zamienia się w zero. Stąd potrzeba małych grup i sprytniejszego zaokrąglania.
Destylacja: nauczyciel dał logity (5; 2; 1; −1) dla czterech klas. Przy T = 1 rozkład to 0,934; 0,047; 0,017; 0,002 — prawie etykieta „jeden-z-wielu”. Przy T = 4 to 0,485; 0,229; 0,178; 0,108 i widać, że klasa druga jest wyraźnie bliższa poprawnej niż czwarta. Uczeń dostaje tę strukturę podobieństw za darmo. W praktyce DistilBERT jest o 40% mniejszy i o 60% szybszy od BERT, zachowując 97% jego wyników w zadaniach rozumienia języka (Sanh i in., 2019).
W praktyce
- Ładowanie modelu w 8 lub 4 bitach:
BitsAndBytesConfig(load_in_8bit=True)lubload_in_4bit=Truewtransformers; formaty GPTQ i AWQ do szybkiej inferencji na GPU, GGUF do uruchamiania na CPU. - 8 bitów to zwykle praktycznie bezstratnie, 4 bity — niewielka strata, która rośnie przy małych modelach; mierz ją na własnym zadaniu, nie tylko perpleksją.
- Lepszy bywa większy model w 4 bitach niż mniejszy w 16 przy tej samej pamięci.
- Destylacja w PyTorch:
F.kl_div(F.log_softmax(s/T, -1), F.softmax(t/T, -1), reduction="batchmean") TTplus zwykła entropia krzyżowa; typowe T = 2–5. - Typowy błąd: ocena skwantyzowanego modelu tylko na krótkich, łatwych przykładach — degradacja wychodzi najpierw na długich kontekstach, kodzie i rzadkich językach.
Najczęstsze pytania
- Ile jakości traci model po kwantyzacji do 4 bitów?
- Przy dobrych metodach (GPTQ, AWQ, grupowe skale) duże modele tracą zwykle niewiele w typowych zadaniach. Małe modele i zadania wymagające precyzji, jak matematyka czy kod, tracą więcej — trzeba to zmierzyć.
- Czym różni się kwantyzacja po treningu od treningu z kwantyzacją?
- Kwantyzacja po treningu (PTQ) zaokrągla gotowe wagi, czasem z małym zbiorem kalibracyjnym. Trening świadomy kwantyzacji (QAT) symuluje zaokrąglanie podczas treningu, więc model uczy się być na nie odporny — jest dokładniejszy, ale wymaga trenowania.
- Czy destylacja to to samo co dostrajanie na danych z dużego modelu?
- To jej uproszczona forma. Klasyczna destylacja uczy na pełnych rozkładach prawdopodobieństwa nauczyciela, co przekazuje więcej informacji niż pojedyncza wygenerowana odpowiedź.
Źródła
- Hinton G., Vinyals O., Dean J., 2015, „Distilling the Knowledge in a Neural Network”, arXiv:1503.02531.
- Dettmers T. i in., 2022, „LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale”, NeurIPS 2022.
- Frantar E. i in., 2023, „GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers”, ICLR 2023.
- Sanh V. i in., 2019, „DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter”, arXiv:1910.01108.
- Jacob B. i in., 2018, „Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference”, CVPR 2018.