- Z80-μLM, 1976 çıkışlı Z80 işlemci (4MHz, 64KB RAM) üzerinde çalışan son derece küçük bir konuşmalı yapay zeka modeli
- Kuantizasyon farkındalıklı eğitim (QAT) uygulanarak yalnızca 2 bit ağırlıklar ve 16 bit tamsayı işlemleriyle karakter düzeyinde metin üretimi gerçekleştiriyor
- Yaklaşık 40KB boyutundaki .COM çalıştırılabilir dosya içinde çıkarım motoru, ağırlıklar ve sohbet arayüzü birlikte yer alıyor
- Trigram hash kodlama ile girdi 128 kovaya dönüştürülüyor; böylece yazım hatalarına ve kelime sırasına dayanıklı yanıtlar üretiliyor
- Karmaşık bağlam anlayışı mümkün olmasa da, kısıtlı 8 bit ortamda çalışabilen deneysel bir yapay zeka modeli olarak dikkat çekiyor
Projeye genel bakış
- Z80-μLM, retro bilgi işlem ortamlarında çalışabilen son derece küçük bir dil modeli
- 64KB RAM'e sahip bir Z80 CPU üzerinde çalışıyor ve karakter düzeyinde etkileşimli yanıtlar üretiyor
- Model, çıkarım kodu ve UI dahil toplam boyutu yaklaşık 40KB
- Projenin temel sorusu, “Ne kadar küçültülürse küçültülsün karakterini koruyabilir mi?” oldu; ayrıca self-hosted dağıtım da mümkün
- Turing testi seviyesine ulaşmasa da, basit diyaloglarla kullanıcıya keyif veren bir yapı sunuyor
İki örnek dahil
-
tinychat
- Gündelik Soru-Cevap verileri ile eğitilmiş basit bir chatbot
- Selamlaşma, kendini tanıtma ve genel sohbet için kısa, karakterli yanıtlar veriyor
- Örnek: “hello” → “HI”, “are you a robot” → “YES”, “do you dream” → “MAYBE”
-
guess
- 20 Questions oyunu biçimindeki model
- Gizli konuyu biliyor ve YES/NO/MAYBE ile yanıt veriyor
- Kullanıcı doğru cevabı bulursa “WIN” çıktısı veriyor
- Eğitim verileri Ollama veya Claude API kullanılarak üretilebiliyor; ayrıca sınıf dağılımı dengeleme aracı da bulunuyor
Başlıca özellikler
- Trigram hash kodlama: Girdi metnini 128 kovaya hash'leyerek yazım hatalarına tolerans ve kelime sırasından bağımsızlık sağlıyor
- 2 bit ağırlık kuantizasyonu: Her ağırlık {-2, -1, 0, +1} değerlerinden birini alıyor, 1 bayta 4 adet sığıyor
- 16 bit tamsayı çıkarımı: Z80'in 16 bit aritmetik işlemlerini kullanıyor
- ~40KB .COM dosyası: CP/M'in Transient Program Area (TPA) yapısına uygun
- Otoregresif üretim: Çıktıyı karakter karakter oluşturuyor
- Kayan nokta işlemi yok, sabit nokta ölçekleme kullanılıyor
- Etkileşimli mod desteği:
CHAT komutuyla çalıştırılıyor
Etkileşim biçimi
- Model girdiyi gerçekten ‘anlamıyor’, ama girdinin biçimine (shape) göre tepki veriyor
- Girdi cümlesi 128 trigram kovasına dönüştürülerek anlamsal benzerlik korunuyor
- Örnek: “hello there” ve “there hello” aynı kova yapısıyla işleniyor
- Uzun cümleleri veya sıra bağımlı cümleleri ayırt etmekte zorlanıyor
-
Kısa yanıtların anlamı
- 1-2 kelimelik yanıtlarla bile beklenmedik nüanslar ifade edilebiliyor
OK: nötr kabul
WHY?: soruyu geri sorgulama
R U?: varlığa dair şüphe
MAYBE: belirsizlik
AM I?: yansıtıcı soru
- Bu tür kısa yanıtlar, kullanıcının bağlamı kendisinin çıkarsamasını teşvik ediyor
Güçlü yanlar ve sınırlamalar
- Güçlü yanlar
- Kısa girdilere karşı tutarlı, sınıflandırma benzeri yanıtlar
- Yazım hatası·yeniden düzenleme·kelime sırası değişimine dayanıklı
- Kelime seçimiyle karakter yansıtabilme
- Kısıtlı 8 bit donanımda da çalışabilme
- Sınırlamalar
- Yeni cümleler üretemiyor
- Çok turlu bağlam takibi yapamıyor
- Dilbilgisini anlayamıyor
- Genel zeka seviyesine ulaşmıyor
Mimari
- Girdi katmanı: 128 sorgu kovası + 128 bağlam kovası
- Gizli katman: Örnek yapılandırma 256 → 192 → 128
- Çıktı katmanı: Karakter kümesindeki her karakter için 1 nöron
- Aktivasyon fonksiyonu: ReLU
-
Kuantizasyon kısıtları
- Z80, 8 bit bir CPU olsa da 16 bit register çiftleri (HL, DE, BC) kullanarak biriktirme ve aktivasyon yapıyor
- Ağırlıklar bir baytta 4 adet olacak şekilde saklanıyor (2 bit birimlerle)
- 256 girdiyi toplarken taşmayı önlemek için 16 bit biriktirici kullanılıyor
- 2 bit ağırlıklar nedeniyle ifade gücü sınırlı; QAT olmadan eğitim sonuçları kararsız olabiliyor
-
Z80 iç döngüsü
- Çıkarımın kalbi, çarp-topla döngüsü (MAC)
- Ağırlıkları açıyor, ardından -2~-1~0~+1 değerlerine göre biriktiriciye (ACC) ekleme veya çıkarma yapıyor
- Her katman hesabından sonra taşmayı önlemek için 2 bit sağa kaydırma uygulanıyor
- Tüm çıkarım sürecinde her karakter için yaklaşık 100 bin işlem tekrarlanıyor
Lisans
- MIT veya Apache-2.0 seçeneklerinden biri tercih edilebiliyor
2 yorum
Hacker News yorumları
ekran görüntüsü
Birinin tam da buna uyan bir şey paylaşacağını hiç düşünmemiştim. Gerçekten tuhaf ama harika bir rastlantı
Ben de tarayıcı tabanlı bir CP/M emülatörü ve IDE yaptım: lockboot.github.io/desktop
Aslında onu paylaşacaktım ama “harika demo” ararken tavşan deliğine düştüm
Ben de 60'lardaki delikli kart makineleri için Fortran IV ile bir MLP yazmıştım (Xortran projesi)
Dikkat mekanizması yoktu ve bağlam son cümlenin trigram'larıyla sınırlıydı ama etkileşim yine de oldukça iyiydi
Eğer bu tür bir şey 60'ların donanımında mümkün olsaydı, o dönemin bilim kurgu ve bilimi tamamen farklı olurdu
Komplo teorisyeni gibi konuşacağım ama, AI şirketlerinin RAM'i topluca satın almasının nedenlerinden biri insanların şu anın ev bilgisayarı devrimi dönemine benzediğini fark etmesini engellemek olabilir
Ben 1TB RAM'li bir makine kullanıyorum ve özel ajanlarla ticari modellerden daha iyi performans alıyorum. Kişisel, güvenli ve paraya çevrilmemiş
Sonraki soru da şu: Dış verileri sorgularken öğrenebilen küçük bir model yapılabilir mi?
Eğer gerçek zamanlı öğrenen ultra küçük bir model yapılabilirse, tamamen yerel çalışan kişisel bir asistan sahibi oluruz
Ansiklopedik bilgisi neredeyse olmayan ama temel akıl yürütme ve araç kullanma becerilerine sahip çok küçük bir model
ilgili tweet
O zaman bugün dünya tamamen farklı olurdu gibi geliyor
“RNN, LLM için uygun olsaydı nasıl olurdu?” sorusuna yönelik deneysel bir vaka çalışması
CPU üzerinde inanılmaz hızlı
Ama büyük bir bağlam penceresini iyi kullanmak zor olabilir gibi duruyor
Modelin ağırlıklarına erişildiğinde bu sır geri çıkarılabilir mi, yoksa sadece sorular üzerinden mi erişilebilir olur diye merak ediyorum
Dışarıdan normal çalışırken içine tespit edilemeyen arka kapılar yerleştirme yöntemlerini ele alıyor
Genel olarak bu, yorumlanabilirlik (interpretability) meselesine giriyor
32K×36 bit kelime yapısına sahipti ve bayt işlemlerini desteklemiyordu
40KB'lik Z80 çalıştırılabilir dosyasını doğrudan taşımak oldukça sıkışık olurdu
Ama çoğu 2 bit ağırlıktan oluşuyorsa mümkün olabilirdi
Daha sonraki donanımlarda, özellikle 1976'daki Z80 üzerinde çok daha rahat olurdu
Bir sonraki sürümde genişleteceğim, o yüzden bunu kesinlikle denemeyi düşünüyorum
O zamanlar sadece tam anahtar kelime eşleşmesi vardı, bu da yapay hissettiriyordu
Muhtemelen bu tür yaklaşımı kullanan son oyun 2001 tarihli Wizardry 8 idi
En yeni teknolojiyi geçmişin donanımında çalıştırabilmek gerçekten çok etkileyici görünüyor.
Gelecekte AGI ortaya çıktığında, şu anda Dünya’daki tüm hesaplama gücünü bir araya getirsek onu çalıştırabilir miyiz?