Giới thiệu
Repo esp32-ai trình diễn một language model 28,9 triệu tham số chạy trực tiếp trên ESP32-S3, một microcontroller giá khoảng 8 USD. Model sinh text trên chip, không gửi dữ liệu lên server, và ghi từng từ ra màn hình nhỏ nối với chip với tốc độ khoảng 9 token/giây.
Điểm chính không nằm ở chất lượng văn bản. Model được train trên TinyStories nên chỉ viết được truyện ngắn đơn giản. Thành tựu nằm ở cách nhét một model lớn hơn trước rất nhiều vào phần cứng cực nhỏ.
Con số chính
- Parameters: 28,9M stored parameters, trong đó 25M nằm trong flash lookup table.
- Chip: ESP32-S3, khoảng 8 USD, có 512KB SRAM, 8MB PSRAM và 16MB flash.
- Tốc độ: khoảng 9,5 token/giây end-to-end, 9,7 token/giây nếu chỉ tính compute.
- Kết nối: không cần mạng, mọi thứ chạy trên thiết bị.
- Kích thước model: 14,9MB ở 4-bit.
Model trước đây chạy trên loại chip tương tự chỉ có khoảng 260 nghìn tham số. Bản này lớn hơn khoảng 100 lần nhờ đổi cách đặt weights trong bộ nhớ.
Vì sao khó
Microcontroller có rất ít fast memory. ESP32-S3 chỉ có 512KB SRAM, trong khi mô hình ngôn ngữ bình thường cần truy cập một lượng lớn tham số thường xuyên. Nếu phải giữ toàn bộ model trong memory nhanh, bạn bị kẹt với model cực nhỏ.
Repo này dùng ý tưởng Per-Layer Embeddings từ các model Gemma của Google. Phần lớn tham số của model nằm trong embedding table. Thay vì đưa toàn bộ table vào fast memory, hệ thống để 25M tham số trong flash chậm hơn và chỉ đọc vài row cần thiết cho mỗi token, khoảng 450 byte. Phần “core” xử lý thường xuyên nằm trong SRAM, còn output head và working memory dùng PSRAM.
Sơ đồ bộ nhớ có thể hiểu đơn giản như sau:
SRAM (nhanh, rất nhỏ) -> core chạy mỗi token
PSRAM (trung bình) -> output head và working memory
FLASH (lớn, chậm) -> table 25M tham số, đọc vài row mỗi token
Model làm được gì
Model viết được các câu chuyện ngắn, đơn giản và phần lớn vẫn giữ mạch. Nó không phải assistant đa năng: không trả lời câu hỏi tốt, không follow instruction, không viết code, không có kiến thức sự kiện.
Giới hạn này đến từ phần reasoning core rất nhỏ. Memory trick giúp chứa nhiều tham số hơn, nhưng không biến microcontroller thành GPU. Giá trị của demo là kiến trúc: chứng minh một cách layout model có thể đưa LLM nhỏ ra thiết bị offline cực rẻ.
Chạy thử
Firmware, wiring và bước flash nằm trong firmware/esp32_llm/README.md của repo. Code training, ablation và quantization nằm trong src/ và experiments/. Phần đo đạc on-chip và giải thích phương pháp nằm trong RESULTS.md.
Nếu bạn làm embedded hoặc edge AI, repo này đáng đọc theo hướng kỹ thuật hệ thống: cách chọn phần nào ở SRAM, PSRAM, flash; cách quantize; và cách đo tốc độ thật trên thiết bị. Đừng kỳ vọng chatbot, hãy nhìn nó như một prototype cho model offline siêu nhỏ.