← Radar

Konu: Yerel AI3 dk okuma

10 dolarlık çipte konuşma tanıma: Whistle modeli ESP32-S3'e nasıl sığdı?

Bu neden önemli?

Sesli komut için buluta bağlanmak gerekmiyor artık; bu, gizlilik ve internetsiz çalışan cihazlar demek. Proje ayrıca küçük donanımda model çalıştırmanın gerçek dersini gösteriyor: Hız çoğu zaman modelden değil, belleğe sığdırma ve doğru sayı tipinden geliyor.

Whistle nedir?

Whistle, Needle adlı minik dil modelinin de arkasındaki Cactus Compute’un 2 Ekim’de yayımladığı açık (Apache 2.0) bir konuşma tanıma modeli. Sesi yazıya çeviriyor (speech-to-text). Tek bir 16,9 MB’lık dosya, ekran kartı istemiyor ve yedi dili tanıyor: İngilizce, Almanca, Fransızca, İspanyolca, İtalyanca, Felemenkçe ve Lehçe. Türkçe yok.

Model iki parçalı. Kodlayıcı (encoder) sesi her 80 milisaniyede bir sayı dizisine çeviriyor. Kod çözücü (decoder) bu dizilerden kelimeleri tek tek üretiyor. Cactus’a göre bir Apple M4 Pro işlemcide 10 saniyelik seste ilk kelime 11 milisaniyede geliyor. Dokuz kat büyük Whisper base’te bu süre 73 milisaniye.

En ilginç özelliği kod çözücünün “merdivenli” olması. Sekiz katmanın ilk 2’si, ilk 4’ü ya da hepsi tek başına çalışacak şekilde eğitilmiş. Yani modeli yüklerken kaç katman kullanacağını seçebiliyorsun: Az katman, daha küçük ve hızlı ama biraz daha hatalı bir model.

Model çipten büyük

Better Stack ekibi Whistle’ı ESP32-S3’e taşıdı. Bu, fiyatı 10 dolar civarında olan, 16 MB flaş ve 8 MB ek belleği (PSRAM) olan bir mikrodenetleyici. Kurulum basit: Karta bir I²S mikrofon ve bir düğme bağlanıyor, kartın üstündeki renkli LED de hazır. Düğmeyi basılı tutup “make it red” ya da Fransızca bir cümle söylüyorsun, LED o renge dönüyor. Wi-Fi yok, bulut yok.

Sorun şu: Cactus’un ESP32 için bir sürümü yok, modeli çalıştıran motorun kaynak kodu da yayımlanmamış. Ekip, motoru kapalı kütüphaneyi deneyerek çözdü ve C ile sıfırdan yazdı. Her ara sonucu resmî motorunkiyle tek tek karşılaştırarak doğruladı.

Tam model kartın flaşına bile sığmıyordu. Burada merdivenli kod çözücü işe yaradı: Sadece ilk 4 katman tutulunca dosya 14,5 MB’a indi ve flaşa sığdı. Kart, sabit bir komut listesiyle eşleştirme yapmıyor. Söylediğini gerçekten yazıya döküyor, renk ve yanıp sönme bilgisini sonra küçük bir program metinden ayıklıyor.

24 saniyeden 6 saniyeye

İlk çalışan sürüm 2 saniyelik bir komutu 23,9 saniyede çözüyordu. Hızlandıran üç şey oldu:

  • 8 bitlik tam sayı matematiği. Çipin vektör birimi tek komutta 16 çarpma-toplama yapabiliyor. Whistle’ın ağırlıkları zaten 8 bitlik değerlere tam oturuyor, bu yüzden doğruluk düşmedi (360 test klibinde %78’den %80’e).
  • İki çekirdeği birden kullanmak.
  • double tuzağını bulmak. ESP32-S3’ün kayan nokta birimi sadece tek hassasiyetli (float) sayıları donanımda hesaplıyor. Koddaki tek bir double toplayıcı yazılımla taklit edildiği için her şeyi yavaşlatıyordu. Sonuç doğru çıktığından bilgisayardaki testler bunu yakalayamadı.

Videodaki sürüm yaklaşık 10 saniyeye inmişti. Deponun güncel ölçümüne göre 2 saniyelik İngilizce bir komut artık 6,3 saniye sürüyor. Sesin her 80 milisaniyesi işlendiği için uzun cümle daha uzun sürüyor.

Ne kadar doğru?

Ekip doğruluğu bilgisayarın sentetik sesleriyle ölçtü, yani gerçek insan sesleriyle sonuç farklı olabilir. İngilizce ve İspanyolca renk komutlarının yaklaşık %80’i doğru anlaşıldı, Felemenkçe zayıf kaldı. Kart burada tam modelden bile iyi sonuç verdi, çünkü yazılım çözümlemeyi renk kelimelerine doğru yönlendiriyor. Genel konuşmada 4 katmanlı sürümün kelime hata oranı %11,7.

Bir uyarı daha: Whistle, resmî motorda da, boş odanın gürültüsünü “Thank you.” diye yazıya döküyor. Kart bu yüzden modeli sadece ses gürültünün belirgin şekilde üstüne çıktığında çalıştırıyor.

Bilgisayarda çalışan konuşma tanıma için Phonon-2 yazımıza, aynı çipte dil modeli çalıştırma denemesi için belleğe sığmayan modeller yazımıza bakabilirsin.

Düşün

  • Evindeki hangi cihaz, internete bağlanmadan sesli komut alsa daha güvenli olurdu?
  • Bilgisayarda doğru çıkan ama hedef donanımda 4 kat yavaş çalışan bir kodu nasıl test ederdin?

Videoyu izle

Tıklayınca video YouTube'dan yüklenir; o ana kadar bu sayfa YouTube'a hiçbir istek göndermez.
Kaynaklar (5, İngilizce)

Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.

Konu: Yerel AI3 dkVideo: Better Stack

AnyJev: Elindeki açık modeli eğitmeden Jev gibi karar verdirmek

Nokia'nın araştırma ekibinden çıkan açık kaynaklı AnyJev, kendi bilgisayarında çalışan bir dil modelini metin yazdırmadan, seçenekler üzerinde olasılık veren bir karar modeline çeviriyor. Eğitim de etiketli veri de istemiyor. Better Stack'in testinde modelin önyargılarını temizledi ama onu Jev kadar isabetli yapmadı.