Model językowy z 28,9 mln parametrów działał na ESP32-S3


Programista Wjaczesław Serbov, działający pod pseudonimem slvDev, zademonstrował w pełni lokalne generowanie tekstu na mikrokontrolerze ESP32-S3. Stworzony przez niego model językowy zawiera 28,9 mln parametrów i generuje około 9,9 tokena na sekundę, nie korzystając z serwera ani innych zewnętrznych zasobów obliczeniowych. Wygenerowane krótkie opowiadania są wyświetlane na podłączonym wyświetlaczu OLED.

 

Projekt esp32-ai testowany na module ESP32-S3 N16R8, który ma 512 KB wbudowanej pamięci SRAM, 8 MB PSRAM i 16 MB pamięci flash. Kwaterowany do czterech bitów model zajmuje 14,9 MB. W repozytorium opublikowano kod źródłowy środowiska uruchomieniowego w C, narzędzia do szkolenia i kwantyzacji modelu, oprogramowanie układowe, testy oraz skrypty do jego ładowania na płytę.

 

Podane 28,9 mln parametrów nie powinno się bezpośrednio porównywać z liczbą parametrów standardowych LLM dla komputerów stacjonarnych. Zgodnie z szczegółowym raportem autora,model składa się z gęstej struktury obliczeniowej z około 559 tysiącami parametrów, warstwy wyjściowej z 3,1 mln parametrów oraz tabeli wektorowych reprezentacji warstwowych z około 25 mln parametrów. To ostatnie stanowi główną część formalnego rozmiaru modelu, ale nie jest przetwarzane w całości podczas generowania każdego tokena.

 

Dla pomieszczenia modelu wykorzystano trzy poziomy pamięci. Najczęściej używane dane znajdują się w wewnętrznej SRAM, warstwa wyjściowa, pamięć KV i bufor czasowy w PSRAM, zaś tabela 25-milionowa pozostaje w pamięci flash i jest dostępna poprzez mapowanie w przestrzeni adresowej. Dla każdego tokena odczytywane jest jedynie około sześciu wierszy o łącznej wielkości około 450 bajtów.

 

To urządzenie opiera się na technologii Per-Layer Embeddings, zastosowanej przez Google w Gemma 3n. Zgodnie z dokumentacją Google,parametry PLE mogą być przechowywane poza roboczą pamięcią modelu i dodawane do procesu wyjściowego w miarę przetwarzania poszczególnych warstw. W esp32-ai podejście to zostało przeniesione do hierarchii pamięci mikrokontrolera, gdzie szybka SRAM jest szczególnie ograniczona.

 

Pierwsza poprawna wersja środowiska wykonawczego napisanego w C generowała tylko 0,57 tokena na sekundę. Po przeniesieniu warstwy wyjściowej do PSRAM, przejściu na aktywacje ośmiobitowe, rozdzieleniu obliczeń pomiędzy dwa rdzenie Xtensa LX7 oraz innych optymalizacjach, opóźnienie zostało zmniejszone do 94,9 ms na krok modelu. Ostateczna zmierzona prędkość osiągnęła 9,88 tokena na sekundę, biorąc pod uwagę cały proces generacji. Głównym ograniczeniem stała się teraz przepustowość PSRAM przy odczycie warstwy wyjściowej.

 

Model został wytrenowany na syntetycznym zbiorze danych TinyStories, składającym się z prostych anglojęzycznych opowiadań z ograniczonym słownictwem. Dlatego potrafi kontynuować zdania i tworzyć małe spójne historie, ale nie jest przeznaczony do odpowiadania na pytania, wykonywania instrukcji, programowania czy reprodukowania faktów. Deweloper traktuje tę pracę przede wszystkim jako demonstrację efektywnego umieszczania modelu w pamięci mikrokontrolera, a nie jako gotowego, autonomicznego chatbota.

 

W aktualnej dokumentacji autor szczególnie podkreśla, że esp32-ai jest samodzielnym projektem. Projekty llama2.c Andrieja Karpati i wcześniejsze uruchomienie modelu 260-tysięcznego na ESP32-S3 są podawane jedynie jako punkty odniesienia i przykłady wcześniejszych prac: kod, punkty kontrolne i metodologia nie zostały bezpośrednio z nich przejęte. Kod źródłowy esp32-ai jest udostępniany na licencji MIT.

 

Źródło: linux.org.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster