Bayangkan bisa menjalankan model bahasa besar (LLM) yang kuat pada perangkat sekecil mikrokontroler. Ini bukan lagi fiksi ilmiah. Seorang pengembang bernama Slava S. telah membuat terobosan signifikan dengan running LLM on ESP32 Microcontroller, menghadirkan model 28.9 juta parameter ke sebuah chip seharga sekitar $8. Ini benar-benar lompatan jauh dibandingkan model LLM sebelumnya yang pernah dijalankan di perangkat serupa.
LLM di Perangkat Sekecil Mikrokontroler
Model ini berjalan sepenuhnya secara on-device di ESP32-S3, tanpa perlu terhubung ke server eksternal. Hasilnya, teks yang dihasilkan akan ditampilkan langsung ke layar kecil yang terhubung ke chip, dengan kecepatan sekitar 9 hingga 9.5 token per detik. Angka ini luar biasa, mengingat model LLM sebelumnya yang berjalan di chip serupa hanya memiliki 260 ribu parameter. Slava S. berhasil menempatkan model seratus kali lebih besar dari itu.
Bagaimana Model Sebesar Ini Bisa Muat?
Kunci di balik pencapaian ini adalah ide Per-Layer Embeddings dari model Google Gemma, tepatnya Gemma 3n dan Gemma 4. Mikrokontroler seperti ESP32-S3 memiliki memori cepat yang sangat terbatas, misalnya 512KB SRAM. Biasanya, seluruh model harus bisa diakses dari memori cepat ini, yang secara otomatis membatasi ukuran model secara drastis.
Namun, sebagian besar parameter LLM berada dalam tabel embedding, yang sifatnya lebih banyak dibaca daripada dihitung. Slava S. memanfaatkan ini dengan menyimpan 25 juta baris tabel embedding di flash yang lebih lambat namun lebih besar. Saat model membutuhkan token baru, hanya beberapa baris data, sekitar 450 byte atau sekitar 6 baris, yang ditarik dari flash ke memori cepat. Bagian kecil yang melakukan 'pemikiran' atau komputasi inti tetap berada di memori cepat.
Dengan cara ini, sebagian besar model tidak pernah dimuat penuh ke memori cepat. Ia hanya 'dicicipi' sedikit demi sedikit sesuai kebutuhan. Ini adalah inovasi yang belum pernah dicoba pada chip sekecil ini sebelumnya, mengadaptasi strategi yang biasanya digunakan untuk ponsel atau GPU ke lingkungan mikrokontroler.
Detail Teknis Proyek
Berikut adalah rincian teknis dari proyek mengagumkan ini:
| Fitur | Detail |
|---|---|
| Parameter Model | 28.9 juta (25 juta di tabel flash lookup) |
| Chip | ESP32-S3 |
| Harga Chip | Sekitar $8 |
| Memori Chip | 512KB SRAM, 8MB PSRAM, 16MB flash |
| Kecepatan | Sekitar 9.5 tok/s (end-to-end), 9.7 tok/s (pure compute) |
| Konektivitas | Tidak ada, semua berjalan di perangkat |
| Ukuran Model | 14.9MB pada 4-bit |
| Metode Kunci | Per-Layer Embeddings (Google Gemma) |
Distribusi memori pada ESP32-S3 bekerja sebagai berikut:
- SRAM (cepat, kecil): Inti 'pemikiran' model, digunakan pada setiap token.
- PSRAM (menengah): Output head dan memori kerja.
- FLASH (besar, lambat): Tabel parameter 25 juta, membaca sekitar 6 baris per token (~450 B).
Kemampuan dan Keterbatasan
Model ini dilatih menggunakan dataset TinyStories, sehingga ia mahir menulis cerita pendek dan sederhana yang koheren. Namun, penting untuk memahami keterbatasannya. Model ini tidak dirancang untuk menjawab pertanyaan, mengikuti instruksi, menulis kode, atau mengetahui fakta. Keterbatasan ini berasal dari bagian kecil model yang melakukan penalaran, dan trik memori yang digunakan tidak mengubah kemampuan tersebut. Fokus utama proyek ini adalah arsitekturnya, yaitu bagaimana model sebesar ini bisa masuk ke chip sekecil itu, bukan kemampuan percakapannya.
Pelajari dan Jalankan Sendiri
Bagi Anda yang tertarik untuk mencoba atau mempelajarinya lebih lanjut, proyek ini bersifat open source di bawah lisensi MIT. Anda bisa menemukan semua yang dibutuhkan:
- Firmware, panduan kabel, dan langkah flashing ada di
firmware/esp32_llm/README.md. - Kode pelatihan, ablation, dan kuantisasi ada di
src/danexperiments/. - Metode lengkap, ablation, dan pengukuran on-chip dijelaskan di
RESULTS.md.
Pengembang juga secara transparan menyimpan riwayat proyek, termasuk perbaikan bug dalam perhitungan parameter yang sempat memengaruhi angka awal. Semua detail perubahan tercatat di commit history dan RESULTS.md.
Kredit
Proyek ini tidak terlepas dari beberapa kontribusi penting:
- TinyStories: Dataset cerita sintetis pendek dan sederhana yang memungkinkan model kecil belajar menulis dengan koheren, dari Ronen Eldan dan Yuanzhi Li (Microsoft Research, arXiv:2305.07759).
- Per-Layer Embeddings: Desain dari model Google Gemma yang memungkinkan model besar muat di chip kecil.
- llama2.c Andrej Karpathy: Inspirasi utama bagi banyak orang, termasuk Slava S., untuk melatih dan menjalankan model bahasa kecil dalam C murni.
Referensi
- https://blog.adafruit.com/2026/07/29/running-a-28-9m-parameter-llm-on-an-8-microcontroller/
- https://github.com/slvDev/esp32-ai
