Tutorial Menjalankan LLM 28.9M Parameter di Microcontroller ESP32-S3
AW
Axel W

Dipublikasikan 26 Juli 2026

Tutorial Menjalankan LLM 28.9M Parameter di Microcontroller ESP32-S3

Sebuah proyek open source baru-baru ini menarik perhatian komunitas developer: menjalankan language model dengan 28.9 juta parameter di atas microcontroller ESP32-S3 yang harganya sekitar $8. Proyek ini, yang dipublikasikan oleh slvDev di GitHub, membuktikan bahwa edge AI tidak harus mahal atau membutuhkan GPU besar. Artikel ini menjelaskan cara kerja teknisnya dan langkah-langkah praktis untuk mencobanya sendiri.

Mengapa Proyek Ini Menjadi Perhatian Komunitas

Sebelumnya, language model terbesar yang berhasil dijalankan di chip semacam ini hanya punya 260 ribu parameter. Model baru ini memiliki sekitar 100 kali lebih banyak parameter, namun tetap bisa berjalan di hardware yang sama. Kecepatan yang dicapai adalah sekitar 9.5 token per detik secara end-to-end, yang cukup mengesankan untuk perangkat sekecil ini.

Berikut spesifikasi teknis utamanya dalam bentuk ringkasan:

  • Parameter: 28.9 juta tersimpan, dengan 25 juta di antaranya berada dalam flash lookup table

  • Chip: ESP32-S3, harga sekitar $8, dengan 512KB SRAM, 8MB PSRAM, dan 16MB flash

  • Kecepatan: sekitar 9.5 tok/s end to end (9.7 tok/s untuk pure compute)

  • Konektivitas: tidak membutuhkan koneksi internet, semua inference berjalan 100% di perangkat

  • Ukuran model: 14.9MB dengan kuantisasi 4-bit

Tantangan Utama: Memori Cepat yang Sangat Terbatas

Microcontroller memiliki karakteristik memori yang sangat berbeda dengan laptop atau server. ESP32-S3 hanya menyediakan 512KB SRAM sebagai memori cepat. Biasanya, seluruh parameter model harus bisa diakses dari memori cepat ini, yang secara drastis membatasi ukuran model menjadi sangat kecil. Itulah sebabnya model sebelumnya hanya punya 260 ribu parameter.

Solusi yang ditemukan slvDev adalah berhenti menaruh seluruh model di memori cepat sama sekali. Sebagian besar parameter language model duduk di dalam embedding table, yang secara fundamental hanya dibaca oleh model, bukan dihitung secara intensif. Dengan membiarkan 25 juta baris tabel ini tinggal di flash yang lambat, dan hanya menarik beberapa baris yang dibutuhkan setiap token (sekitar 450 byte), bagian kecil yang melakukan pekerjaan aktif bisa tetap berada di SRAM cepat.

Model besar tersebut kemudian hampir tidak menambah biaya runtime yang signifikan, karena kamu tidak pernah memuat sebagian besar parameter. Model hanya duduk di flash dan disampling sedikit demi sedikit sesuai kebutuhan token saat ini. Ide ini berasal dari Per-Layer Embeddings yang diperkenalkan Google pada model Gemma 3n dan Gemma 4. Tujuan aslinya adalah mengoptimalkan memori pada ponsel, tapi slvDev membawanya ke level microcontroller. Sejauh yang penulis ketahui, belum ada yang mencoba teknik ini di chip sekecil ESP32-S3.

Secara visual, tata letak memori terlihat seperti hierarki berikut:

SRAM  (fast, tiny)     the "thinking" core, digunakan pada setiap token
PSRAM (medium)         output head dan working memory
FLASH (huge, slow)     tabel 25M-param, sekitar 6 baris dibaca per token (~450 B)

Kemampuan dan Batasan Model yang Perlu Dipahami

