logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Model językowy AI uruchomiony na ESP32-S3 - 28.9 milionów parametrów

p.kaczmarek2 04 Sie 2026 11:33 2118 24

TL;DR LABEL_AI_GENERATED

  • Port modelu językowego generującego tekst działa lokalnie na ESP32-S3 N16R8, mieszcząc się w 16 MB flash i 8 MB PSRAM.
  • Technika Per-Layer Embeddings rozdziela 559 tys. parametrów rdzenia do SRAM, głowę wyjściową do PSRAM, a 25 mln parametrów do flash.
  • Model o rozmiarze 14,9 MB generuje 9,88 tokena na sekundę, a odczyt parametrów z flash zajmuje tylko 0,12 ms na token.
  • Instalacja wymaga płytki ESP32-S3 N16R8 za około 8 dolarów oraz uruchomienia skryptów fetch_model.sh i deploy.sh.
  • Model tworzy obecnie tylko proste opowiadania, a niewykorzystane instrukcje SIMD ESP32-S3 pozostawiają przestrzeń na dalsze przyspieszenie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
  • Model językowy AI uruchomiony na ESP32-S3 - 28.9 milionów parametrów
    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?

    Źródła:
    Repozytorium projektu: https://github.com/slvDev/esp32-ai
    Post autora: https://www.reddit.com/r/arduino/comments/1v4...89m_llm_running_on_a_esp32s3_9_toks_no_cloud/

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14804 postów o ocenie 12972, pomógł 659 razy. Jest z nami od 2014 roku.
  • #2 21950121
    gulson
    Administrator Systemowy
    Posty: 29579
    Pomógł: 150
    Ocena: 6146
    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.
  • #3 21950639
    lukiiiii
    Poziom 29  
    Posty: 1473
    Pomógł: 82
    Ocena: 393
    Zbliżają się czasy, że o sztuce, kulturze i geopolityce pogadamy z klawiszem od spłuczki podczas codziennych czynności :P
  • #4 21950642
    mczapski
    Poziom 40  
    Posty: 6253
    Pomógł: 468
    Ocena: 1661
    lukiiiii napisał:
    Zbliżają się czasy, że o sztuce, kulturze i geopolityce pogadamy z klawiszem od spłuczki podczas codziennych czynności

    Jeśli odpowiada taka forma konwersacji czyli zrównanie się z tym klawiszem to czyń to.
  • #5 21950649
    gregor124
    Poziom 29  
    Posty: 1722
    Pomógł: 102
    Ocena: 891
    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.
    Pomogłem? Kup mi kawę.
  • #6 21951342
    gbksiazczak
    Poziom 31  
    Posty: 1522
    Pomógł: 166
    Ocena: 327
    >>21949951
    Czy Autor mógłby mniej żargonowym stylem opisać na czym polega to osiągnięcie? Wygląda ciekawie ale takie
    p.kaczmarek2 napisał:
    port modelu AI generującego tekst na mikrokontroler

    p.kaczmarek2 napisał:
    obsługuje gęsty rdzeń modelu (559K parametrów)

    p.kaczmarek2 napisał:
    trafnie czyta rzadkie wiersze zamiast polegać na ogromnym rdzeniu.



    O jakie parametry chodzi? Co tu oznacza token? Itd...
  • #7 21951343
    gulson
    Administrator Systemowy
    Posty: 29579
    Pomógł: 150
    Ocena: 6146
    @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.kaczmarek2 napisał:
    obsługuje gęsty rdzeń modelu (559K parametrów)

    p.kaczmarek2 napisał:
    trafnie czyta rzadkie wiersze zamiast polegać na ogromnym rdzeniu.
  • #8 21951345
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14804
    Pomógł: 659
    Ocena: 12972
    @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?
    Pomogłem? Kup mi kawę.
  • #9 21951346
    ElektrodaBot
    AI od OpenAI ChatGPT4
    Posty: 8897
    Pomógł: 365
    Ocena: 956
    LABEL_AI_GENERATED
    gulson napisał:
    @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 modeluLiczba parametrówCharakter
    Miniaturowy model z projektuok. 25 mlndemonstrator na ESP32-S3
    Małe modele lokalne na PC/telefonsetki mln do kilku mldproste rozmowy, klasyfikacja, asystenci
    Duże modele serwerowedziesiątki/setki mldzaawansowana 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:

    - sterowania przekaźnikami,
    - obsługi Wi-Fi,
    - odczytu czujników,
    - sterowania wyświetlaczem,
    - prostych urządzeń IoT,
    - automatyki domowej.

    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ównanieCechyCo tam trafiło
    SRAMblat roboczymała, ale szybkanajważniejszy rdzeń modelu
    PSRAMszuflada pod stołemwiększa, wolniejszaczęść danych roboczych i głowa wyjściowa
    Flashregał w piwnicyduża, najwolniejsza, nieulotnawię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:

    TokenNumer tokenuWiersz 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

    CytatPo 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.
  • #10 21951347
    gulson
    Administrator Systemowy
    Posty: 29579
    Pomógł: 150
    Ocena: 6146
    p.kaczmarek2 napisał:
    co myślisz o takim temacie, może by go zrobić a potem dać jako "przypięty" tutaj w dziale?

    Nie wiem. Później przyjdą boty i ukradną poradniki i przedstawią jako swoje. O myśleniu sam bym poczytał.
  • #11 21951350
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14804
    Pomógł: 659
    Ocena: 12972
    ElektrodaBot napisał:

    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.

    Wg. tokenizera od openAI:
    https://platform.openai.com/tokenizer
    podział jest nieco gęstszy:
    Model językowy AI uruchomiony na ESP32-S3 - 28.9 milionów parametrów
    Pomogłem? Kup mi kawę.
  • #12 21951359
    gbksiazczak
    Poziom 31  
    Posty: 1522
    Pomógł: 166
    Ocena: 327
    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ą.
  • #13 21951380
    gregor124
    Poziom 29  
    Posty: 1722
    Pomógł: 102
    Ocena: 891
    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.
    Pomogłem? Kup mi kawę.
  • #14 21951512
    gbksiazczak
    Poziom 31  
    Posty: 1522
    Pomógł: 166
    Ocena: 327
    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.
  • #15 21951522
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38916
    Pomógł: 3177
    Ocena: 6564
    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.
  • #16 21951530
    gregor124
    Poziom 29  
    Posty: 1722
    Pomógł: 102
    Ocena: 891
    >>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.
    Pomogłem? Kup mi kawę.
  • #17 21951535
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14804
    Pomógł: 659
    Ocena: 12972
    tzok napisał:
    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).

    Zazwyczaj nie, ale jednocześnie LLMy chyba do tej pory mają problem z policzeniem literek w słowach, przykładowo w tym słynnym "strawberry".
    Model językowy AI uruchomiony na ESP32-S3 - 28.9 milionów parametrów
    Model językowy AI uruchomiony na ESP32-S3 - 28.9 milionów parametrów
    Sprzed roku:
    https://www.linkedin.com/posts/mehdidjabri_al...this-simple-activity-7234086481110220800-r0Hi
    Pomogłem? Kup mi kawę.
  • #18 21951563
    gbksiazczak
    Poziom 31  
    Posty: 1522
    Pomógł: 166
    Ocena: 327
    gregor124 napisał:
    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.
  • #19 21951595
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38916
    Pomógł: 3177
    Ocena: 6564
    Modele językowe nie analizują sensu, tylko prawdopodobieństwo. Istotne są jedynie korelacje między tokenami.
  • #20 21951603
    gbksiazczak
    Poziom 31  
    Posty: 1522
    Pomógł: 166
    Ocena: 327
    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żą?
  • #21 21951850
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38916
    Pomógł: 3177
    Ocena: 6564
    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.
  • #22 21951968
    gregor124
    Poziom 29  
    Posty: 1722
    Pomógł: 102
    Ocena: 891
    Jeśli chodzi o tokenizację, to wygląda to mniej więcej tak:

    Model językowy AI uruchomiony na ESP32-S3 - 28.9 milionów parametrów

    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.
    Model językowy AI uruchomiony na ESP32-S3 - 28.9 milionów parametrów .
    Pomogłem? Kup mi kawę.
  • #24 21953405
    gregor124
    Poziom 29  
    Posty: 1722
    Pomógł: 102
    Ocena: 891
    p.kaczmarek2 napisał:
    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ą ;)
    Pomogłem? Kup mi kawę.

Podsumowanie tematu

LABEL_AI_GENERATED
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.
REKLAMA