slvDev przedstawił na GitHub ciekawy projekt - port modelu AI generującego tekst na mikrokontroler ESP32-S3, całość na jednym układzie z 512KB SRAM, 8MB PSRAM i 16MB flash. Model waży 14.9MB, a 25 milionów parametrów siedzi we flash. Osiąga 9.88 tokenów na sekundę. Całość oparta jest o technikę Per-Layer Embeddings (z modelu Google Gemma 3n). Podczas generowania pobierane jest w locie tylko około 450 bajtów z pamięci flash na każdy token.
Jak tego dokonano? Autor mądrze zagospodarował trzy warstwy pamięci. Najszybszy SRAM (512KB) obsługuje gęsty rdzeń modelu (559K parametrów). Do zewnętrznego PSRAM zrzucono głowę wyjściową, skanowaną w całości co token. Z kolei główna masa, czyli 25 milionów parametrów, leży w powolnej pamięci flash. Zgodnie z analizą kodu, odczyt tych parametrów to zaledwie 0.12 ms na token - raptem 0.7% całego obciążenia pamięci, co oznacza, że flash wcale nie jest wąskim gardłem. Sukces opiera się na dużym słowniku (vocab 32768), dzięki czemu model trafnie czyta rzadkie wiersze zamiast polegać na ogromnym rdzeniu. Silnik to bezpośredni port llama2.c.
Jak to uruchomić? Wystarczy płytka z układem ESP32-S3 w wersji N16R8 (16MB flash i 8MB PSRAM), którą można kupić za około 8 dolarów. Instalacja sprowadza się do odpalenia dwóch skryptów. Najpierw
fetch_model.sh
pobiera i weryfikuje dane, a następnie
deploy.sh
kompiluje firmware i wgrywa wszystko na płytkę. Model ląduje na specjalnie wydzielonej partycji flash pod adresem 0x110000.
Co zostało do zrobienia? Sam autor przyznaje, że projekt można rozwinąć w dwóch kierunkach. Pierwszy to optymalizacja - ESP32-S3 posiada sprzętowe instrukcje wektorowe (SIMD), które nie zostały jeszcze wykorzystane w kodzie, co jest prostą drogą do podbicia prędkości. Drugi to użyteczność. Dziś model pisze tylko proste opowiadania, ale sama sztuczka z pamięcią otwiera drogę do potężniejszych zadań offline. Autor celuje w lokalny parser komend, przewidywanie tekstu lub kieszonkowy translator. Jak sam słusznie zauważa, do prostej automatyki tak potężny model nie jest po prostu potrzebny.
Czy widzicie jakieś zastosowania dla modeli językowych uruchamianych na ESP?
Szczerze, to nie widzę sensu projekt bardziej na zasadzie edukacyjnej, przypomina uruchamianie gry dooma na podobnych płytkach. Można? Można. Czy ma sens? Nie bardzo.
Całkiem możliwe, że już niedługo przekonamy się o „dodatkowej funkcjonalności” niektórych gadżetów.
Tym razem cyberatak na systemy instalacji wodociągowych w USA, okazuje się, że nie pierwszy w przeciągu kilku lat.
https://www.bbc.co.uk/news/articles/c934dq95zpgo.
@gbksiazczak W sumie całkiem dobrze, że zwróciłeś uwagę. Rzeczywiście osoby które nie śledzą na bieżąco rozwoju AI mogą nie wiedzieć czym jest token czy tam liczba parametrów. Może przydałby się jakiś temat opisujący czym jest LLM, czym jest token, czym jest ilość parametrów, oraz te całe słynne "myślenie"?
Jakiś czas temu widziałem nawet na Youtube jak dość merytoryczny pan Adam Śmiałek na filmie opowiadał, że sprawdzał czy LLM się nauczy, tak jakby nie wiedział, że sam model to monolit a dodany jakiś czas temu system pamięci to proteza...
@gulson co myślisz o takim temacie, może by go zrobić a potem dać jako "przypięty" tutaj w dziale?
Tworzę pierwsze na świecie oprogramowanie open source przeznaczone dla platform BK7231, XR809, BL602, W600, W800, LN882H, ECR, TRS, RTL, jak również ESP8266 i ESP32 używanych w różnych urządzeniach IoT, pozwalające uwolnić je od serwerów producenta, od śledzenia, dowolnie modyfikować i sparować z Home Assistant.
Dodatkowo publikuję różnorodne materiały, często tutoriale i praktyczne demonstracje.
Jeśli podoba Ci się moja twórczość i w czymś Ci pomogłem, to rozważ wsparcie mnie tutaj: https://www.paypal.com/paypalme/openshwprojects Mój Github: https://github.com/openshwprojects Mój tutorial PIC18F SDCC: https://www.elektroda.pl/rtvforum/topic3635522.html Pracuję na stacji hot air SUGON 8630 Pro od Katemedia
@ElektrodaBot młody, weź no wyjaśnij o co chodzi w zdaniach i w tym wszystkim, tylko prosto bo ja już wiekowy jestem
p.kaczmarek2 napisał:
port modelu AI generującego tekst na mikrokontroler
p....
Bezpośrednia odpowiedź na pytanie
Chodzi o to, że ktoś uruchomił bardzo mały model językowy, czyli program potrafiący generować tekst, bezpośrednio na mikrokontrolerze ESP32-S3. To nie jest „ChatGPT w kostce”, tylko raczej miniaturowy demonstrator: pokazuje, że nawet mały układ za kilkadziesiąt złotych może lokalnie, bez chmury i bez dużego komputera, produkować prosty tekst.
Najprościej:
- port modelu AI generującego tekst na mikrokontroler oznacza: przeniesiono program AI piszący tekst na mały układ elektroniczny, taki jak ESP32-S3.
- parametry modelu to liczby zapisane w pamięci, które określają, jak model reaguje na wejściowy tekst. Można je porównać do nastaw milionów małych potencjometrów.
- token to kawałek tekstu, którym operuje model. Tokenem może być całe słowo, część słowa, znak interpunkcyjny albo odstęp. Model nie „myśli literami”, tylko takimi kawałkami.
- obsługuje gęsty rdzeń modelu, 559K parametrów znaczy: najważniejsza, stale używana część modelu ma około 559 tysięcy liczb-parametrów i trzymana jest w szybkiej pamięci mikrokontrolera.
- trafnie czyta rzadkie wiersze zamiast polegać na ogromnym rdzeniu znaczy: zamiast trzymać wielki, ciężki model w RAM-ie, program ma dużą tabelę/słownik w pamięci flash i przy generowaniu tekstu pobiera tylko te małe fragmenty tabeli, które są akurat potrzebne.
Całe osiągnięcie polega głównie nie na tym, że ESP32 nagle stał się „mądry jak duży komputer”, tylko na sprytnym gospodarowaniu pamięcią.
---
Szczegółowa analiza problemu
1. Co znaczy „model AI generujący tekst”?
Model generujący tekst to program, który dostaje początek wypowiedzi, na przykład:
> „Dawno, dawno temu”
i próbuje przewidzieć, co powinno być dalej:
> „w małej wiosce mieszkał...”
On nie rozumuje tak jak człowiek. W uproszczeniu liczy prawdopodobieństwa: jaki następny kawałek tekstu najbardziej pasuje do poprzednich kawałków.
Czyli model robi mniej więcej coś takiego:
1. bierze tekst wejściowy, 2. dzieli go na tokeny, 3. wykonuje dużo obliczeń na zapisanych liczbach-parametrach, 4. wybiera najbardziej pasujący następny token, 5. dopisuje go, 6. powtarza procedurę.
---
2. Co to jest „token”?
Token to podstawowa porcja tekstu używana przez model.
Nie zawsze jest to całe słowo. Przykładowo zdanie:
> „Elektroda działa.”
może zostać podzielone na tokeny mniej więcej tak:
Kod: text
Zaloguj się, aby zobaczyć kod
Albo inaczej, zależnie od zastosowanego słownika modelu.
Model nie przetwarza tekstu jak człowiek: „tu jest słowo, tu jest zdanie”. Najpierw zamienia tekst na numery tokenów. Przykładowo:
Kod: text
Zaloguj się, aby zobaczyć kod
Potem już liczy na liczbach.
Dlatego prędkość takich modeli podaje się często w jednostce:
Kod: text
Zaloguj się, aby zobaczyć kod
Jeżeli model osiąga około 9,88 tokena/s, to znaczy, że w każdej sekundzie generuje prawie 10 kawałków tekstu. W praktyce może to odpowiadać kilku słowom na sekundę, zależnie od języka i długości słów.
---
3. Co to są „parametry” modelu?
Parametry to liczby zapisane w modelu. One są wynikiem wcześniejszego uczenia.
Dobre porównanie elektroniczne: proszę sobie wyobrazić układ z ogromną liczbą potencjometrów montażowych. Każdy potencjometr jest ustawiony w określonej pozycji. Razem te ustawienia decydują, jak układ reaguje na sygnał wejściowy.
W modelu AI zamiast potencjometrów są liczby, na przykład:
Kod: text
Zaloguj się, aby zobaczyć kod
Tych liczb mogą być tysiące, miliony albo miliardy.
Model opisany w poście ma około 25 milionów parametrów, ale jego najważniejsza stale liczona część, zwana tam „gęstym rdzeniem”, ma około 559 tysięcy parametrów.
Dla porównania:
Rodzaj modelu
Liczba parametrów
Charakter
Miniaturowy model z projektu
ok. 25 mln
demonstrator na ESP32-S3
Małe modele lokalne na PC/telefon
setki mln do kilku mld
proste rozmowy, klasyfikacja, asystenci
Duże modele serwerowe
dziesiątki/setki mld
zaawansowana rozmowa, analiza, kod
Więcej parametrów zwykle oznacza większe możliwości, ale też większe wymagania pamięciowe i obliczeniowe.
---
4. Co znaczy „port modelu AI generującego tekst na mikrokontroler”?
Port albo portowanie oznacza dostosowanie programu do pracy na innym sprzęcie lub w innym środowisku.
Tu chodzi o to, że program typu LLM, czyli model językowy, został przeniesiony na ESP32-S3.
ESP32-S3 to mikrokontroler, a nie pełny komputer. Typowo taki układ stosuje się do:
To układ bardzo ograniczony w porównaniu z komputerem PC. Ma mało RAM-u, wolniejsze taktowanie i brak dużej karty graficznej. Dlatego uruchomienie na nim programu generującego tekst jest ciekawostką techniczną.
To trochę jak z uruchamianiem gry Doom na kalkulatorze, zegarku albo terminalu płatniczym: praktyczność jest ograniczona, ale pokazuje możliwości sprzętu i umiejętności autora.
---
5. Pamięci w ESP32-S3: SRAM, PSRAM i flash
Klucz do zrozumienia projektu to pamięć. Autor wykorzystał trzy różne rodzaje pamięci:
Pamięć
Porównanie
Cechy
Co tam trafiło
SRAM
blat roboczy
mała, ale szybka
najważniejszy rdzeń modelu
PSRAM
szuflada pod stołem
większa, wolniejsza
część danych roboczych i głowa wyjściowa
Flash
regał w piwnicy
duża, najwolniejsza, nieulotna
większość parametrów modelu
Najważniejsza sztuczka polega na tym, że model nie próbuje wczytać wszystkiego naraz do RAM-u. Gdyby próbował, zabrakłoby pamięci.
Zamiast tego:
- mały, często używany fragment jest w szybkiej pamięci, - duża masa danych leży we flash, - z flash pobierane są tylko małe fragmenty potrzebne w danym momencie.
To jest podobne do pracy z książką telefoniczną. Nie przepisuje Pan całej książki na kartkę. Otwiera Pan właściwą stronę i odczytuje tylko jeden potrzebny numer.
---
6. „Gęsty rdzeń modelu” — o co chodzi?
Zdanie:
> „obsługuje gęsty rdzeń modelu (559K parametrów)”
można przetłumaczyć tak:
> Szybka część pamięci mikrokontrolera przechowuje i liczy główny mały układ obliczeniowy modelu, który ma 559 tysięcy liczb.
„Gęsty” w tym kontekście oznacza, że ta część modelu jest używana cała albo prawie cała przy każdym kroku generowania tekstu.
Czyli gdy model ma wygenerować następny token, ten rdzeń stale bierze udział w obliczeniach. Dlatego warto trzymać go w najszybszej pamięci.
Prosty schemat:
Kod: text
Zaloguj się, aby zobaczyć kod
Gdyby ta część była w wolnej pamięci flash, układ traciłby dużo czasu na odczyty.
---
7. Co znaczy „25 milionów parametrów siedzi we flash”?
To znaczy, że większość liczb opisujących model nie jest trzymana w szybkiej pamięci RAM, tylko w pamięci programu, czyli flash.
Flash jest pamięcią nieulotną: po wyłączeniu zasilania dane zostają. W mikrokontrolerach trzyma się tam zwykle firmware, stałe, grafiki, fonty, strony WWW, konfiguracje itd.
Tutaj do flash wpisano dużą część modelu AI.
Problem: flash jest wolniejszy od RAM-u. Rozwiązanie: nie czytać całej flash przy każdym kroku, tylko czytać niewielkie porcje.
I właśnie to jest sedno osiągnięcia.
---
8. „Rzadkie wiersze” — najbardziej mylące sformułowanie
Zdanie:
> „trafnie czyta rzadkie wiersze zamiast polegać na ogromnym rdzeniu”
jest żargonowe i średnio szczęśliwie brzmi po polsku.
Tu nie chodzi o wiersze w sensie poezji. Chodzi o wiersze tabeli, czyli pojedyncze pozycje w dużej macierzy/liczbowej tablicy modelu.
W modelach językowych istnieją tabele, które przypisują tokenom pewne zestawy liczb. Taki zestaw liczb nazywa się często embeddingiem. Można to potraktować jako „opis matematyczny tokenu”.
Przykład uproszczony:
Token
Numer tokenu
Wiersz tabeli z liczbami
„dom”
1024
[0.12, -0.08, 0.44, ...]
„kot”
2311
[0.02, 0.31, -0.17, ...]
„lutownica”
18540
[0.55, -0.11, 0.03, ...]
Jeżeli w tekście pojawia się token „lutownica”, model nie musi czytać całej tabeli. Wystarczy, że odczyta jeden konkretny wiersz tabeli, czyli zestaw liczb dla tokenu „lutownica”.
To nazywa się dostęp rzadki albo sparse access — pobieramy tylko małe wybrane fragmenty, a nie całość.
Czyli „rzadkie wiersze” oznaczają:
> pojedyncze wpisy z dużej tabeli parametrów, odczytywane tylko wtedy, gdy są potrzebne.
---
9. Dlaczego duży słownik pomaga?
W poście wspomniano o słowniku:
Kod: text
Zaloguj się, aby zobaczyć kod
To znaczy, że model ma słownik około 32768 tokenów. Każdy token ma swój numer.
Duży słownik pozwala modelowi przechowywać wiele gotowych kawałków słów i zwrotów. Dzięki temu mniejszy rdzeń obliczeniowy nie musi „domyślać się” wszystkiego od zera.
Można to porównać do elektronika mającego dobrze opisane szufladki z elementami. Jeśli potrzebuje rezystora 4,7 kΩ, nie musi go budować z drutu oporowego — wyciąga gotowy element z szufladki.
Tak samo model:
- ma wiele gotowych reprezentacji tokenów, - przy pracy pobiera tylko potrzebne reprezentacje, - dzięki temu rdzeń może być mniejszy.
---
10. Dlaczego to jest trudne na mikrokontrolerze?
Bo klasyczny model językowy wymaga dużo:
- pamięci RAM, - pamięci na parametry, - szybkich mnożeń macierzy, - dużej przepustowości pamięci, - czasem sprzętowej akceleracji GPU/NPU.
ESP32-S3 ma bardzo ograniczone zasoby. Tu użyto wersji z:
- 512 KB SRAM, - 8 MB PSRAM, - 16 MB flash.
Dla porównania zwykły laptop ma zwykle kilka lub kilkanaście gigabajtów RAM. To tysiące razy więcej.
Dlatego osiągnięcie polega na takim rozłożeniu danych, żeby mikrokontroler nie musiał dźwigać wszystkiego naraz.
---
11. Prosty obraz całości
Można to sobie wyobrazić tak:
Kod: text
Zaloguj się, aby zobaczyć kod
Przy generowaniu jednego następnego tokenu układ robi mniej więcej:
Kod: text
Zaloguj się, aby zobaczyć kod
---
12. Co to jest „głowa wyjściowa”?
W poście wspomniano, że do PSRAM przeniesiono „głowę wyjściową”.
W modelach językowych „głowa wyjściowa” to końcowy fragment modelu, który decyduje:
> jaki token ma być następny?
Jeżeli słownik ma 32768 tokenów, to model na końcu musi oszacować, który z tych 32768 tokenów jest najbardziej prawdopodobny.
Przykład:
Kod: text
Zaloguj się, aby zobaczyć kod
Głowa wyjściowa produkuje takie oceny dla tokenów. Ponieważ słownik jest duży, ta część też może zajmować sporo pamięci, więc trafiła do większej, ale wolniejszej PSRAM.
---
13. Czy to jest praktyczne?
Na dziś: częściowo.
Jako pokaz możliwości — bardzo ciekawe. Jako zamiennik dużego asystenta AI — nie.
Taki model może mieć sens w prostych zadaniach:
- lokalny parser komend, - proste przewidywanie tekstu, - generowanie krótkich komunikatów, - zabawka edukacyjna, - demonstrator AI offline, - prosta interakcja z urządzeniem bez internetu, - sterownik z bardziej naturalnymi komendami użytkownika.
Przykład praktyczny:
Kod: text
Zaloguj się, aby zobaczyć kod
Do takiego zadania nie potrzeba wielkiego modelu. Często wystarczy mały klasyfikator, parser regułowy albo klasyczne rozpoznawanie komend. Ale model językowy może pomóc, gdy użytkownik wpisuje komendy w różnych formach:
Kod: text
Zaloguj się, aby zobaczyć kod
---
14. Czy to może mieć związek z „klawiszem od spłuczki”?
W żartobliwym sensie — tak. Technicznie można sobie wyobrazić urządzenie sanitarne, AGD albo czujnik, który ma wbudowany lokalny model do rozumienia prostych poleceń.
Ale trzeba zachować zdrowy rozsądek. Do spłuczki, przekaźnika, termostatu czy czujnika zalania pełny model językowy zwykle jest przerostem formy nad treścią.
W automatyce często lepsze są:
- proste maszyny stanów, - klasyczne algorytmy, - reguły logiczne, - małe klasyfikatory, - lokalne modele TinyML, - komendy z ograniczonego słownika.
Model językowy na ESP32 ma sens głównie tam, gdzie tekst albo język naturalny rzeczywiście coś daje.
---
15. Co z bezpieczeństwem?
Jeżeli urządzenie AI działa lokalnie, bez chmury, są plusy:
- nie wysyła danych użytkownika na zewnętrzny serwer, - może działać bez internetu, - ma krótszą drogę reakcji, - trudniej podsłuchać komunikację, jeśli jej nie ma.
Ale są też minusy:
- trudniej aktualizować model, - model może źle zinterpretować komendę, - może wygenerować bezsensowną odpowiedź, - jeśli steruje czymś fizycznym, potrzebne są twarde zabezpieczenia poza AI.
Najważniejsza zasada inżynierska:
> Model językowy nie powinien bezpośrednio sterować elementami wykonawczymi odpowiedzialnymi za bezpieczeństwo.
Czyli AI może rozpoznać intencję użytkownika, ale ostateczna logika powinna przejść przez klasyczny, deterministyczny kod:
Kod: text
Zaloguj się, aby zobaczyć kod
---
16. Najkrótsze tłumaczenie trzech cytatów
Cytat
Po ludzku
„port modelu AI generującego tekst na mikrokontroler”
Przerobiono program piszący tekst tak, żeby działał na małym ESP32.
„obsługuje gęsty rdzeń modelu, 559K parametrów”
Najważniejsza mała część obliczeniowa ma 559 tys. zapisanych liczb i siedzi w szybkiej pamięci.
„trafnie czyta rzadkie wiersze zamiast polegać na ogromnym rdzeniu”
Zamiast wielkiego modelu w RAM-ie, odczytuje z dużej tabeli tylko potrzebne wpisy.
---
Podsumowanie
Największa sztuczka tego projektu to nie „magiczna inteligencja”, tylko bardzo sprytna organizacja danych.
Autor zrobił mniej więcej tak:
1. mały, często używany rdzeń dał do szybkiej pamięci, 2. duże tabele trzyma w wolniejszej flash, 3. z flash czyta tylko pojedyncze potrzebne wpisy, 4. większe dane pomocnicze trzyma w PSRAM, 5. dzięki temu ESP32-S3 może generować prosty tekst lokalnie.
To osiągnięcie jest ciekawe inżyniersko, bo pokazuje, że nawet tani mikrokontroler może wykonywać zadania kojarzone dotąd z dużo większym sprzętem. Praktycznie jednak nie należy tego mylić z dużym asystentem AI. To raczej miniaturowy model tekstowy, dobry do eksperymentów, prostych komend i demonstracji działania AI offline.
Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.
Tworzę pierwsze na świecie oprogramowanie open source przeznaczone dla platform BK7231, XR809, BL602, W600, W800, LN882H, ECR, TRS, RTL, jak również ESP8266 i ESP32 używanych w różnych urządzeniach IoT, pozwalające uwolnić je od serwerów producenta, od śledzenia, dowolnie modyfikować i sparować z Home Assistant.
Dodatkowo publikuję różnorodne materiały, często tutoriale i praktyczne demonstracje.
Jeśli podoba Ci się moja twórczość i w czymś Ci pomogłem, to rozważ wsparcie mnie tutaj: https://www.paypal.com/paypalme/openshwprojects Mój Github: https://github.com/openshwprojects Mój tutorial PIC18F SDCC: https://www.elektroda.pl/rtvforum/topic3635522.html Pracuję na stacji hot air SUGON 8630 Pro od Katemedia
Ta "tokenizacja" przypomina bardziej analizę otrzymanego tekstu niż jego generowanie. Czy jak na Arduino wykonam szperacza www zapisującego do pamięci znalezione/pobrane teksty to też będzie model językowy i "tokenizacja"? Czy stary dobry Bison/Yacc z zeszłego wieku to też były modele językowe? Wyrażenia regularne miały chociaż zwięzły, to jednak precyzyjny opis i zastosowanie a to AI sprawia wrażenie przerostu formy nad treścią.
Tokenizacja to po prostu wyszukiwanie w tekście znanych zlepków liter i zastępowanie ich reprezentacją numeryczną.
Wyraz może być reprezentowany przez 1 lub kilka tokenów.
Technika znana od dawna, na większą skalę zastosowana w połowie lat 70. w Microsoft BASIC, co pozwoliło na zapisanie w pamięci np. słów kluczowych typu "PRINT", "LOAD", "SAVE" za pomocą 1-bajtowego tokena.
Pozwoliło to na skrócenie programów w pamięci, ale i na szybsze ich wykonywanie czy edytowanie w pamięci.
Generalnie w AI jest podobnie, tyle że tokeny nie są od razu zdefiniowane, a "model" wyszukuje w tekstach podobne frazy i zapamiętuje je jako tokeny podczas uczenia.
Token może reprezentować jedno słowo, ale może też słowo składać się z kilku tokenów.
W każdym razie "Token" w obu przypadkach to najmniejsza jednostka informacji, jaka jest obrabiana w przypadku BASIC przez interpreter czy w przypadku AI przez model językowy.
Co do AI, to już w latach 50.-60. dobito do ściany w rozpoznawaniu na poziomie 95% i dano sobie spokój z AI na wiele lat, później w latach 80.-90. postanowiono zaprzęgnąć do pracy sieci neuronowe i znów odkryto na nowo starą prawdę Leibniza o młynie, dochodząc do 96% poprawnych odpowiedzi, teraz zaprzęgnięto miliardy i dalej nie udało się przełamać bariery 97%.
Tyle że teraz ludziom wyprało się mózgi tak, że nie oczekują nieomylnych narzędzi.
Zobaczymy, jak długo.
W każdym razie ludzie dziś są tacy mądrzy, że muszą wydać miliardy, aby w końcu dojść do tego, do czego Leibniz doszedł w XVII w.
Że nawet gdyby człowiek skopiował mózg, to on i tak nie będzie działał jak mózg człowieka.
Jest jakaś metoda/klucz w tym przyporządkowaniu fraz tokenom? Podobna metoda jest użyta w kompresowaniu plików i chyba zbliża się do doskonałości, bo niektóre pliki, np. tekstowe, można skompresować do 5% oryginału, nic nie tracąc na treści.
Język ludzki jest bardzo nadmiarowy i nie ma sensu przetwarzanie zbitek znaków, które znaczeniowo "nic nie wnoszą", bo np. zawsze występują ze sobą w takiej samej konfiguracji (to jest uproszczenie, ale wydaje mi się, że dobrze oddaje problem). Dawno, dawno temu, w 8-bitowych komputerach stosowano np. tokenizację języków interpretowalnych wysokiego poziomu, np. BASIC, aby oszczędzać pamięć i przyspieszać przetwarzanie kodu. W Sinclair BASIC zamiast polecenia składającego się z kilku znaków, np. PRINT, w pamięci był zapisany tylko pojedynczy bajt, odpowiadający temu poleceniu języka. Bardzo podobną ideę wykorzystuje się we współczesnych modelach językowych. Jednak w LLM-ach słownik tokenów jest wyuczony z tekstu i nie musi odpowiadać elementom mającym samodzielne znaczenie.
gbksiazczak napisał:
Jest jakaś metoda/klucz w tym przyporządkowaniu fraz tokenom?
Jest cały szereg metod, które zależą od tego co się chce osiągnąć. W tokenizerach typu BPE czy podobnych rzeczywiście występuje silny związek z kompresją: często występujące sekwencje znaków/bajtów są scalane w pojedyncze tokeny, dzięki czemu dany tekst można zapisać jako krótszą sekwencję tokenów. Badania rzeczywiście traktują współczesne tokenizery jako pewien rodzaj "strukturalnego kompresora". Entropia strumienia tokenów,w zależności od sposobu jej mierzenia, może się zwiększać albo zmniejszać. Nowsze analizy pokazują ciekawą sytuację: tokenizer może zwiększać entropię rozkładu pojedynczych tokenów, a jednocześnie zmniejszać entropię warunkową, czyli usuwać część krótkozasięgowej regularności tekstu. Klasyczny algorytm tokenizacji patrzy przede wszystkim na statystyczną częstość współwystępowania jednostek i scala często spotykane pary. Powstałe tokeny mogą odpowiadać słowom lub morfemom, ale równie dobrze mogą być fragmentami pozbawionymi samodzielnego znaczenia. Literatura wręcz bada, na ile jednostki tworzone przez BPE pokrywają się z jednostkami językowymi, gdyż wcale nie jest to gwarantowane.
>>21951512 Takim kluczem może być zaufana baza, czyli np. słowniki danego języka czy artykuły w Wikipedii.
Kompresja to jednak działa nieco inaczej, w niej wyszukujemy powtarzających się ciągów znaków, które niekoniecznie mają sens, przy tokenizacji szukamy słów, które mają jakieś znaczenie i możemy je sklasyfikować w swojej bazie danych, np. wyszukując w Wikipedii częstotliwość ich występowania w różnych tematach, np. medycyny, historii, techniki itd.
Język ludzki jest bardzo nadmiarowy i nie ma sensu przetwarzanie zbitek znaków, które znaczeniowo "nic nie wnoszą", bo np. zawsze występują ze sobą w takiej samej konfiguracji (to jest uproszczenie, ale wydaje mi się, że dobrze oddaje problem).
Tworzę pierwsze na świecie oprogramowanie open source przeznaczone dla platform BK7231, XR809, BL602, W600, W800, LN882H, ECR, TRS, RTL, jak również ESP8266 i ESP32 używanych w różnych urządzeniach IoT, pozwalające uwolnić je od serwerów producenta, od śledzenia, dowolnie modyfikować i sparować z Home Assistant.
Dodatkowo publikuję różnorodne materiały, często tutoriale i praktyczne demonstracje.
Jeśli podoba Ci się moja twórczość i w czymś Ci pomogłem, to rozważ wsparcie mnie tutaj: https://www.paypal.com/paypalme/openshwprojects Mój Github: https://github.com/openshwprojects Mój tutorial PIC18F SDCC: https://www.elektroda.pl/rtvforum/topic3635522.html Pracuję na stacji hot air SUGON 8630 Pro od Katemedia
Takim kluczem może być zaufana baza, czyli np. słowniki danego języka czy artykuły w Wikipedii
Pytałem po prostu o metodę przyporządkowania liczby tokenowi. Z tym wiąże się możliwość interpretacji znaczeniowej analizowanego tekstu. Wydaje się że sam słownik/matryca token/liczba nie jest specjalnie użyteczna. Dopiero ze składni, czyli kolejności i dobierania, tokenów/liczb można odczytać sens analizowanego albo generowanego tekstu. A tych powiązań składniowych nie widzę w powyższych wyjaśnieniach.
Jakieś powiązania z AI? Bo w sieci są to niemal "papużki nierozłączki". Jakie ma zastosowanie taki model? Prawdopodobieństwo czego analizują? Jak wyrażane są te korelacje i czemu służą?
Nie ma czegoś takiego jak AI. To termin marketingowy, który nie oznacza niczego konkretnego. Modele językowe to jeden z elementów systemów ogólnie określanych mianem AI. Analizują prawdopodobieństwo występowania kolejnych słów (a właściwie tokenów) po sobie.
Jeśli chodzi o tokenizację, to wygląda to mniej więcej tak:
A w dzisiejszych LLM stosuje się już rozbicie nie tylko na wyrazy, a także na słowa składowe w wyrazach złożonych z kilku lub liter. Różne modele mogą mieć różne preferencje.
.
I generującego tekst na mikrokontroler ESP32-S3, całość na jednym układzie z 512KB SRAM, 8MB PSRAM i 16MB flash. Model waży 14.9MB, a 25 milionów parametrów siedzi we flash.
Czyli wychodzi, że na 1 parametr przypada 5 bitów, czyli 32 różne wartości, co odpowiada liczbie liter w większości alfabetów. Jeśli tak, to ten cały LLM to po prostu prosta implementacja łańcucha Markowa opublikowana po raz pierwszy w 1913 r. Zresztą tajemnicą poliszynela jest, że Google, a więc zapewne i inne, z tego korzystają.
Taki program można napisać w kilku linijkach języka skryptowego czy np. BASIC-u, a i w asemblerze można potraktować jako trening.
Problemem jedynie może być odpowiednio duża i dobra baza, ale taką, jak się ma miliardy od inwestorów, zwyczajnie można ukraść, a zyski i tak wystarczą na prawników. W ostateczności, jak biznes będzie robić się coraz mniej opłacalny, należy szybko zmienić go na spółkę publiczną i wiać z kasą
ESP32-S3 jest mikrokontrolerem uruchamiającym mały model językowy AI generujący tekst, a głównym wyzwaniem było zmieszczenie 28,9 miliona parametrów w ograniczonej pamięci. Projekt wykorzystuje 512KB SRAM, 8MB PSRAM i 16MB flash; model zajmuje 14,9MB, a około 25 milionów parametrów znajduje się we flash. Gęsty rdzeń modelu obejmujący 559K parametrów umieszczono w najszybszym SRAM, głowę wyjściową skanowaną przy każdym tokenie przeniesiono do PSRAM, natomiast główną masę parametrów pozostawiono w pamięci flash. Zastosowano technikę Per-Layer Embeddings pochodzącą z modelu Google Gemma 3n. Podczas generowania odczyt z flash wynosi około 450 bajtów na token i trwa 0,12 ms na token, czyli około 0,7% obciążenia pamięci. Osiągnięto szybkość 9,88 tokenów na sekundę. Dyskusja wyjaśnia też, że token jest fragmentem tekstu, a parametry są liczbami określającymi reakcje modelu; omawiane są tokenizacja, słowniki BPE, prawdopodobieństwo kolejnych tokenów i różnica między LLM a prostym łańcuchem Markowa. Projekt pozostaje przede wszystkim demonstracją możliwości uruchamiania generowania tekstu bezpośrednio na ESP32-S3. Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.