AI na urządzeniu · 8 min czytania

Jak model językowy mieści się w telefonie

Lokalne aplikacje AI proszą o zaskakująco dużo miejsca, a powodem nie jest przerost. Zrozumienie, gdzie znikają te gigabajty, tłumaczy też, dlaczego model jest szybki na nowym telefonie, a ociężały na starym — i co właściwie mówi ci nazwa pliku Q3_K_S .

Model to wielka sterta liczb

Model językowy to zbiór wyuczonych parametrów — wag. Każda jest liczbą, a jest ich miliardy. „2B” w nazwie modelu oznacza mniej więcej dwa miliardy parametrów.

Przechowywana z pełną precyzją każda waga zajmuje 4 bajty. Dwa miliardy wag po 4 bajty to około 8 GB — i to dla jednego z mniejszych modeli. Oto problem w jednym zdaniu: plik jest duży, bo liczb jest mnóstwo i każda przechowywana jest precyzyjnie.

Kwantyzacja: mniej bitów na liczbę

Kwantyzacja przechowuje każdą wagę na mniejszej liczbie bitów. Zamiast 32 bitów na wagę używasz 8, 4 albo 3 — ze współczynnikami skalującymi na blok wag, żeby przybliżenie trzymało się blisko oryginału.

Redukcja rozmiaru jest z grubsza liniowa:

To kompresja stratna, jak JPEG. Posuń ją dostatecznie daleko, a zobaczysz artefakty — w modelu językowym objawiają się jako mgliste odpowiedzi, powtórzenia albo odpływanie od pytania.

Kwantyzacja nie ogłupia modelu równomiernie. Czyni go mniej precyzyjnym, a nieprecyzyjność ujawnia się najpierw przy najtrudniejszych danych wejściowych.

Jak czytać nazwę pliku

Nazwa taka jak Q4_K_M albo Q3_K_S to przepis, a nie numer wersji:

Zatem Q3_K_S to mały 3-bitowy k-quant: skompresowany agresywnie, wybierany wtedy, gdy zmieszczenie się na urządzeniu liczy się bardziej niż ostatnie kilka procent jakości.

GGUF: pojemnik

GGUF to format pliku, który mieści skwantyzowane wagi plus metadane potrzebne środowisku uruchomieniowemu — tokenizator, architekturę, szablon zapytania. Jeden plik, bez towarzyszącego katalogu konfiguracji.

Dla telefonów ma znaczenie, bo GGUF jest zaprojektowany tak, by dało się go zmapować w pamięci. Zamiast wczytywać 1,7 GB do RAM-u, środowisko uruchomieniowe mapuje plik w swojej przestrzeni adresowej, a system operacyjny sprowadza te fragmenty, które są faktycznie używane. Dlatego model większy niż wolny RAM telefonu wciąż może działać i dlatego pierwsza odpowiedź po otwarciu aplikacji jest wolniejsza od kolejnych — strony są jeszcze sprowadzane.

Dlaczego telefon się grzeje

Wygenerowanie słowa — tokenu — oznacza przepuszczenie wejścia przez te miliardy parametrów. A potem zrobienie tego jeszcze raz dla następnego tokenu. Stuwyrazowa odpowiedź to sto przebiegów.

To ciągła arytmetyka na procesorze albo akceleratorze neuronowym, czyli dokładnie to obciążenie, z którym telefony radzą sobie termicznie najgorzej. Urządzenia zbijają taktowanie, gdy się nagrzeją, więc długie, nieprzerwane generowanie zwalnia w trakcie. Dobrze zrobione aplikacje lokalne rozkładają pracę — rozsuwają zadania, żeby układ mógł ostygnąć — zamiast ustawiać wszystko jedno za drugim.

Dlaczego stare telefony sobie nie radzą

Trzy ograniczenia, wszystkie twarde:

Dlatego lokalne aplikacje AI podają minimalne urządzenie, zamiast próbować obsłużyć wszystko. Poniżej pewnego progu doświadczenie nie jest pogorszone — jest nieużywalne.

Wymiana, na którą się godzisz

Skwantyzowany model wielkości telefonu nie dorówna dużemu modelowi chmurowemu w trudnym rozumowaniu. Do ograniczonego zadania — co znaczy to słowo w tym zdaniu, przetłumacz tę frazę — jest w zupełności wystarczający i przychodzi z trzema właściwościami, których model chmurowy dać nie może: działa bez połączenia, nie kosztuje nic za użycie, a tekst nigdy nie opuszcza urządzenia.

Na tym polega cały układ z AI na urządzeniu. Rezygnujesz z największego możliwego modelu, a dostajesz prywatność, działanie offline i brak liczników.

Jak robi to ClickBook

ClickBook dostarcza skwantyzowany model GGUF i uruchamia go przez llama.cpp na twoim urządzeniu. Na iOS jest wbudowany w aplikację, więc nie ma czego pobierać. Przeczytaj więcej o czytnikach z lokalną AI, albo zobacz, jak działa ClickBook.