माइक्रोकंट्रोलर बनाम कंप्यूटर
एक माइक्रोकंट्रोलर में कुछ किलोबाइट RAM, कोई ऑपरेटिंग सिस्टम नहीं और मिलीवॉट में पावर बजट होता है। जानें कि फ्लैश, RAM और पावर कैसे तय करते हैं कि कौन सा मॉडल फिट हो सकता है।
60 सेकंड में
माइक्रोकंट्रोलर बनाम कंप्यूटर
एक माइक्रोकंट्रोलर में कुछ किलोबाइट RAM, कोई ऑपरेटिंग सिस्टम नहीं और मिलीवॉट में पावर बजट होता है। जानें कि फ्लैश, RAM और पावर कैसे तय करते हैं कि कौन सा मॉडल फिट हो सकता है।
| लैपटॉप या फ़ोन | आम माइक्रोकंट्रोलर | |
|---|---|---|
| वर्किंग मेमोरी (RAM) | गीगाबाइट | किलोबाइट से लेकर कुछ सौ किलोबाइट (कुछ में थोड़ी ज़्यादा होती है) |
| प्रोग्राम और मॉडल के लिए स्टोरेज | सैकड़ों गीगाबाइट | फ़्लैश मेमोरी: कुछ दसियों किलोबाइट से लेकर कुछ मेगाबाइट |
| ऑपरेटिंग सिस्टम | Windows, Android, Linux, macOS | अक्सर कुछ नहीं: चिप पर सीधे एक प्रोग्राम चलता है, या एक बहुत छोटा रियल-टाइम OS |
| पावर | वॉट | मिलीवॉट, और स्लीप मोड में इससे भी बहुत कम |
| मैथ्स | तेज़ फ़्लोटिंग पॉइंट, अक्सर एक GPU | कुछ चिप्स में फ़्लोटिंग-पॉइंट यूनिट होती है, कुछ में नहीं; इंटीजर मैथ्स आमतौर पर कम रिसोर्स लेता है |
दो तरह की मेमोरी
- फ़्लैश पावर बंद होने पर भी चीज़ों को सुरक्षित रखती है, एक नोटबुक की तरह। आपका प्रोग्राम और मॉडल के वेट्स (weights) यहीं स्टोर होते हैं। फ़्लैश RAM से बड़ी होती है, लेकिन यह भर जाती है।
- RAM वर्किंग मेमोरी है, जैसे पढ़ाई करते समय आपकी डेस्क। इसमें इनपुट (उदाहरण के लिए पिछले एक सेकंड का ऑडियो), लेयर्स के बीच मॉडल द्वारा कैलकुलेट की गई संख्याएं (activations), और आपके प्रोग्राम के वेरिएबल्स रहते हैं। TensorFlow Lite for Microcontrollers में मॉडल के लिए इस वर्किंग एरिया को tensor arena कहा जाता है।
चार चरणों में मेमोरी बजट
- 1
वेट्स का साइज़
वेट्स की संख्या × प्रति वेट बाइट्स। float32 4 बाइट्स लेता है; int8 1 बाइट लेता है। - 2
खाली फ़्लैश
कुल फ़्लैश में से बिना मॉडल वाले प्रोग्राम को घटाएं। वेट्स को इसमें फिट होना चाहिए। - 3
वर्किंग मेमोरी
इनपुट बफ़र + tensor arena + अन्य वेरिएबल्स। इसे RAM में फिट होना चाहिए। - 4
कुछ जगह खाली छोड़ें
कुछ मार्जिन रखें। लाइब्रेरीज़, स्टैक के इस्तेमाल और बाद के फ़ीचर्स के लिए भी जगह चाहिए होती है।
# How big is a model? Weights x bytes per weight.
for params in [10_000, 100_000, 1_000_000, 1_000_000_000]:
f32_kb = params * 4 / 1024
i8_kb = params * 1 / 1024
print(f"{params:>13,} weights: float32 {f32_kb:>12,.0f} KB int8 {i8_kb:>12,.0f} KB")कोई ऑपरेटिंग सिस्टम नहीं: क्या बदलता है
- "open model.tflite" करने के लिए आमतौर पर कोई फ़ाइल सिस्टम नहीं होता। मॉडल को बाइट्स के ऐरे (array) के रूप में प्रोग्राम में ही कंपाइल किया जाता है।
- मेमोरी की योजना अक्सर पहले से बना ली जाती है। कई TinyML रनटाइम प्रोग्राम चलते समय मेमोरी मांगने से बचते हैं, ताकि प्रोग्राम बीच में ही मेमोरी खत्म होने से रुक न जाए।
- आप पूरे प्रोग्राम को बोर्ड पर फ़्लैश (अपलोड) करते हैं, फिर सीरियल कनेक्शन, किसी लाइट या छोटे डिस्प्ले के ज़रिए नतीजे देखते हैं।
- पावर बचाने के लिए चिप अपना ज़्यादातर समय स्लीप मोड में बिताती है, और किसी टाइमर या सेंसर सिग्नल पर जागती है।
मिलीवॉट में पावर
और देखें और पढ़ें
लैब
तीन काम करने वाले Python फ़ंक्शन्स जो आपको बताते हैं कि कोई मॉडल किसी उदाहरण बोर्ड पर फिट बैठता है या नहीं।
समस्या
शुरुआती कोड 256 KB RAM और 1024 KB फ़्लैश वाले एक उदाहरण बोर्ड का विवरण देता है। फ़र्मवेयर पहले से ही 300 KB फ़्लैश और 60 KB RAM का इस्तेमाल कर रहा है। इन तीन फ़ंक्शन्स को पूरा करें:
model_kb(n_params, bytes_per_weight): KB में वेट्स का साइज़ (1 KB = 1024 बाइट्स)।audio_buffer_kb(seconds, sample_rate, bytes_per_sample): ऑडियो के एक टुकड़े को रखने के लिए ज़रूरी RAM।fits(n_params, bytes_per_weight, arena_kb):Trueकेवल तभी जब वेट्स खाली फ़्लैश में फिट हों और arena खाली RAM में फिट हो।
इसे चलाएं और टेबल देखें। कौन से मॉडल float32 के रूप में फिट होते हैं, और कौन से केवल int8 के रूप में? फिर मीडियम मॉडल के arena में ऑडियो बफ़र जोड़ें: क्या यह अभी भी फिट होता है?
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आपके मॉडल के वेट्स फ़्लैश में आसानी से फिट हो जाते हैं, लेकिन मॉडल शुरू होते ही बोर्ड क्रैश हो जाता है। आप सबसे पहले क्या चेक करेंगे?दिखाएं
RAM। वेट्स भले ही फ़्लैश में फिट हो जाएं, लेकिन tensor arena, इनपुट बफ़र और बाकी प्रोग्राम, इन सभी को एक ही समय में RAM में फिट होना चाहिए। चेक करें कि आपके रनटाइम के अनुसार arena के असल में कितने साइज़ की ज़रूरत है, स्टैक का साइज़ कितना है, और कोई बड़ा बफ़र जैसे कि ऑडियो तो नहीं है। इनपुट साइज़ घटाएं, छोटा मॉडल इस्तेमाल करें, या दूसरी मेमोरी खाली करें।
Q2100% फ़्लैश और RAM के हिसाब से प्लान बनाना जोखिम भरा क्यों है?दिखाएं
अन्य चीज़ों को भी जगह चाहिए होती है: लाइब्रेरीज़, स्टैक, डीबग कोड और भविष्य के फ़ीचर्स। मेमोरी का कुछ इस्तेमाल सिर्फ कुछ खास पलों में दिखता है, जैसे कि किसी गहरे फ़ंक्शन कॉल के दौरान। जो बोर्ड पूरा भर चुका हो, उसमें बाद में बग्स ठीक करने की जगह नहीं बचती। एक साफ़ मार्जिन रखें और असली बोर्ड पर नापकर देखें।
अक्सर पूछे जाने वाले सवाल
हर चीज़ के लिए बस Raspberry Pi का इस्तेमाल क्यों नहीं करते?
Raspberry Pi एक पूरा कंप्यूटर है जो Linux चलाता है। इसे प्रोग्राम करना आसान है और यह बहुत ज़्यादा शक्तिशाली है, लेकिन इसे ज़्यादा पावर चाहिए होती है और बूट होने में समय लगता है। बैटरी से चलने वाले ऐसे सेंसर के लिए जिसे महीनों चलना है, आमतौर पर माइक्रोकंट्रोलर बेहतर विकल्प होता है। मेन पावर से चलने वाले कैमरा प्रोजेक्ट के लिए, Pi आसान हो सकता है।
Tensor arena क्या है?
यह RAM का एक हिस्सा है जिसे आप मॉडल की वर्किंग मेमोरी के लिए अलग रखते हैं: इनपुट, आउटपुट और बीच की वैल्यूज़। आप अपने प्रोग्राम में इसका साइज़ चुनते हैं। बहुत छोटा हुआ तो मॉडल शुरू नहीं हो पाएगा; बहुत बड़ा हुआ तो आपके बाकी कोड के लिए जगह नहीं बचेगी। टूल्स यह बता सकते हैं कि असल में कितनी जगह इस्तेमाल हुई।
क्या मॉडल को RAM में फिट होना चाहिए या फ़्लैश में?
आमतौर पर वेट्स फ़्लैश में रहते हैं और वहीं से पढ़े जाते हैं, और केवल वर्किंग मेमोरी को ही RAM में फिट होना होता है। यह रनटाइम और चिप पर निर्भर करता है, इसलिए अपने टूल के डॉक्स चेक करें।
इंटीजर मैथ्स को प्राथमिकता क्यों दी जाती है?
कई माइक्रोकंट्रोलर फ़्लोटिंग-पॉइंट मैथ्स की तुलना में इंटीजर मैथ्स को तेज़ी से और कम एनर्जी के साथ करते हैं, और कुछ में तो फ़्लोटिंग-पॉइंट यूनिट होती ही नहीं है। कुछ चिप्स में ऐसे खास निर्देश भी होते हैं जो int8 ऑपरेशन्स को तेज़ बना देते हैं। यही एक कारण है कि TinyML में int8 मॉडल्स आम हैं।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।