Quen trzy i pięć w wariancie trzydziestu pięciu miliardów parametrów generuje jedenaście tokenów na sekundę na iPhonie siedemnaście. W czterobitowym pliku ten model waży około dwudziestu gigabajtów i normalnie musi w całości siedzieć w pamięci. Na telefonie w pamięci zostaje tylko jeden i cztery dziesiąte gigabajta. Reszta leży na S S D i jest doczytywana wtedy, kiedy jest potrzebna. Warren z Better Stack pokazuje, jak to poskładano, jaki błąd zapętlał model i co trzeba zrobić, żeby uruchomić to u siebie.
Co zostaje w pamięci, a co na dysku
To model typu mixture of experts. Końcówka A trzy B oznacza, że na jeden token aktywne są tylko około trzy miliardy z trzydziestu pięciu miliardów parametrów. Model ma czterdzieści warstw, w każdej dwieście pięćdziesiąt sześć małych ekspertów plus jeden wspólny. Router wybiera ośmiu ekspertów na token.
W pamięci na stałe zostaje to, czego potrzebuje każdy token: embeddingi, uwaga, routery i wspólny ekspert. To właśnie te jeden i cztery dziesiąte gigabajta. Eksperci to czterdzieści plików po około trzysta megabajtów, razem dwanaście gigabajtów, i te zostają na S S D.
Dla każdego tokenu uwaga liczy się na G P U, router wskazuje ośmiu ekspertów, a silnik czyta ich prosto z S S D do pamięci G P U i uruchamia razem ze wspólnym ekspertem. Dzieje się to w każdej z czterdziestu warstw, więc na jeden token przypada trzysta dwadzieścia drobnych odczytów.
Uwaga to ta część modelu, która patrzy wstecz na całą dotychczasową rozmowę i ustala, które wcześniejsze słowa mają znaczenie dla przewidzenia następnego. Działa przy każdym tokenie, więc musi zostać w pamięci. Eksperci myślą o tokenie dopiero wtedy, gdy uwaga ustali kontekst — a skoro używanych jest tylko ośmiu, resztę można zostawić na dysku.
Własny cache okazał się gorszy niż systemowy
W aplikacji nie ma żadnego cache’u ekspertów. Każdy odczyt idzie przez system operacyjny, a iOS trzyma ostatnio używanych ekspertów we własnym page cache tak długo, jak ma wolną pamięć.
Autorzy najpierw zbudowali własny cache na dziewięć i osiem dziesiątych gigabajta, a potem go skasowali. Było o trzydzieści osiem procent szybciej. Na Macu i na iPhonie każdy gigabajt zabrany przez aplikację to gigabajt odebrany G P U i temu systemowemu cache’owi. A to on wykonuje tu większość pracy: przy jedenastu tokenach na sekundę odczyt wszystkich ekspertów z pamięci flash wymagałby ponad pięciu gigabajtów na sekundę, a flash w iPhonie daje około jednego i sześciu dziesiątych.
Kwantyzacja na dwa poziomy
Kwantyzacja zmniejsza wagi modelu, ale obniża ich dokładność, więc odbija się na inteligencji. W tym modelu około dwudziestu pięciu procent ekspertów wykonuje około osiemdziesięciu procent pracy. Gorący eksperci zostają więc na czterech bitach, a zimni schodzą do dwóch. Zimni są dzięki temu o czterdzieści cztery procent mniejsi, a cały plik kurczy się o trzydzieści cztery procent, z około dziewiętnastu do trzynastu gigabajtów. Więcej mieści się w page cache.
Efekt to jedenaście tokenów na sekundę na iPhonie siedemnaście, z modelem w trybie myślenia. Telefon przy tym mocno się grzeje.
Dosłownie od napisania „cześć” czułem, jak telefon nagrzewa się w dłoni.
Silnik, błąd i pętla
Silnik to projekt Flash M O E autorstwa Dana Woodsa, napisany pod MacBooka. Do iPhone’a jest mały port o nazwie Flash iOS, który opakowuje ten sam silnik w aplikację.
Na starcie pojawił się błąd: model zaczynał normalnie, a po jakichś dziesięciu słowach w nieskończoność powtarzał te same dwa tokeny. Poprawka trafiła do funkcji async pre read weight, tak żeby odczyt każdego eksperta był sprawdzany względem jego własnego rozmiaru. Zimni eksperci są dwubitowi i o połowę mniejsi od gorących, więc przed poprawką każdy z nich nie przechodził kontroli rozmiaru i był po cichu pomijany. Model działał efektywnie z połową ekspertów i dlatego się zapętlał.
Jak to uruchomić
- Sklonuj repozytorium.
- Nanieś poprawkę pre read w pliku
metal infer/infer.m. - Wskaż w projekcie Xcode swój zespół i bundle I D. Potrzebne jest płatne konto Apple Developer.
- Zbuduj wersję release i zainstaluj na iPhonie.
- Pobierz gotowy model z kwantyzacją dwupoziomową, około trzynaście gigabajtów.
- Wgraj go do aplikacji przez U S B — zajmuje to jakieś siedem minut.
- Otwórz aplikację Flash M O E, wybierz model i zacznij rozmowę.
Koniec artykułu.