LLM¶
Wprowadzenie¶
LLM (Large Language Model) to rodzaj modeli językowych opartych o sieć neuronową. “Large” odnosi się do ogromnej ilości parametrów zawartych w takiej sieci, która z reguły wynosi od 1 miliarda do ponad 1 biliona parametrów. Modele te znalazły szerokie zastosowanie w przetwarzaniu języka naturalnego (NLP, natural language processing). Leżą u podstaw aplikacji konwersacyjnych (popularne chatboty), generujących i uzupełniających tekst, tłumaczących, klasyfikujących treści oraz wielu innych.
Duże modele językowe (LLM) mają wiele zastosowań:
- aplikacje konwersacyjne – zdecydowanie najbardziej znany przykład użycia dużych modeli językowych. Popularny ChatGPT to właśnie takie rozwiązanie, potrafi “rozmawiać” z człowiekiem, interpretować jego zapytania i udzielać odpowiedzi na wiele tematów. Pod spodem wykorzystuje różne wersje sieci LLM o nazwie GPT (np. GPT-3.5 czy GPT-4).
- tłumaczenie – modele LLM idealnie nadają się do automatycznego tłumaczenia podanego tekstu na wybrany język, do obsługi których model był wytrenowany. Przykład takiej usługi znajdziemy w serwisie Quillbot Translate.
- parafrazowanie – model generuje tekst o znaczeniu odpowiadającym tekstowi wejściowemu, ale z wykorzystaniem innych słów. Narzędzie takie możemy zobaczyć w kolejnym serwisie Quillbot - Quillbot Paraphrase.
- klasyfikacja – model LLM może przypisywać podany tekst do odpowiednich kategorii. Narzędzia takie są często wykorzystywane wewnątrz organizacji, np. do automatycznego oznaczania tekstu w celu późniejszego wykorzystania.
- analiza sentymentu – zadanie podobne do wcześniej wymienionej klasyfikacji, polega na ustaleniu nacechowania emocjonalnego danego tekstu. Przykład narzędzia znajdziemy w serwisie Monkeylearn.
- tworzenie streszczeń i podsumowań – model tworzy skróconą wersję otrzymanego tekstu, zachowując główne informacje w nim zawarte. Kolejny raz usługę taką możemy przetestować na stronie Quillbot, tym razem pod nazwą Quillbot Summarizer.
- generowanie sugestii – model na podstawie danych wejściowych stara się zasugerować kolejne słowa lub działania. Dobrym przykładem jest narzędzie asystujące w programowaniu, GitHub Copilot, które na podstawie istniejących fragmentów programu stara się zasugerować ich dalsze rozwinięcie.
Szczegóły¶
Modele językowe są statystycznymi modelami języka naturalnego. Wykorzystywane przez nie rozwiązania zmieniały się na przestrzeni lat:
- n-gramy słów - były wykorzystywane przez pierwsze modele językowe;
- sieci rekurencyjne - wraz ze wzrostem popularności sieci neuronowych, sieci rekurencyjne wyparły protoplastów, osiągając znacznie lepsze wyniki;
- transformery - umożliwiły radzenie sobie ze znacznie większymi zbiorami danych oraz pozwoliły na skalowanie ilości parametrów sieci.
Z zastosowania tych ostatnich narodziły się LLM-y - najskuteczniejsze obecnie narzędzia do modelowania języka, które potrafią interpretować i generować tekst w sposób zbliżony do człowieka.
LLM-y można podzielić na uniwersalne oraz specjalistyczne:
- modele uniwersalne (general-purpose) - są w stanie wykonywać wiele zadań związanych z przetwarzaniem języka naturalnego. Możliwości te nabywają poprzez ekspozycję na znaczną ilość danych treningowych.
- modele specjalistyczne (fine-tuned) - modele dopasowane do konkretnego rodzaju zadań. Z reguły dopasowanie odbywa się przez dotrenowanie istniejącego modelu uniwersalnego na zbiorze danych odpowiednim do zwiększenia jego skuteczności w wymaganej dziedzinie.
Transformer¶
Podstawową architekturą większości sieci neuronowych LLM jest tzw. transformer. Architektura ta została opublikowana w 2017 roku przez zespół Google Brain, w klasycznym już artykule “Attention is all you need”. Zastosowanie mechanizmu uwagi (attention) w transformerze było przełomem w modelowaniu języka naturalnego. Mechanizm ten pozwala sieci nauczyć się, które słowa w analizowanym fragmencie tekstu mają największe znaczenie w kontekście wykonywanego zadania, np. przewidywania następnego słowa. Ważność słów jest modelowana poprzez przypisywanie wag.
Poniżej opisano zasadę działania transformera na przykładzie uczenia sieci przewidywania następnego słowa w zdaniu.
- Słowa w analizowanym tekście są konwertowane na reprezentacje liczbowe tzw. tokeny.
- Token zostaje dodatkowo wzbogacony kolejną reprezentacją liczbową, tym razem opisującą położenie danego słowa w zdaniu. Proces ten nosi nazwę kodowania pozycyjnego (positional encoding).
- Pierwszy element transformera, enkoder, analizuje tokeny, wykorzystując mechanizm uwagi do określenia istotności wzajemnych relacji w tekście pomiędzy analizowanymi słowami.
- Wyjściowe reprezentacje enkodera trafiają do dekodera, który - również przy użyciu mechanizmu uwagi - próbuje przewidzieć najbardziej prawdopodobne następne słowo.
- Model zwraca najbardziej prawdopodobny token, który jest porównywany z właściwym kolejnym słowem. W tym momencie obliczana jest funkcja kosztu i następuje aktualizacja parametrów modelu.
To eleganckie rozwiązanie pozwala na analizę dowolnie długich (w praktyce ograniczonych zasobami obliczeniowymi) sekwencji wejściowych. Umożliwia to modelowanie wzajemnych relacji odległych słów, a tym samym zachowanie kontekstu w przypadku długich tekstów.
W wyjaśnieniu działania transformera przydatne jest narzędzie LLM Visualization stworzone przez Brendana Bycrofta, wizualizujące i tłumaczące krok po kroku aspekty działania sieci LLM.
LLM w praktyce¶
Kiedy chcemy skorzystać z LLM-ów, mamy do wyboru jedno z trzech podejść:
- wytrenowanie modelu od zera,
- dotrenowanie istniejącego modelu,
- wykorzystanie gotowego modelu.
Wytrenowanie modelu od zera — najbardziej wymagające podejście, w którym model jest trenowany od podstaw, wykorzystując istniejącą już architekturę lub projektując własną. Podejście to wymaga umiejętnego prowadzenia treningu oraz bardzo dużych zasobów obliczeniowych. Największe współczesne LLM-y trenowane są tygodniami nawet na tysiącach kart GPU. Dodatkowo, często konieczne będzie stworzenie własnego zbioru danych, co jeszcze bardziej zwiększa nakład pracy (patrz dane treningowe).
Rozwiązanie to daje pełną kontrolę nad procesem treningowym i użytymi danymi. W efekcie uzyskana sieć może być lepiej dopasowana do realizacji konkretnego zadania.
Dotrenowanie (fine-tuning) — polega na wykorzystaniu jako punktu startowego uprzednio wytrenowanego modelu. Taki model zwykle posiada już umiejętności do ogólnego modelowania języka naturalnego. Następnie wykonywane są iteracje treningowe, z reguły na nowym zestawie danych. Podejście to pozwala ominąć znaczące koszty związane z początkowym wytrenowaniem sieci, tj. czas i prąd. Jednocześnie umożliwia wzbogacenie modelu o nowe informacje oraz modyfikację stylu odpowiedzi modelu.
To rozwiązanie jest często stosowane, gdy zależy nam na ograniczaniu kosztów lub gdy nie posiadamy dostępu do infrastruktury obliczeniowej o odpowiedniej skali, ale chcemy zwiększyć skuteczność modelu w danej domenie.
Wykorzystanie gotowego modelu — najprostsze podejście, które polega na bezpośrednim wykorzystaniu wytrenowanego modelu bez dodatkowych modyfikacji. Wymaga najmniej zasobów obliczeniowych i bardzo często jest wystarczające do wykonania danego zadania. Nie mamy jednak żadnej możliwości zmiany właściwości modelu, a ewentualną poprawę jego jakości możemy uzyskać tylko poprzez odpowiednie dobieranie danych wejściowych. Jest to jednak możliwe głównie w modelach konwersacyjnych, patrz prompt engineering️.
Podsumowując, im większy chcemy mieć wpływ na zachowanie sieci, tym bardziej musimy skupić się na jej dotrenowaniu lub wytrenowaniu od podstaw. Należy jednak pamiętać o kosztach czasowych i obliczeniowych w każdym z wymienionych podejść:
- do wytrenowania sieci od podstaw potrzeba dostępu do dużych klastrów obliczeniowych z wieloma węzłami wyposażonymi w akceleratory GPU;
- proces dotrenowania jest możliwy do wykonania na mniejszych zasobach, zwykle potrzeba przynajmniej serwera z kilkoma kartami GPU;
- samo korzystanie z sieci (czyli inferencja) jest dużo szybsze niż trening i może być wykonywane nawet na jednej karcie GPU - pod warunkiem, że model zmieści się w jej pamięci.
Rozważając wykorzystanie LLM w swojej aplikacji, najrozsądniejsze wydaje się rozpoczęcie od skorzystania z gotowego modelu. Warto sprawdzić zachowanie kilku z nich, gdyż każdy ma swoje cechy szczególne. Gotowych modeli możemy poszukiwać w otwartych repozytoriach, takich jak np. Hugging Face (patrz biblioteki oraz narzędzia). W sytuacji gdy osiągi sieci nie są satysfakcjonujące lub chcemy wzbogacić model o wiedzę zawartą w niedostępnych publicznie zasobach, warto wykonać proces dotrenowania. Wytrenowanie od podstaw nowego LLM-a powinno być rozważane dopiero na samym końcu.
Poniżej opisane są szczegóły dotyczące procesu treningu sieci.
Trening wstępny (pre-training)¶
W pierwszym kroku LLM uczony jest generalnego modelowania języka. Z reguły zadanie to polega na przewidywaniu przez model słów w zaprezentowanym tekście wejściowym. Do wytrenowania LLM potrzeba ogromnej ilości tekstu, aby osiągnąć satysfakcjonujące rezultaty. Stąd większość danych jest masowo ściągana z Internetu. Ich manualne oznaczanie i klasyfikacja są niezwykle czasochłonne. Na szczęście, w przypadku predykcji słów wystarczy maskować fragmenty tekstu, które mają zostać odgadnięte, co jest proste i szybkie w implementacji. Jednocześnie metoda ta pozwala z pojedynczego zdania wytworzyć wiele danych wejściowych do trenowania sieci, co zwiększa jakość treningu.
Dotrenowanie sieci¶
Pomimo tego, że wstępnie wytrenowane LLM-y posiadają już bardzo znaczące możliwości, często brak im specyficznej wiedzy niezbędnej do wykorzystania w danym zadaniu. Stąd w kolejnych krokach można stopniowo dotrenowywać model, aby zwiększyć jego efektywność w wykonywanym zadaniu.
W tym celu bardzo często stosuje się uczenie nadzorowane (supervised learning). Metody z tej grupy polegają na dostarczeniu oznaczonych danych, gdzie każda wejściowa informacja dla modelu skojarzona jest z oczekiwaną odpowiedzią, np. pary dialogowe, zapytanie + oczekiwana odpowiedź.
Innym wartym wymienienia zbiorem technik jest RLHF, czyli uczenie ze wzmocnieniem z wykorzystaniem wskazówek udzielanych przez człowieka (Reinforcement Learning from Human Feedback). Techniki te wprowadzają do treningu interakcję z człowiekiem, który dodatkowo ocenia odpowiedzi modelu, umożliwiając w ten sposób precyzyjniejsze korygowanie odpowiedzi i dopasowanie ich do oczekiwań użytkownika.
Obie te grupy technik są wykorzystywane zależnie od tworzonego rozwiązania. Mogą być użyte w dowolnej kolejności, choć z reguły RLHF jest ostatnim krokiem w procesie treningu. Należy pamiętać, że dotrenowywanie może odbywać się wielokrotnie - w kilku iteracjach, dzięki czemu mamy dużą elastyczność, a sam proces dotrenowania można rozłożyć w czasie, stopniowo ulepszając model.
Dane treningowe¶
Kluczowym aspektem dla tworzenia wysokiej jakości LLM-ów jest odpowiednio przygotowany zbiór danych. Tu po raz kolejny mamy możliwość stworzenia własnego zbioru lub skorzystania z istniejącego.
Pierwsze podejście jest dużo bardziej wymagające pod względem nakładów pracy, dając w zamian znacząco większą kontrolę nad jakością sieci uzyskanej w wyniku treningu. Konkretne kroki jakie należy podjąć, aby stworzyć taki zbiór zależą od kilku czynników - przede wszystkim od docelowego zastosowania modelu i wykorzystywanych technik treningowych. Możemy jednak wyróżnić etapy, które z reguły występują w tym procesie:
- Zbieranie danych. Pierwszym krokiem jest zebranie dużej ilości różnorodnych danych tekstowych w języku, na którym ma być szkolony model. Może to obejmować artykuły, książki, blogi, fora internetowe, dane z mediów społecznościowych itp. Dobór danych ma zasadnicze znaczenie dla jakości i własności finalnie uzyskanej sieci. Na przykładzie modeli konwersacyjnych, wymienić możemy cechy takie jak:
- poprawność – czy model udziela poprawnych odpowiedzi w sensie semantycznym, gramatycznym i logicznym oraz czy odpowiedzi te są zgodne z prawdziwymi faktami,
- styl odpowiedzi – w jakim stylu tekst jest pisany i strukturyzowany.
- Czyszczenie danych. Następnie dane są poddawane procesowi czyszczenia, aby usunąć wszelkie niepotrzebne znaczniki HTML, znaki specjalne, linki, adresy email, itp. Ten krok pomaga w zachowaniu czystości i spójności danych.
- Tworzenie zbioru treningowego, walidacyjnego i testowego. Zbiór danych jest następnie dzielony na trzy części: zbiór treningowy służący do treningu modelu, zbiór walidacyjny używany do dostrojenia hiperparametrów i oceny jakości modelu podczas treningu oraz zbiór testowy, który jest wykorzystywany do ostatecznej oceny wydajności modelu.
- Tokenizacja. Słowa są konwertowane na reprezentacje liczbowe w sposób odpowiedni dla danego modelu - proces ten został opisany wcześniej w sekcji Transformer.
- Augmentacja danych. Możliwe jest stosowanie technik augmentacji danych, takich jak zamiana słów na ich synonimy czy tzw. dodawanie szumu, czyli zaburzanie jakości tekstu. Przykładem szumu może być np. losowe podmienianie liter w zdaniu. Augmentacja to opcjonalny krok, który pozwala zwiększyć różnorodność i ilość danych treningowych.
- Zapisanie zbioru danych. Ostatecznie, przygotowany zbiór danych jest zapisywany w odpowiednim formacie, który może być łatwo odczytywany podczas treningu. Najczęściej stosowanymi formatami są pliki tekstowe lub binarne.
Dostępne są również gotowe zbiory danych, na których zostały już wykonane niektóre lub wszystkie powyższe kroki. Wiele z nich, dopasowanych do wybranego zadania, możemy znaleźć w repozytorium zbiorów danych Hugging Face (w kontekście LLM patrz na sekcję “Natural Language Processing”).
Niektóre z gotowych zbiorów danych wykorzystywane są jako benchmarki. Taki zbiór z reguły nie jest używany do trenowania sieci, a do jej ewaluacji w konkretnym zadaniu. Niektóre z nich są standardowymi metodami oceny modeli językowych, jak na przykład GLUE czy zaprojektowany przez grupę EleutherAI Language Model Evaluation Harness. Można powiedzieć, że jest to swego rodzaju odpowiednik popularnego w przetwarzaniu obrazów ImageNetu. Istnieją także zestawienia rankingów umożliwiające łatwy przegląd wyników modeli w różnych benchmarkach. Przykład stanowią rankingi modeli w serwisie Hugging Face.
Popularne techniki¶
Obecnie istnieje wiele bibliotek oraz narzędzi umożliwiających korzystanie z modeli językowych. Implementują one różne techniki optymalizacji, które pozwalają na efektywne wykorzystanie zasobów obliczeniowych zarówno podczas procesu treningu jak i późniejszego korzystania z sieci (inferencji). Jedne z najbardziej popularnych to:
- Low Rank Adaptation (LoRA),
- Kwantyzacja,
- Flash Attention.
Z kolei do interakcji z gotową siecią, celem uzyskania bardziej dopasowanych odpowiedzi można wykorzystać takie techniki jak:
- retrieval-augmented generation (RAG),
- prompt engineering.
Te dwie ostatnie są o tyle użyteczne, że pozwalają wpływać na wyniki uzyskiwane przez sieć bez żadnej ingerencji w jej architekturę, wagi czy kod źródłowy oraz bez konieczności jej dotrenowania.
Low Rank Adaptation (LoRA)¶
Metoda efektywnego dotrenowywania modelu, która ogranicza liczbę modyfikowanych parametrów. LoRA wykorzystuje fakt “przeparametryzowania” (overparametrization) dużych modeli językowych. Zjawisko to polega na tym, że reprezentacje informacji pozyskane przez model w trakcie treningu są w dużym stopniu nadmiarowe. Skuteczne działanie modelu byłoby możliwe nawet w przypadku redukcji ich liczby. Podobnie jest z informacjami pozyskiwanymi w trakcie dotrenowywania.
Korzystając z LoRA, podstawowe wagi modelu są zamrażane, a modyfikacja dotyczy jedynie macierzy niższego rzędu dodanych do poszczególnych warstw ze znacznie mniejszą liczbą parametrów. Takie rozwiązanie znacząco zmniejsza liczbę trenowanych parametrów, przyspieszając trening i redukując jego wymagania sprzętowe.
Kwantyzacja¶
Technika opierająca się o zmniejszanie precyzji liczb zmiennoprzecinkowych używanych podczas obliczeń. Domyślnie obliczenia wykonywane są w oparciu o liczby zmiennoprzecinkowe (float) 32-bitów. Możliwe jest jednak zmniejszenie liczby bitów np. do 16-bitowych czy przejście na liczby całkowitoliczbowe (integer) 8-bitowe. Redukcja precyzji obliczeń pozwala na wykonywanie większej liczby operacji w tym samym momencie lub zmniejszenie zapotrzebowania na pamięć, co przekłada się na krótszy czas obliczeń lub zmniejszenie wymagań sprzętowych.
Kwantyzacja może odbyć się w trakcie treningu lub inferencji, chociaż z reguły wykorzystywana jest w tym drugim przypadku. Stosując tę technikę należy pamiętać, że każda kwantyzacja w pewnym stopniu ogranicza zdolność parametrów modelu do reprezentowania informacji. W związku z tym, jeżeli precyzja zostanie obniżona zbyt mocno, może skutkować to drastycznym pogorszeniem się uzyskiwanych wyników. Wszystko jednak zależy od konkretnej sieci i zadania do jakiego jest wykorzystywana.
Kwantyzacja może być przeprowadzona na różne sposoby. Jedną z popularnych metod jest algorytm GPTQ.
Flash Attention¶
Algorytm modyfikujący sposób prowadzenia obliczeń w warstwie atencji odpowiedzialnej za mechanizm uwagi. Optymalizuje sposób dostępu do pamięci GPU, co umożliwia lepsze wykorzystanie mocy obliczeniowych karty. W porównaniu do zwykłej implementacji, Flash Attention wykazuje nawet 20-krotny spadek zużywanej pamięci oraz 3-krotny wzrost szybkości obliczeń podczas treningu modeli (patrz artykuł o FlashAttention).
Retrieval Augmented Generation (RAG)¶
Specyficzny sposób wykorzystania modeli językowych, głównie w aplikacjach czatowych, polegający na umożliwieniu modelowi sięgnięcia po zewnętrzną wiedzę istotną w kontekście otrzymanych danych wejściowych. Wiedza ta jest zgromadzona w bazie w formie wektorów reprezentujących fragmenty tekstu lub grafu wiedzy. Po otrzymaniu zapytania informacje istotne w jego kontekście są odszukiwane w bazie i integrowane z pytaniem. Model otrzymuje więc informacje związane z danym zadaniem, co umożliwia wygenerowanie pożądanej odpowiedzi nawet w sytuacji, kiedy wiedza nie była zawarta w modelu podczas jego treningu.
Aplikacje oparte o RAG znajdują zastosowanie np. w rozwiązaniach dla przedsiębiorstw, gdzie w stosunkowo łatwy i niedrogi sposób model uzyskuje dostęp do wewnętrznej bazy wiedzy i korzysta z niej podczas interakcji z użytkownikami.
Prompt engineering¶
Odpowiedzi generowane przez konwersacyjne LLM-y są w dużej mierze zależne od zapytania, jakie użytkownik do nich kieruje. To zjawisko można wykorzystać do wydobycia lepszych odpowiedzi z modelu. Prompt engineering to właśnie takie tworzenie pytań lub ich zestawów, aby uzyskać pożądane odpowiedzi i zmieniać zachowanie modelu bez konieczności jego treningu.
Biblioteki oraz narzędzia¶
Spośród rozwiązań AI ogólnego przeznaczenia warto wyróżnić te które posiadają szerokie wsparcie dla sieci LLM.
- Hugging Face – zbiór bibliotek ułatwiający dostęp do zbiorów danych, modeli oraz frameworków do ich trenowania i zastosowania. Ekosystem ten posiada szerokie wsparcie dla LLM-ów (modele, zbiory danych, biblioteki do użycia i trenowania), z myślą o których był tworzony. Szczególnym atutem jest prostota dostępnych abstrakcji, a także szeroki zakres zintegrowanych narzędzi i rozwiązań. Przydatna do ewaluacji różnych modeli oraz prototypowania rozwiązań.
- DeepSpeed – rozbudowany framework, umożliwiający zarówno trening, jak i inferencję z wykorzystaniem różnego rodzaju sieci, w tym LLM-ów. W bibliotece zintegrowane zostały przydatne techniki usprawniające wykorzystanie LLM-ów, takie jak kwantyzacja, kompresja modelu, zrównoleglenie treningu i inferencji czy bardziej efektywne algorytmy obliczeń w warstwach uwagi (m.in. flash attention). Biblioteka posiada szerokie wsparcie zarówno od strony społeczności jak i firmy Microsoft, stojącej za jej rozwojem.
Dostępny jest również szereg rozwiązań przeznaczonych stricte do pracy z LLM-ami. Poniżej przedstawiony jest wybór niektórych spośród nich.
- LangChain – framework do łatwego tworzenia szerokiego spektrum aplikacji opartych o modele językowe. Posiada proste i wygodne w użyciu abstrakcje, umożliwiające integrację modeli LLM-ów z zewnętrznymi zasobami obliczeniowymi i danymi. Umożliwia tworzenie m.in. prostych chatbotów, rozwiązań opartych o RAG oraz systemów agentowych umożliwiające interakcje modeli z zewnętrznymi API. Posiada integrację z innymi bibliotekami i dostawcami usług, m.in. Hugging Face, OpenAI czy Microsoft. Zapewnia także dostęp do abstrakcji służących do prostego parsowania treści z plików tekstowych i stron internetowych oraz integracji z różnymi typami baz danych np. wektorowymi. Nie umożliwia trenowania modeli, a jedynie inferencję.
- LlamaIndex – to kolejna biblioteka stworzona do inferencji o filozofii podobnej do LangChain. Główną różnicą jest to że LLamaindex skupia się przede wszystkim na aplikacjach typu RAG. Posiada również szeroką integrację z innymi frameworkami i dostawcami usług.
- TensorRT-LLM – biblioteka od NVIDIA stworzona do szybkiej inferencji z wykorzystaniem LLM-ów. Posiada szeroki zakres narzędzi optymalizujących, m.in. kwantyzację️ i zrównoleglenie modelu. Umożliwia bezpośrednią integrację z TensorRT, silnikiem dodatkowo przyspieszającym inferencję na kartach GPU firmy NVIDIA.
- NeMo – kolejny zestaw narzędzi od NVIDIA, stworzony z myślą o ułatwieniu eksperymentów w domenie LLM-ów. Służy głównie do automatycznego rozpoznawania mowy, syntezy mowy na podstawie tekstu oraz innych zadań z domeny przetwarzania języka naturalnego. Jest zintegrowany z wcześniej wymienioną biblioteką TensoRT-LLM. Implementuje najnowsze rozwiązania umożliwiające skuteczny trening dużych modeli na rozproszonych zasobach. Wspiera skalowanie do tysięcy GPU, modele nawet do biliona parametrów.
- Auto-GPTQ – biblioteka umożliwiająca kwantyzację modelu do inferencji z wykorzystaniem algorytmu GPTQ. Modele po kwantyzacji tą metodą są bardzo szybkie, natomiast sama metoda wiąże się z koniecznością iteracyjnej ewaluacji działania modelu na zbiorze danych. Algorytm kwantyzacji musi również być wytrenowany. Sprawia to że jego zastosowanie dla dużych modeli może być czasochłonne lub ograniczone przez zasoby.
- Bits and Bytes – biblioteka umożliwiająca wygodne zastosowanie kwantyzacji do niektórych funkcjonalności biblioteki Pytorch, takich jak warstwy liniowe czy optymalizatory. Jej użycie jest bardzo proste i szybkie. Biblioteka posiada silną integrację z rozwiązaniami od Hugging Face, szczególnie w przypadku korzystania z LLM-ów.
- PEFT (Parameter-Efficient Fine-Tuning) – biblioteka od twórców Hugging Face, oferująca najnowsze i najbardziej wydajne techniki do dotrenowywania LLM-ów, m.in. takiego typu jak LoRA. Integruje się z innymi bibliotekami od Hugging Face oraz DeepSpeed.
Linki¶
- ogólne omówienie LLM
- Wikipedia: Large Language Model – przybliżenie różnych zagadnień dot. LLM-ów
- Wikipedia: Generative pre-trained transformer – czym jest GPT
- lista modeli LLM – lista znanych sieci LLM
- LLM Visualization – wizualizacja i wyjaśnienie działania sieci LLM
- szczegóły architektury
- artykuł “Attention Is All You Need” (2017) – artykuł wprowadzający architekturę transformer
- What Is Attention in Language Models? – omówienie mechanizmu uwagi
- techniki optymalizacji
- Mastering LLM Techniques: Inference Optimization – omówienie wielu technik optymalizacji wykorzystania LLM-ów
- LoRA – Practical Tips for Finetuning LLMs Using LoRA
- RAG – What is Retrieval Augmented Generation (RAG)?
- prompt engineering – Prompt Engineering Guide
- tutoriale
- Hugging Face NLP Course – kompleksowy kurs wprowadzający w przetwarzanie języka naturalnego oraz demonstrujący zastosowania bibliotek dostępnych w ekosystemie Hugging Face