Het ESP32s3-LLM-Cluster is een technisch project dat een 0,4B tot 0,5B Large Language Model (LLM) draait op een cluster van zeven ESP32-S3 microcontrollers. Om dit mogelijk te maken op hardware met beperkte middelen, maakt het project gebruik van 1,58-bit (BitNet) ternaire kwantisatie.
Technische architectuur
Het systeem werkt via een pipeline-inference engine:
Master Node: Verantwoordelijk voor de BPE tokenizer, INT4 token embeddings en de uiteindelijke greedy sampling (LM Head).
Compute Nodes (6x): Elke node verwerkt een specifiek deel van de Transformer-blokken (Attention en MLP). De data stroomt sequentieel van node naar node.
Communicatie: De nodes zijn onderling verbonden via een high-speed SPI daisy-chain.
Optimalisaties en Tooling
Het project bevat diverse optimalisaties, waaronder assembly-geoptimaliseerde MAC-operaties voor de 1,58-bit lagen en het gebruik van PSRAM voor de KV Cache. Daarnaast wordt een suite van Python-tools meegeleverd voor het voorbereiden van het model, zoals vocabulaire-snoei, Quantization-Aware Training (QAT) en het verpakken van model-chunks voor flashen op de hardware.
ESP32s3-LLM-Cluster
Architectuur
Dit project draait een gesliced 0,5B LLM over een cluster van 7 ESP32-S3's. Eén node fungeert als master en de overige nodes fungeren als compute nodes. De master node voert de tokenizer en embedding uit, terwijl de attention layer en MLP op de compute nodes draaien. De master en de nodes communiceren via een high-speed SPI Daisy-Chain.
Dataflow Diagram
MASTER NODE
[ Prompt ] → BPE Tokenizer
Token Embedding (INT4, ~14MB in Flash)
(SPI CH A - Verzenden naar Node 1)
Output: Hidden State Vector (FP32) $\downarrow$
COMPUTE NODE 1
(SPI CH B - Ontvangen van Master)
Layer 0 tot 3 (4x Transformer Blocks):
RMSNorm (FP16 geschaald naar FP32)
1,58-bit Attention (Q, K, V, O proj) + RoPE
KV Cache (PSRAM)
1,58-bit MLP (Gate, Up, Down proj)
(SPI CH A - Verzenden naar Node 2) $\downarrow$
... (Nodes 2 tot 5) $\downarrow$
COMPUTE NODE 6
(SPI CH B - Ontvangen van Node 5)
Layer 20 tot 23 (4x Transformer Blocks):
Zelfde 1,58-bit architectuur
(SPI CH A - Terugverzenden naar Master) $\downarrow$
MASTER NODE
(SPI CH B - Ontvangen van Node 6)
Final RMS Norm (FP16, 64KB in 'fnorm' partitie)
LM Head (gekoppeld aan INT4 Embeddings)
Greedy Sampling
[ Output ] $\leftarrow$ Next Token ID
Aan de slag
Raadpleeg de workflow-gids (workflow.md) om met het project te beginnen.
Projectstructuur
README.md: Projectdocumentatie.
workflow.md: Stap-voor-stap gids voor flashen, modelvoorbereiding en bedrading.
.gitignore: Git-negeerregels voor build-bestanden en binaries.
docs/images/: Architectuurdiagrammen en hardwarefoto's.
master_board/: Firmware voor de Master Node (ESP-IDF).
bit4_embedding.py: INT4 weight packer voor embeddings.
packtokenizerbin.py: Serialiseert tokenizer-regels naar een ESP32 .bin.
packmodelbin.py: Verpakt 1,58-bit layer-chunks voor fysieke uitlijning.
lookmodelstructure.py: Debug-tool voor het inspecteren van .safetensors.
flash_*.bat: Multi-threaded scripts voor snel flashen.
Licentie
Dit project is gelicenseerd onder de MIT-licentie - zie het LICENSE-bestand voor details.
Erkenningen
Inspiratie, gerelateerd werk en referenties:
ESP-32-s3-Story-maker-LLM: Inspiratie voor single-node gekwantiseerde LLM-implementatie op ESP32-S3.
esp32s3-distributed-ai: Inspiratie voor multi-node gedistribueerde AI-architectuur op microcontrollers.
BitNet: Concept en architectuur van 1,58-bit ternaire kwantisatie.
Een gedistribueerde pipeline-inference engine op meerdere ESP32-S3's die een 1,58-bit (BitNet) taalmodel draait. Het project bestaat uit een cluster van 7 nodes die een 0,4B LLM uitvoeren via 1,58-bit (BitNet) ternaire kwantisatie over een SPI daisy-chain.
ESP32s3-LLM-Cluster
Architectuur
Dit project draait een gesliced 0,5B LLM over een cluster van 7 ESP32-S3's. Eén node fungeert als master en de overige nodes fungeren als compute nodes. De master node voert de tokenizer en embedding uit, terwijl de attention layer en MLP op de compute nodes draaien. De master en de nodes communiceren via een high-speed SPI Daisy-Chain.
Dataflow Diagram
MASTER NODE
[ Prompt ] → BPE Tokenizer
Token Embedding (INT4, ~14MB in Flash)
(SPI CH A - Verzenden naar Node 1)
Output: Hidden State Vector (FP32) $\downarrow$
COMPUTE NODE 1
(SPI CH B - Ontvangen van Master)
Layer 0 tot 3 (4x Transformer Blocks):
RMSNorm (FP16 geschaald naar FP32)
1,58-bit Attention (Q, K, V, O proj) + RoPE
KV Cache (PSRAM)
1,58-bit MLP (Gate, Up, Down proj)
(SPI CH A - Verzenden naar Node 2) $\downarrow$
... (Nodes 2 tot 5) $\downarrow$
COMPUTE NODE 6
(SPI CH B - Ontvangen van Node 5)
Layer 20 tot 23 (4x Transformer Blocks):
Zelfde 1,58-bit architectuur
(SPI CH A - Terugverzenden naar Master) $\downarrow$
MASTER NODE
(SPI CH B - Ontvangen van Node 6)
Final RMS Norm (FP16, 64KB in 'fnorm' partitie)
LM Head (gekoppeld aan INT4 Embeddings)
Greedy Sampling
[ Output ] $\leftarrow$ Next Token ID
Aan de slag
Raadpleeg de workflow-gids (workflow.md) om met het project te beginnen.
Projectstructuur
README.md: Projectdocumentatie.
workflow.md: Stap-voor-stap gids voor flashen, modelvoorbereiding en bedrading.
.gitignore: Git-negeerregels voor build-bestanden en binaries.
docs/images/: Architectuurdiagrammen en hardwarefoto's.
master_board/: Firmware voor de Master Node (ESP-IDF).
bit4_embedding.py: INT4 weight packer voor embeddings.
packtokenizerbin.py: Serialiseert tokenizer-regels naar een ESP32 .bin.
packmodelbin.py: Verpakt 1,58-bit layer-chunks voor fysieke uitlijning.
lookmodelstructure.py: Debug-tool voor het inspecteren van .safetensors.
flash_*.bat: Multi-threaded scripts voor snel flashen.
Licentie
Dit project is gelicenseerd onder de MIT-licentie - zie het LICENSE-bestand voor details.
Erkenningen
Inspiratie, gerelateerd werk en referenties:
ESP-32-s3-Story-maker-LLM: Inspiratie voor single-node gekwantiseerde LLM-implementatie op ESP32-S3.
esp32s3-distributed-ai: Inspiratie voor multi-node gedistribueerde AI-architectuur op microcontrollers.
BitNet: Concept en architectuur van 1,58-bit ternaire kwantisatie.
Zichtbare categorieën
Kies welke categorieën je wilt zien.
Over deze site
Waarom Tech-update?
Tech-update is ontstaan omdat ik merkte dat ik dagelijks veel verschillende websites moest bezoeken om interessant technieuws te vinden. Dat kon efficiënter.
Hoe werkt het?
Meerdere keren per etmaal gaat mijn zelfgebouwde AI-agent op zoek naar interessante artikelen op blogs en nieuwssites.
Vindt hij iets relevants, dan wordt het artikel naar het Nederlands vertaald en op Tech-Update geplaatst.
Van ieder artikel maakt de AI ook een korte samenvatting. Zo kun je snel bepalen of het de moeite waard is om het volledige artikel te lezen.
Bij ieder artikel staat altijd een link naar de oorspronkelijke bron (vaak een Engelstalige website).
Artikelen kun je bewaren als favoriet, vastzetten in de zijbalk of terugvinden via de zoekfunctie.
In de instellingen (tandwielikoon rechtsboven) geef je aan in welk soort nieuws je geïnteresseert bent.