1 पॉइंट द्वारा GN⁺ 3 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • ESP32-S3 पर server से जुड़े बिना 2.89 करोड़ parameter वाला language model चलाया गया, जो छोटी screen पर लगभग प्रति सेकंड 9 token की रफ्तार से text आउटपुट करता है
  • कुल parameter में से 2.5 करोड़ को धीमी flash में रखकर, हर token पर ज़रूरी लगभग 6 row यानी सिर्फ 450 byte पढ़ने वाली Per-Layer Embeddings संरचना का उपयोग किया गया
  • मॉडल 4-bit आधार पर 14.9MB का है; 512KB SRAM में हर token पर इस्तेमाल होने वाला compute core, 8MB PSRAM में output head और working memory, और 16MB flash में बड़ा embedding table रखा गया है
  • TinyStories पर train किया गया यह मॉडल छोटे और सरल किस्से ज़्यादातर स्थिरता के साथ बना लेता है, लेकिन question answering, instruction following, code writing और factual knowledge के लिए उपयुक्त नहीं है
  • पहले समान chip पर चलाए गए 2.6 लाख parameter मॉडल की तुलना में इसमें लगभग 100 गुना ज़्यादा parameter हैं; मुख्य बात generation quality से अधिक, छोटे chip में बड़े मॉडल को समेटने वाली memory architecture है

हार्डवेयर और रनिंग परफ़ॉर्मेंस

  • लगभग $8 का एक ESP32-S3 ही पूरा processing करता है और server को data नहीं भेजता
    • इसमें 512KB SRAM, 8MB PSRAM, 16MB flash का उपयोग होता है
    • कुल speed लगभग 9.5 tok/s है, जबकि शुद्ध compute speed लगभग 9.7 tok/s है
    • 4-bit मॉडल का आकार 14.9MB है
  • कुल 2.89 करोड़ parameter में से 2.5 करोड़ flash lookup table में store किए गए हैं

छोटे memory में मॉडल को फिट करने का तरीका

  • आम तौर पर पूरे मॉडल तक fast memory से पहुंच होना ज़रूरी होता है, लेकिन ESP32-S3 का SRAM सिर्फ 512KB है, इसलिए इसमें केवल बहुत छोटे मॉडल ही आ सकते हैं
  • यह देखते हुए कि ज़्यादातर parameter embedding table में हैं और सीधे computation का हिस्सा नहीं हैं, table को flash में ही रखा गया
    • हर token पर ज़रूरी लगभग 6 row, यानी लगभग 450 byte ही पढ़े जाते हैं
    • सिर्फ computation संभालने वाला छोटा हिस्सा fast memory में रखा जाता है
    • मॉडल का अधिकांश भाग runtime में load नहीं होता, बल्कि ज़रूरत के हिसाब से flash से चुना जाता है
  • memory की भूमिकाएँ इस तरह बाँटी गई हैं
    • SRAM: हर token में इस्तेमाल होने वाला compute core
    • PSRAM: output head और working memory
    • flash: 2.5 करोड़ parameter वाली table

Per-Layer Embeddings का उपयोग

  • Google के Gemma 3n और Gemma 4 में इस्तेमाल हुई Per-Layer Embeddings को phone या GPU नहीं, बल्कि microcontroller की memory architecture पर लागू किया गया
  • प्रोजेक्ट बनाने वाले के अनुसार, इतनी छोटी chip पर इस तरीके के उपयोग का पहले कोई उदाहरण नहीं मिला

मॉडल क्या कर सकता है और इसकी सीमाएँ

  • TinyStories की छोटी synthetic stories पर train होने के कारण यह सरल कहानियाँ बना सकता है और ज़्यादातर consistency बनाए रखता है
  • यह question answering, instruction following, code writing या factual knowledge देने में सक्षम नहीं है
  • यह सीमा inference संभालने वाले छोटे core से आती है, और memory layout technique अपने आप reasoning क्षमता नहीं बढ़ाती