Model ini dilatih pada dataset TinyStories, sehingga output utamanya adalah cerita pendek dan sederhana yang umumnya tetap koheren dalam satu paragraf. Namun model ini tidak bisa menjawab pertanyaan faktual, mengikuti instruksi kompleks, menulis kode program, atau mengetahui pengetahuan umum. Batasan ini berasal dari bagian kecil model yang melakukan reasoning sebenarnya, dan trik memori flash tidak mengubah kapasitas reasoning tersebut.

Yang menarik di sini justru arsitektur dan teknik optimasi: bagaimana memasukkan model besar ke chip kecil dengan sumber daya terbatas, bukan apa yang bisa dikatakan oleh model 28.9 juta parameter. Jika kamu mencari asisten AI pintar yang bisa coding, model ini bukan pilihan. Tapi jika kamu ingin memahami teknik kuantisasi, memory mapping, dan compression untuk edge AI, proyek ini adalah referensi berharga yang jarang ditemukan.

Persiapan Hardware dan Lingkungan Development

Sebelum mulai, pastikan kamu memiliki komponen berikut:

  • Board development ESP32-S3 dengan 8MB PSRAM dan 16MB flash

  • Layar kecil untuk menampilkan output teks (opsional, tapi direkomendasikan untuk melihat hasil langsung)

  • Kabel USB untuk flashing dan power

  • Komputer dengan ESP-IDF toolchain terinstall

Perlu diperhatikan bahwa tidak semua board ESP32-S3 memiliki konfigurasi memori yang sama. Beberapa board murah hanya punya 4MB PSRAM, yang tidak cukup untuk proyek ini. Verifikasi spesifikasi board sebelum membeli.

Langkah-langkah Menjalankan Proyek

Langkah 1: Clone Repository dan Persiapan

git clone https://github.com/slvDev/esp32-ai.git
cd esp32-ai

Repository terdiri dari beberapa folder utama. Folder firmware/esp32_llm/ berisi kode yang akan di-flash ke chip. Folder src/ berisi kode training dan eksperimen. File RESULTS.md berisi hasil pengukuran detail on-chip yang sangat berguna untuk memahami batasan performa.

Langkah 2: Setup ESP-IDF

Pastikan ESP-IDF versi terbaru sudah terinstall dan environment variables sudah diset. Jalankan idf.py set-target esp32s3 untuk mengkonfigurasi project untuk target chip yang benar. Konfigurasi sdkconfig perlu disesuaikan untuk mengaktifkan PSRAM dan mengatur partition table yang cukup besar untuk menampung model 14.9MB.

Langkah 3: Build dan Flash

Ikuti instruksi lengkap di firmware/esp32_llm/README.md untuk mengompilasi dan mem-flash firmware. Proses ini melibatkan konfigurasi project, build dengan idf.py build, dan flashing via idf.py flash melalui koneksi USB.

Langkah 4: Verifikasi Output

Setelah flashing berhasil, board akan mulai generate teks secara otomatis. Output ditulis ke layar kecil yang terhubung via SPI. Kecepatan sekitar 9.5 token per detik membuat pembacaan nyaman, meskipun tidak secepat model cloud-based.

Langkah 5: Eksperimen dengan Training (Opsional)

Jika kamu ingin melatih model sendiri dengan dataset berbeda, kode training tersedia di folder src/. Dataset TinyStories yang digunakan aslinya tersedia di arXiv:2305.07759. Kamu bisa bereksperimen dengan arsitektur, ukuran model, atau dataset untuk melihat tradeoff antara ukuran dan kualitas output.

Kredit, Inspirasi, dan Transparansi

Proyek ini terinspirasi langsung oleh llama2.c karya Andrej Karpathy, yang membuktikan bahwa tiny language model bisa dilatih dan dijalankan dalam plain C tanpa framework besar. slvDev juga memilih untuk meninggalkan history messy di repository dengan sengaja, termasuk bug dalam parameter accounting yang pernah membesar-besarkan angka early result, serta koreksi yang menyusul. Komit history dan RESULTS.md menunjukkan di mana angka-angka bergerak dan mengapa, yang merupakan contoh transparansi ilmiah yang baik dalam pengembangan open source.

Sumber: slvDev/esp32-ai (GitHub)