- ESP32-S3 üzerinde sunucu bağlantısı olmadan 28,9 milyon parametreli bir dil modeli çalıştırılıyor ve küçük bir ekrana yaklaşık saniyede 9 token hızında metin yazdırılıyor
- Toplam parametrelerin 25 milyonu yavaş flash üzerinde tutuluyor; her token için yalnızca gereken yaklaşık 6 satırı, yani 450 baytı okuyan Per-Layer Embeddings yapısı kullanılıyor
- Model 4 bit ölçekte 14,9 MB; 512 KB SRAM’e her token’da kullanılan hesaplama çekirdeği, 8 MB PSRAM’e çıktı başlığı ve çalışma belleği, 16 MB flash’a ise büyük embedding tablosu yerleştiriliyor
- TinyStories ile eğitildiği için kısa ve basit hikâyeleri genelde tutarlı biçimde üretebiliyor; ancak soru-cevap, komut yürütme, kod yazma veya olgusal bilgi için uygun değil
- Daha önce benzer bir çipte çalıştırılan 260 bin parametreli modele göre yaklaşık 100 kat daha fazla parametre barındırıyor; asıl nokta üretim kalitesinden çok büyük bir modeli küçük bir çipe sığdıran bellek yapısı
Donanım ve çalışma performansı
- Yaklaşık 8 dolar olan tek bir ESP32-S3 üzerinde tüm işlem yapılıyor; sunucuya veri gönderilmiyor
- 512 KB SRAM, 8 MB PSRAM ve 16 MB flash kullanılıyor
- Genel hız yaklaşık 9,5 tok/s, saf hesaplama hızı yaklaşık 9,7 tok/s
- 4 bit model boyutu 14,9 MB
- Toplam 28,9 milyon parametrenin 25 milyonu flash arama tablosunda saklanıyor
Modeli küçük belleğe sığdırma yöntemi
- Normalde modelin tamamının hızlı bellekten erişilebilir olması gerekir; ancak ESP32-S3’ün SRAM’i yalnızca 512 KB olduğu için sadece çok küçük modeller sığabilir
- Parametrelerin çoğunun hesaplama hedefi değil, embedding tablosunda olmasından yararlanılarak tablo flash üzerinde bırakılıyor
- Her token için yalnızca gereken yaklaşık 6 satır, yaklaşık 450 bayt okunuyor
- Asıl hesaplamayı yapan küçük bölüm hızlı bellekte tutuluyor
- Modelin büyük kısmı çalışma sırasında yüklenmiyor; yalnızca flash’tan gereken kısımlar seçiliyor
- Bellek rolleri şöyle ayrılıyor
- SRAM: Her token’da kullanılan hesaplama çekirdeği
- PSRAM: Çıktı başlığı ve çalışma belleği
- Flash: 25 milyon parametreli tablo
Per-Layer Embeddings uygulaması
- Google’ın Gemma 3n ve Gemma 4’te kullandığı Per-Layer Embeddings, telefon veya GPU yerine mikrodenetleyici bellek yapısına uygulanıyor
- Proje geliştiricisinin doğruladığı kadarıyla, bu yöntemin bu kadar küçük bir çipe uygulandığı bir önceki örnek yok
Modelin yapabildikleri ve sınırları
- TinyStories içindeki kısa sentetik hikâyelerle eğitildiği için basit hikâyeler üretebiliyor ve genelde tutarlılığı koruyor
- Soru-cevap, komut yürütme, kod yazma veya olgusal bilgi sağlama yapamıyor
- Bu sınır, çıkarımı yapan küçük çekirdekten kaynaklanıyor; bellek yerleşimi tekniği çıkarım yeteneğinin kendisini artırmıyor
Kod ve deney materyalleri
firmware/esp32_llm/README.mdiçinde firmware, kablolama ve flashing prosedürleri yer alıyorsrc/veexperiments/içinde eğitim, ablation deneyleri ve kuantizasyon kodu bulunuyorRESULTS.mdiçinde tüm yöntem, ablation deneyleri ve çip üstü ölçümler özetleniyor
Temel alınan projeler ve kayıtlar
- TinyStories, küçük modellerin de tutarlı yazım öğrenebilmesi için oluşturulmuş kısa sentetik hikâye veri kümesi
- Google Gemma’nın Per-Layer Embeddings yaklaşımı, büyük modelleri küçük çiplere sığdırmanın temelini oluşturuyor
- Andrej Karpathy’nin llama2.c’si, küçük dil modellerini eğitip saf C ile çalıştırma yaklaşımına ilham verdi
- Depoda, başlangıçtaki parametre sayısını şişiren hesaplama hatası ve düzeltme süreci de bırakılmış
- Commit geçmişi ve
RESULTS.mdiçinde sayıların nerede ve neden değiştiği görülebilir
- Commit geçmişi ve
1 yorum
Hacker News yorumları
Bugünlerde 5 dolarlık bir mikrodenetleyiciyle yapılabilenler şaşırtıcı. Milk-V kartları arasında Duo, 256 MB'a kadar bellek ve 1TOPS@INT8 TPU'ya sahip olup Linux bile çalıştırabildiği için 5 tane aldım
GCC ve Clang xTHeadVector'ı tamamen destekliyor; C yerleşik fonksiyonları kullanıldığında yalnızca komut satırı seçenekleriyle RVV 1.0 ile uyumlu oluyor. 8 bit öğelerle çalışan
memcpy(),memset(),memcmp(),strlen(),strcpy(),strcmp()gibi kodların önemli bir kısmı ikili düzeyde uyumlu64 MB Duo'yu aldığımda 3 dolardı; sonrasında 64 MB, 256 MB ve 512 MB modeller sırasıyla 5, 7 ve 10 dolardı, ancak bu yıl fiyatlar epey arttı: https://arace.tech/products/milk-v-duo, https://arace.tech/products/milkv-duo-s
4 KB PIC'in hâlâ en iyi seçenek olduğu kullanım alanları var, ancak çoğu durumda daha iyi bir seçenek yokmuş gibi davranmamak gerekir
Ses-metin dönüştürme modelleri de bu boyuta yaklaşıyor; bizimle konuşabilen küçük cihazların ne kadar yakın olduğunu merak ediyorum. Diş fırçasının ağız hijyeni tavsiyesi verdiği, hatta diş macunu reklamı yaptığı bir dünya gelebilir
Ama diş fırçası yapay zekası için reklam engelleyici aramak zorunda kalacağımız bir dünya istemiyorum
Katman bazlı embedding tekniğini çok akıllıca kullanmışlar. Yaklaşık 20-30 milyon parametreli pratik TTS modelleri de var; bu nedenle ağa bağlı olmayan bir ESP32 neredeyse gerçek zamanlı olarak metin okuyabilir
PSRAM, flash ve SD kartın ayrı ayrı bant genişliği yüksek değil, ama birçoğu aynı anda çalıştırılırsa kayda değer bir throughput'a ulaşılabilir. Büyük ölçekli özel donanım watt başına performansta önde olacaktır, ancak düşük başlangıç maliyeti ve kademeli ölçeklenebilirlik nedeniyle böyle bir yapı da cazip
Mikrodenetleyicilerden ziyade Raspberry Pi 4'te yerel LLM yanıtlarının 30'ar saniye sürmemesini sağlayacak gerçekçi seçenekleri merak ediyorum
Ufacık cihazlarda LLM çalıştırmak da harika, ama bundan ziyade bu ağırlıkları üreten eğitim yöntemi daha etkileyici
İyi erişim örüntüleriyle flash'tan yararlanılırsa, CPU üzerinde çok daha büyük modelleri çalıştıracak şekilde ölçeklenemez mi diye merak ediyorum
ESP32-S3 oldukça güçlü; şu anda Raspberry Pi 4 geliştirme işlerinde kullanıyorum. İki USB portundan biri OTG desteklediği için, başka bir yöntemle 100 doların üzerinde tutacak işlevler uygulanabiliyor
Şu anda tinyusb ve pico-pio-usb ile çalışıyor; daha yüksek performans umuduyla Rust portunu da deniyorum
Bu kuantize modelin doğruluğunun ne düzeyde olduğunu merak ediyorum
Bu ölçekte gösterdiği performans şaşırtıcı; başlıkta geçen biraz daha güçlü tek kart bilgisayarlarda nelerin mümkün olacağını görmek heyecan verici