कोड और प्रयोग सामग्री

  • firmware/esp32_llm/README.md में firmware, wiring और flashing प्रक्रिया दी गई है
  • src/ और experiments/ में training, ablation और quantization code शामिल हैं
  • RESULTS.md में पूरी method, ablation और on-chip measurements संकलित हैं

आधार प्रोजेक्ट और रिकॉर्ड

  • TinyStories एक छोटी synthetic story dataset है, जिसे इस तरह बनाया गया कि छोटे मॉडल भी consistent writing सीख सकें
  • Google Gemma की Per-Layer Embeddings बड़े मॉडल को छोटे chip में समेटने की आधार तकनीक बनी
  • Andrej Karpathy का llama2.c इस विचार को प्रभावित करता है कि छोटे language model को train करके pure C में चलाया जा सकता है
  • repository में शुरुआती parameter count को बढ़ा-चढ़ाकर दिखाने वाली calculation error और उसकी correction process भी दर्ज है
    • commit history और RESULTS.md में देखा जा सकता है कि आँकड़े कहाँ और क्यों बदले गए

1 टिप्पणियां

 
GN⁺ 3 시간 전
Hacker News की राय
  • आजकल 5 डॉलर के microcontroller से क्या-क्या हो सकता है, यह हैरान करने वाला है। Milk-V boards में Duo में 256MB तक memory और 1TOPS@INT8 TPU है, और यह Linux भी चला सकता है, इसलिए मैंने 5 खरीद लिए

    • 128-bit vector ISA और 32 registers को भी नज़रअंदाज़ नहीं किया जा सकता। यह 64-bit तक integers और floating point को सपोर्ट करता है, और LMUL=8 होने पर एक ही instruction में 1,024 bits process करता है; ज़्यादातर operations में 128 bits पर 3 cycles लगते हैं
      GCC और Clang xTHeadVector को पूरी तरह support करते हैं, और C built-in functions इस्तेमाल करने पर सिर्फ command-line options से RVV 1.0 के साथ compatible हो जाता है। 8-bit elements संभालने वाला बहुत-सा code, जैसे memcpy(), memset(), memcmp(), strlen(), strcpy(), strcmp(), binary-compatible है
      जब मैंने 64MB Duo खरीदा था तो वह 3 डॉलर का था, और बाद में 64MB·256MB·512MB models क्रमशः 5·7·10 डॉलर के थे, लेकिन इस साल कीमतें काफी बढ़ गई हैं: https://arace.tech/products/milk-v-duo, https://arace.tech/products/milkv-duo-s
    • 0.5 डॉलर से कम में भी microcontroller खरीदा जा सकता है, लेकिन 5 डॉलर वाला product भी model चलाने के लिए इतनी कड़ी सीमाओं वाला लगता है कि practically बेकार environment है। उम्मीद है model demand की वजह से MCU की कमी नहीं होगी
    • यह मानने की ज़रूरत नहीं कि microcontroller जैसे 1980s hardware में अटका है और assembly language या C ही एकमात्र विकल्प हैं। इस स्तर की device Xerox PARC operating system भी बिना ज्यादा कठिनाई के चला सकती है
      कुछ use cases में 4KB PIC अब भी सबसे अच्छा हो सकता है, लेकिन हमें ऐसे act नहीं करना चाहिए मानो ज़्यादातर स्थितियों में बेहतर विकल्प ही नहीं हैं
    • यह कीमत और performance एहसास कराते हैं कि ARM की monopolistic स्थिति ने पूरी industry पर कितना बड़ा cost थोपा है
  • Speech-to-text और text-to-speech models भी इस size के करीब आ रहे हैं, इसलिए मैं सोचता हूं कि हमसे बात कर सकने वाली छोटी devices कितनी करीब हैं। एक दुनिया आ सकती है जहां toothbrush oral hygiene की सलाह दे, या toothpaste के ads तक चलाए

    • Oral hygiene advice तो पहले से संभव है। Philips के high-end toothbrush Bluetooth से connect होकर app में feedback देते हैं
      लेकिन मैं ऐसी दुनिया नहीं चाहता जहां toothbrush AI के लिए ad blocker भी ढूंढना पड़े
  • Per-layer embedding technique का बहुत smart इस्तेमाल किया गया है। करीब 2 करोड़ से 3 करोड़ parameters वाले practical TTS models भी हैं, इसलिए network से connected न होने वाला ESP32 लगभग real time में text पढ़कर सुना सकता है

    • मैं ऐसा setup test करना चाहता हूं जिसमें हर MCU model की एक layer संभाले। कई RP2350 को PIO dedicated lines से जोड़कर interpolators और dual multiply instructions को combine करने वाला तरीका
      PSRAM, flash और SD card की individual bandwidth ज्यादा नहीं है, लेकिन बहुतों को साथ चलाने पर काफी throughput मिल सकता है। बड़े dedicated hardware का performance-per-watt बेहतर होगा, लेकिन कम शुरुआती लागत और incremental scalability की वजह से ऐसा setup भी आकर्षक है
  • Microcontroller के बजाय Raspberry Pi 4 पर local LLM के लिए कौन-से realistic options हैं, ताकि जवाब देने में 30 सेकंड न लगें, यह जानना चाहता हूं

  • बेहद छोटे devices पर LLM चलाना भी शानदार है, लेकिन उससे ज्यादा प्रभावशाली वह training method है जिसने ये weights बनाए

    • छोटे parameter range में benchmarks को ही target करके excessive optimization करना कठिन होता है, इसलिए leaderboards की उपयोगिता खत्म नहीं हुई है। बल्कि, समान benchmark performance देने वाले और छोटे models खोजते हुए, वे modeling stage में compressibility और redundancy को पहचानकर हटाने की भूमिका अब भी निभाते हैं
  • अगर अच्छे access patterns के साथ flash का उपयोग किया जाए, तो क्या इसे CPU पर काफी बड़े models चलाने के तरीके तक scale नहीं किया जा सकता, यह सोच रहा हूं

    • हाल में ऐसा ही एक प्रयास हुआ था। सामान्य desktop CPU, NVMe SSD और करीब 25GB RAM के साथ GLM-5.2 चलाया गया, लेकिन speed tokens per second नहीं बल्कि प्रति token अधिकतम 20 सेकंड के स्तर की थी: https://github.com/JustVugg/colibri
    • ESP32 flash bandwidth internal SRAM की लगभग एक-चौथाई ही है। ज्यादा powerful systems में यह gap बहुत बड़ा हो जाता है, और बढ़ी हुई compute performance को efficiently उपयोग करने के लिए जरूरी memory bandwidth भी काफी बढ़ती है
  • ESP32-S3 काफी powerful है और मैं इसे अभी Raspberry Pi 4 development work में इस्तेमाल कर रहा हूं। इसके दो USB ports में से एक OTG support करता है, इसलिए ऐसी functionality implement की जा सकती है जिसमें किसी दूसरे तरीके से 100 डॉलर से ज्यादा खर्च होते

    • कुछ constraints स्वीकार करने पर RP2350 से करीब 1 डॉलर में similar setup संभव है। Maximum speed USB Full Speed यानी 12Mbps है; एक chip के built-in USB peripheral का इस्तेमाल करेगा और दूसरा PIO-supported GPIO pins से जुड़ सकता है
      फिलहाल यह tinyusb और pico-pio-usb के साथ चलता है, और ज्यादा performance की उम्मीद में Rust porting भी experiment की जा रही है
  • इस quantized model की accuracy कितनी है, यह जानना चाहता हूं

  • इस size में दिख रही performance हैरान करने वाली है, और thread में आए थोड़े अधिक powerful single-board computers पर क्या-क्या संभव होगा, यह देखने का इंतज़ार है