Z80-μLM, 40KB में समाया ‘संवादी AI’
(github.com/HarryR)- Z80-μLM 1976 के Z80 प्रोसेसर (4MHz, 64KB RAM) पर चलने वाला एक अल्ट्रा-छोटा संवादी AI मॉडल है
- Quantization-Aware Training (QAT) लागू करके यह सिर्फ 2-बिट वेट्स और 16-बिट integer operations के साथ कैरेक्टर-स्तरीय टेक्स्ट जनरेशन करता है
- लगभग 40KB के .COM executable में inference engine, weights और chat UI सब शामिल हैं
- trigram hash encoding इनपुट को 128 buckets में बदलता है, जिससे टाइपो या शब्द क्रम बदलने पर भी स्थिर जवाब मिलते हैं
- जटिल context समझना संभव नहीं, लेकिन सीमित 8-bit वातावरण में चलने वाले एक प्रायोगिक AI मॉडल के रूप में यह ध्यान खींचता है
प्रोजेक्ट ओवरव्यू
- Z80-μLM एक रेट्रो-कंप्यूटिंग वातावरण में चल सकने वाला अल्ट्रा-छोटा language model है
- यह 64KB RAM वाले Z80 CPU पर चलता है और कैरेक्टर-स्तरीय संवादात्मक जवाब उत्पन्न करता है
- मॉडल, inference code और UI सहित कुल आकार लगभग 40KB है
- प्रोजेक्ट का मुख्य सवाल था: “इसे कितना छोटा बनाया जा सकता है और फिर भी इसकी एक पहचान बनी रहे?” और इसका self-hosted deployment भी संभव है
- यह Turing Test स्तर तक नहीं पहुँचता, लेकिन सरल बातचीत के जरिए उपयोगकर्ता को आनंद देने वाला रूप प्रस्तुत करता है
दो उदाहरण शामिल
-
tinychat
- रोज़मर्रा के Q&A डेटा पर प्रशिक्षित एक सरल chatbot
- अभिवादन, परिचय और सामान्य बातचीत पर छोटे लेकिन व्यक्तित्वपूर्ण जवाब देता है
- उदाहरण: “hello” → “HI”, “are you a robot” → “YES”, “do you dream” → “MAYBE”
- रोज़मर्रा के Q&A डेटा पर प्रशिक्षित एक सरल chatbot
-
guess
- 20 Questions गेम शैली का मॉडल
- यह एक गुप्त विषय जानता है और YES/NO/MAYBE में जवाब देता है
- उपयोगकर्ता सही उत्तर बता दे तो “WIN” दिखाता है
- 20 Questions गेम शैली का मॉडल
- ट्रेनिंग डेटा Ollama या Claude API का उपयोग करके बनाया जा सकता है, और class distribution balance tool भी शामिल है
मुख्य फीचर्स
- Trigram hash encoding: इनपुट टेक्स्ट को 128 buckets में hash करता है, टाइपो-सहनशील और शब्द क्रम से स्वतंत्र
- 2-बिट weight quantization: हर weight {-2, -1, 0, +1}, 1 byte में 4 स्टोर
- 16-बिट integer inference: Z80 की 16-बिट arithmetic का उपयोग
- ~40KB .COM फ़ाइल: CP/M के Transient Program Area(TPA) के अनुकूल
- Autoregressive generation: कैरेक्टर-स्तर पर आउटपुट जनरेट करता है
- floating-point operations नहीं, fixed-point scaling का उपयोग
- interactive mode support:
CHATकमांड से चलता है
इंटरैक्शन का तरीका
- मॉडल इनपुट को ‘समझता’ नहीं, बल्कि इनपुट के shape के आधार पर प्रतिक्रिया देता है
- इनपुट वाक्य 128 trigram buckets में बदले जाते हैं, जिससे semantic similarity बनी रहती है
- उदाहरण: “hello there” और “there hello” को एक ही bucket structure के रूप में प्रोसेस किया जाता है
- लंबे वाक्य या क्रम-निर्भर वाक्यों में अंतर करना मुश्किल है
-
छोटे जवाबों का अर्थ
- 1–2 शब्दों के जवाब भी अनपेक्षित nuance व्यक्त कर सकते हैं
OK: तटस्थ स्वीकृतिWHY?: सवाल पर पलट-प्रश्नR U?: अस्तित्व पर प्रश्नMAYBE: अनिश्चितताAM I?: आत्म-परावर्तक प्रश्न
- ऐसे छोटे जवाब उपयोगकर्ता को context का अनुमान लगाने के लिए प्रेरित करते हैं
- 1–2 शब्दों के जवाब भी अनपेक्षित nuance व्यक्त कर सकते हैं
ताकत और सीमाएँ
- ताकत
- छोटे इनपुट पर सुसंगत classification-जैसे जवाब
- टाइपो, पुनर्गठन और शब्द क्रम बदलाव के प्रति मजबूत
- शब्द चयन के जरिए व्यक्तित्व की अभिव्यक्ति
- सीमित 8-bit hardware पर भी चल सकता है
- सीमाएँ
- नए वाक्य नहीं बना सकता
- multi-turn context track नहीं कर सकता
- व्याकरण नहीं समझता
- सामान्य बुद्धिमत्ता के स्तर तक नहीं पहुँचता
आर्किटेक्चर
- इनपुट लेयर: 128 query buckets + 128 context buckets
- hidden layers: उदाहरण कॉन्फ़िगरेशन 256 → 192 → 128
- आउटपुट लेयर: कैरेक्टर सेट के हर कैरेक्टर के लिए 1 neuron
- activation function: ReLU
-
quantization constraints
- Z80 एक 8-bit CPU है, लेकिन 16-बिट register pairs (HL, DE, BC) का उपयोग accumulation और activation के लिए करता है
- weights 1 byte में 4-4 करके स्टोर किए जाते हैं (2-bit units)
- 16-बिट accumulator 256 inputs के sum पर overflow रोकता है
- 2-बिट weights के कारण अभिव्यक्ति क्षमता सीमित है, और QAT के बिना training results अस्थिर हो सकते हैं
-
Z80 inner loop
- inference का केंद्र multiply-accumulate loop (MAC) है
- weights को unpack करके -2~-1~0~+1 मान के अनुसार accumulator (ACC) में जोड़ा या घटाया जाता है
- हर layer की गणना के बाद overflow रोकने के लिए 2-bit right shift किया जाता है
- पूरी inference प्रक्रिया हर कैरेक्टर पर लगभग 100,000 operations दोहराती है
- inference का केंद्र multiply-accumulate loop (MAC) है
लाइसेंस
- MIT या Apache-2.0 में से चयन संभव
2 टिप्पणियां
मुझे सच में यह बहुत हैरान करने वाली बात लगती है कि नवीनतम तकनीक को पुराने हार्डवेयर पर चलाया जा सकता है।
भविष्य में अगर AGI आ गया, तो क्या अभी पृथ्वी पर मौजूद सारी computing power को एक साथ जुटाकर उसे चलाया जा सकेगा?
Hacker News की राय
स्क्रीनशॉट
मैंने सोचा भी नहीं था कि कोई इतना बिल्कुल फिट बैठने वाली चीज़ पोस्ट करेगा। यह सच में अजीब लेकिन कमाल का संयोग है
मैंने browser-based CP/M emulator और IDE बनाया है: lockboot.github.io/desktop
मैं वही पोस्ट करने वाला था, लेकिन ‘शानदार demo’ ढूँढते-ढूँढते rabbit hole में फँस गया
मैंने 60 के दशक की punch card machine के लिए Fortran IV में MLP लिखा था (Xortran project)
भले ही उसमें attention mechanism नहीं था और context सिर्फ आखिरी sentence के trigram तक सीमित था, फिर भी interaction काफ़ी ठीक था
अगर ऐसा 60 के दशक के hardware पर भी संभव था, तो उस दौर का SF और विज्ञान पूरी तरह अलग होता
थोड़ा conspiracy theory की तरह कहूँ तो, लगता है AI कंपनियाँ RAM बड़े पैमाने पर इसलिए खरीद रही हैं ताकि लोगों को यह एहसास न हो कि आज का समय home computer revolution जैसा है
मैं 1TB RAM machine इस्तेमाल करता हूँ, और custom agent के साथ इसका प्रदर्शन commercial model से बेहतर है। यह personal है, safe है, और monetize नहीं किया गया
और अगला सवाल यह है कि क्या ऐसा छोटा model बनाया जा सकता है जो बाहरी data को देखते हुए सीख भी सके
अगर real-time में सीखने वाला ultra-small model बन जाए, तो हमारे पास पूरी तरह localized personal assistant होगा
ऐसा बहुत छोटा model जिसमें encyclopedic knowledge लगभग न हो, लेकिन basic reasoning और tools इस्तेमाल करने की क्षमता हो
संदर्भ ट्वीट
तब शायद आज की दुनिया पूरी तरह अलग होती
यह experimental case study है कि ‘अगर RNN, LLM के लिए उपयुक्त होता तो क्या होता’
CPU पर यह पागलों की तरह तेज़ है
हालांकि बड़े context window का अच्छा उपयोग करना शायद मुश्किल होगा
तो क्या model के weights तक पहुँचने पर उस secret को reverse-engineer किया जा सकता है, या वह सिर्फ सवालों के ज़रिए ही हासिल होगा—यह जानने की जिज्ञासा है
यह ऊपर से सामान्य दिखने वाले, लेकिन अंदर undetectable backdoor छिपाए हुए model बनाने के तरीके पर है
आम तौर पर यह ‘interpretability’ की समस्या के अंतर्गत आता है
उसकी संरचना 32K×36-bit words की थी, और byte operations का समर्थन नहीं था
40KB के Z80 executable को ज्यों का त्यों ले जाना काफ़ी तंग पड़ता
लेकिन अगर ज़्यादातर हिस्सा 2-bit weights होता, तो शायद संभव था
बाद के hardware, खासकर 1976 के Z80 पर, यह काफी आसान होता
अगले version में इसे expand करने वाला हूँ, इसलिए इसे ज़रूर आज़माने का सोच रहा हूँ
उस समय सिर्फ exact keyword matching होती थी, इसलिए सब कुछ अटपटा लगता था
शायद उस तरह का आखिरी game 2001 का Wizardry 8 रहा होगा