मैंने 12 साल पुराने Raspberry Pi पर लोकल LLM चलाया (यह वास्तव में काम कर गया!)
BBetter Stack
컴퓨터/소프트웨어가전제품/카메라
Transcript
00:00:00यह पहली पीढ़ी का रास्पबेरी पाई है, जो 2014 में आया था।
00:00:05इसमें 700 MHz सिंगल-कोर प्रोसेसर और 512 MB रैम है।
00:00:12आज के मानकों के हिसाब से, यह मूल रूप से एक कैलकुलेटर है।
00:00:16लेकिन आज, हम देखेंगे कि क्या हम इस 12 साल पुराने हार्डवेयर को
00:00:21स्थानीय रूप से इस पर एक लार्ज लैंग्वेज मॉडल चलाकर इसकी अंतिम सीमा तक धकेल सकते हैं।
00:00:26इस वीडियो में, मैं आपको दिखाऊंगा कि वह कौन सा छोटा मॉडल है जिसे आप रास्पबेरी पाई पर चला सकते हैं,
00:00:30और हम देखेंगे कि यह कैसा प्रदर्शन करता है, और मैं आपको दिखाऊंगा कि सभी आवश्यक डिपेंडेंसी कैसे इंस्टॉल करें
00:00:35ताकि आप इसे स्वयं आज़मा सकें।
00:00:37इसमें बहुत मज़ा आने वाला है, तो चलिए शुरू करते हैं।
00:00:40सच कहूं तो, मुझे नहीं लगा था कि इस आर्किटेक्चर के लिए
00:00:47इतना हल्का मॉडल ढूंढना संभव होगा।
00:00:49लेकिन कुछ शोध के बाद, मुझे वास्तव में एक उम्मीदवार मिल गया।
00:00:52मिलिए Falcon H1 Tiny से।
00:00:54यह सिर्फ 90 मिलियन पैरामीटर्स वाला एक अविश्वसनीय रूप से कॉम्पैक्ट मॉडल है।
00:00:59इसे अबू धाबी में टेक्नोलॉजी इनोवेशन इंस्टीट्यूट द्वारा विकसित किया गया था
00:01:03विशेष रूप से लैंग्वेज मॉडलिंग की चरम निचली सीमाओं का पता लगाने के लिए।
00:01:08लेकिन वे इतना छोटा मॉडल कैसे बना सके?
00:01:10क्या इसके पीछे कोई तकनीकी जादू है?
00:01:13खैर, वास्तव में ऐसा नहीं है।
00:01:14वे मूल रूप से उसी हाइब्रिड ट्रांसफार्मर प्लस मांबा आर्किटेक्चर का उपयोग कर रहे हैं
00:01:19जिसे आईबीएम जैसी कंपनियों ने अपने छोटे ग्रेनाइट 4 मॉडल के लिए इस्तेमाल किया था।
00:01:24जिस पर मैंने एक वीडियो भी बनाया है अगर आप उसे देखना चाहें।
00:01:27लेकिन यहाँ एक बात है।
00:01:28इस मॉडल को मेमोरी में सफलतापूर्वक फिट करने के लिए, हमें क्वांटिज़ेशन के बारे में बात करनी होगी।
00:01:33अब, फाल्कन मॉडल 2-बिट, 4-बिट और 8-बिट वर्ज़न में उपलब्ध हैं।
00:01:38अब, आप अल्ट्रा-लीन IQ या महत्व क्वांटिज़ेशन आज़माने के लिए ललचा सकते हैं।
00:01:43लेकिन यहाँ एक पेंच है।
00:01:45वे नए तरीके एक जटिल बिट मैनिपुलेशन पर भरोसा करते हैं
00:01:49जिसे कुशल होने के लिए आधुनिक CPU इंस्ट्रक्शंस की आवश्यकता होती है।
00:01:52हमारे रास्पबेरी पाई के पुराने ARMv6 चिप पर, यह काम नहीं करेगा।
00:01:57इसलिए इसके बजाय, हमें पुराने स्कूल के Q4 मॉडल के साथ जाना होगा
00:02:01जो हमारे मामले के लिए गोल्ड स्टैंडर्ड है।
00:02:04यह एक मध्यम आकार की लेगेसी क्वांटिज़ेशन पद्धति का उपयोग करता है
00:02:07जिसे पाई का प्रोसेसर वास्तव में बिना अटके संभाल सकता है।
00:02:11यह लॉजिक को बरकरार रखते हुए हमें सबसे अच्छा इंटेलिजेंस प्रति मेगाबाइट अनुपात देता है।
00:02:17लेकिन इस मॉडल को पहली पीढ़ी के रास्पबेरी पाई पर चलाना कोई मामूली काम नहीं है।
00:02:22चूंकि पाई ARMv6 आर्किटेक्चर का उपयोग करता है,
00:02:26इसमें आधुनिक NEON इंस्ट्रक्शंस की कमी है जिस पर लगभग सभी AI लाइब्रेरी निर्भर करती हैं।
00:02:31लेकिन सौभाग्य से, llama.cpp है जिसका उपयोग हम इंफेरेंस चलाने के लिए कर सकते हैं।
00:02:36लेकिन ऐसा करने के लिए, हमें इसके बाइनरी को विशेष रूप से हमारे ARMv6 के लिए कंपाइल करना होगा।
00:02:42और यदि आप इसे सीधे पाई पर कंपाइल करने का प्रयास करेंगे,
00:02:45तो कंपाइलर को समाप्त करने में शायद 18 घंटे लगेंगे।
00:02:49वह भी तब, जब यह पहले आउट-ऑफ-मेमोरी एरर से क्रैश न हो जाए।
00:02:53तो इसे बायपास करने के लिए, हमें थोड़ा रचनात्मक होना होगा।
00:02:56हमें doc_cross का उपयोग करके अपने लैपटॉप पर इन बाइनरी को पहले से क्रॉस-कंपाइल करना होगा,
00:03:02विशेष रूप से VFP मैथ यूनिट सक्षम के साथ ARMv6 इंस्ट्रक्शन सेट को लक्षित करते हुए,
00:03:08और फिर उन्हें SSH के माध्यम से कॉपी करना होगा ताकि हम सीधे इंफेरेंस शुरू कर सकें।
00:03:13तो हम अभी बिल्कुल यही करने जा रहे हैं।
00:03:15तो सबसे पहले, हमें रास्पबेरी पाई इमेजर का उपयोग करके अपने पाई पर सबसे हल्का OS फ्लैश करना होगा।
00:03:22और केवल 512 मेगाबाइट रैम वाले बोर्ड के लिए, हर मेगाबाइट मायने रखता है।
00:03:28इसलिए मैं रास्पबेरी पाई OS लाइट, 32-बिट वर्ज़न के साथ जा रहा हूँ,
00:03:32क्योंकि इसमें डेस्कटॉप इंटरफ़ेस नहीं है और यह मेमोरी के बहुत कम हिस्से पर चलता है
00:03:38जो मानक OS उपयोग करता है, जिससे मॉडल के चलने के लिए हमारी लगभग पूरी रैम उपलब्ध रहती है।
00:03:44और यहाँ एक और महत्वपूर्ण नोट है, उन्नत सेटिंग्स का उपयोग करना सुनिश्चित करें
00:03:47अपने वाई-फाई को पहले से कॉन्फ़िगर करने और SSH सक्षम करने के लिए।
00:03:51क्योंकि इन पुराने बोर्डों पर, सब कुछ दूरस्थ रूप से प्रबंधित करना बहुत आसान है,
00:03:55ताकि आपको उस सुस्त लोकल टर्मिनल से लड़ना न पड़े।
00:03:58अब, एक बार जब पाई बूट हो जाए और हमने इसमें SSH कर लिया हो, तो हमें ARMv6 की समस्या को हल करना होगा।
00:04:05इसलिए यदि हमने यहीं llama CPP को कंपाइल करने की कोशिश की,
00:04:08तो पाई सचमुच अगला डेढ़ दिन सिर्फ हेडर्स को प्रोसेस करने में ही बिता देगा।
00:04:13इसलिए इसके बजाय, हम कंप्यूटर की गति बढ़ाने और समय बचाने के लिए इसे एक नियमित लैपटॉप पर करेंगे।
00:04:18तो चलिए llama CPP का सोर्स कोड क्लोन करते हैं और एक समर्पित बिल्ड
00:04:23डायरेक्टरी बनाते हैं जहाँ हम अपना बिल्ड स्टोर करेंगे जिसे हम अपने रास्पबेरी पाई पर उपयोग करेंगे।
00:04:28अब, यहाँ एक और समस्या है।
00:04:29मेरा मैक ARMv8 का उपयोग कर रहा है, जो कि 64-बिट वर्ज़न है, न कि 32-बिट ARMv6।
00:04:37और उनके इंस्ट्रक्शन सेट अलग-अलग हैं।
00:04:40इसलिए विशेष रूप से पाई के लिए बाइनरी कंपाइल करने के लिए, हमें doccross का उपयोग करना होगा,
00:04:45जो कि एक क्रॉस कंपाइलर टूलचेन है जो मेरे मैक पर चलता है,
00:04:48लेकिन विशेष रूप से पाई के पुराने आर्किटेक्चर के लिए बाइनरी बनाता है।
00:04:53इसके बाद, हमें बिल्ड को कॉन्फ़िगर करना होगा।
00:04:55और यहीं पर हमें बेहद सटीक होने की जरूरत है।
00:04:58तो हमें कुछ बहुत ही विशिष्ट फ्लैग्स पास करने होंगे।
00:05:00सबसे पहले, हमें एक सिंगल पोर्टेबल बाइनरी बनाने के लिए shared libs को बंद करना होगा।
00:05:05और फिर हमें NEON को बंद करना होगा क्योंकि हमारे पाई में उन आधुनिक मैथ इंस्ट्रक्शंस की कमी है।
00:05:10और हमें अपनी मेमोरी फुटप्रिंट को जितना संभव हो सके कम रखने के लिए OpenMP को डिसेबल करना होगा।
00:05:15हम अनिवार्य रूप से हर आधुनिक विलासिता को हटा रहे हैं
00:05:18यह सुनिश्चित करने के लिए कि बाइनरी हमारे पुराने स्कूल के पाई बोर्ड के साथ संगत हो।
00:05:22और अब अगर हम बिल्ड दबाते हैं, तो लगभग दो मिनट में, हमारे पास एक पूरी तरह से
00:05:26कंपाइल किया हुआ ऑप्टिमाइज़्ड llama completion बाइनरी हमारे पाई बोर्ड पर कॉपी होने के लिए तैयार होगा।
00:05:31और अब मैं नेटवर्क के माध्यम से सीधे अपने पाई से जुड़ने के लिए SSH का उपयोग करूंगा
00:05:35और पाई पर एक नई डायरेक्टरी बनाऊंगा और फिर हमारे कस्टम बिल्ड बाइनरी को उस पर कॉपी करने के लिए SCP का उपयोग करूंगा।
00:05:42और यहाँ एक आखिरी काम हमें करना है।
00:05:44आइए फाल्कन के 2-बिट, 4-बिट और 8-बिट लेगेसी क्वांटिज़्ड मॉडल डाउनलोड करें,
00:05:50क्योंकि हम उन सभी का क्रमवार परीक्षण करेंगे।
00:05:53और फिर उन्हें मॉडल्स फ़ोल्डर में नेटवर्क के माध्यम से एक-एक करके हमारे पाई पर कॉपी करें।
00:05:58अब यहाँ मज़ेदार हिस्सा आता है।
00:05:59आइए अपने पाई पर चलते हैं और अपना पहला इंफेरेंस टेस्ट निष्पादित करते हैं।
00:06:03हम सबसे आक्रामक कंप्रेशन, 2-बिट क्वांटिज़्ड मॉडल के साथ शुरुआत करेंगे।
00:06:07और यहाँ हमें यह लंबा कमांड चलाने की जरूरत है।
00:06:10और मूल रूप से मैं यहाँ एक साधारण
00:06:13“नमस्ते, आप कैसे हैं?” के साथ इसे प्रॉम्प्ट कर रहा हूँ और आउटपुट को 32 टोकन तक सीमित कर रहा हूँ।
00:06:18और हम बिल्कुल एक थ्रेड निर्दिष्ट कर रहे हैं क्योंकि, हमारे पास बस इतना ही है।
00:06:22और हम रैम के हर संभव बाइट को बचाने के लिए कॉन्टेक्स्ट साइज को 128 टोकन पर छोटा रख रहे हैं।
00:06:29लेकिन यहाँ सबसे महत्वपूर्ण फ्लैग no-mmap है।
00:06:32आम तौर पर, llama CPP मॉडल लोड करने के लिए मेमोरी मैपिंग का उपयोग करता है, जो हाई-एंड GPU के लिए बहुत अच्छा है,
00:06:38लेकिन हमारे पाई बोर्ड के लिए यह एक दुःस्वप्न है।
00:06:41सिर्फ 512 मेगाबाइट रैम वाले 32-बिट सिस्टम पर,
00:06:45mmap विफल हो सकता है यदि उसे एड्रेस स्पेस का लगातार ब्लॉक नहीं मिलता है।
00:06:50इसलिए इसे डिसेबल करके, हम मॉडल को सीधे हीप (heap) में लोड करने के लिए मजबूर करते हैं,
00:06:55जिससे हमें अपनी सीमित मेमोरी पर बहुत अधिक स्थिर नियंत्रण मिलता है।
00:06:58और इसी के साथ, चलिए कमांड चलाते हैं।
00:07:00और ये रहा, हमारा पहला टोकन।
00:07:03जैसा कि हम यहाँ देख सकते हैं, 2-बिट वर्ज़न बहुत संघर्ष कर रहा है।
00:07:08सबसे पहले, हम देख सकते हैं कि यह हर तीन सेकंड में एक टोकन प्रोसेस कर रहा है,
00:07:14जो कि एक पुराने रास्पबेरी पाई बोर्ड पर अपेक्षित है।
00:07:18लेकिन अधिक महत्वपूर्ण बात यह है कि उत्तर बिल्कुल बकवास है।
00:07:2190 मिलियन पैरामीटर वाले मॉडल पर, वेट्स इतने संकुचित होते हैं
00:07:25कि भाषाई तर्क मूल रूप से ढह गया है।
00:07:28यह बमुश्किल समझने लायक है, लेकिन तकनीकी रूप से यह काम कर रहा है।
00:07:32तो अब देखते हैं कि क्या होता है अगर हम इसे 4-बिट मॉडल से बदलते हैं।
00:07:35और देखिए, अब हमें वापस एक सुसंगत अभिवादन मिलता है।
00:07:40तो यह एक सफलता है।
00:07:42अब हमारे पास वास्तव में पाई पर स्थानीय रूप से चलने वाला एक AI मॉडल है
00:07:47और वह हमारे प्रॉम्प्ट्स का तार्किक रूप से जवाब दे रहा है।
00:07:49तो बहुत बढ़िया!
00:07:50अब इसे और आगे ले चलते हैं।
00:07:53देखते हैं कि क्या पाई 8-बिट मॉडल को संभाल सकता है।
00:07:56और इस बार मैं इससे कुछ अधिक समझदारी भरा सवाल पूछने जा रहा हूँ,
00:07:59जैसे कि अल्बानिया की राजधानी क्या है?
00:08:02और खैर, यह गलत है क्योंकि अल्बानिया की राजधानी तिराना है
00:08:08और यह स्पष्ट रूप से तथ्यात्मक रूप से सही नहीं है।
00:08:10लेकिन अगर मैं पूछता हूँ कि बेल्जियम की राजधानी क्या है, तो यह सही जवाब देता है।
00:08:15तो यह हमें कुछ बहुत दिलचस्प दिखा रहा है।
00:08:17ऐसा लगता है कि 90 मिलियन पैरामीटर की कमी अपनी कीमत के साथ आती है।
00:08:22इसके पास बड़े, अधिक लोकप्रिय देशों के बारे में सटीक जानकारी हो सकती है,
00:08:26लेकिन कम ज्ञात देशों और शायद कम ज्ञात विषयों के बारे में जानकारी का अभाव है।
00:08:31और ज्ञान की प्रकृति ही ऐसी है।
00:08:33उन 90 मिलियन पैरामीटर्स के भीतर आप सीमित मात्रा में ही ज्ञान फिट कर सकते हैं।
00:08:38लेकिन फिर भी, परिणाम बहुत शानदार है।
00:08:41और यह इस बात की पुष्टि है कि हाँ, वास्तव में ऐसे AI मॉडल मौजूद हैं जो काफी छोटे
00:08:46और हल्के हैं कि 12 साल पुराने रास्पबेरी पाई पर चल सकें।
00:08:50क्या यह तेज़ है?
00:08:51बिल्कुल नहीं।
00:08:52क्या यह सटीक है?
00:08:53यह शायद नहीं हो सकता।
00:08:54क्या आपको इसे प्रोडक्शन में इस्तेमाल करना चाहिए?
00:08:55शायद नहीं।
00:08:57जब तक कि आप एक बहुत, बहुत, बहुत, बहुत धीमा रोबोट बनाना न चाहें।
00:09:02लेकिन सबसे महत्वपूर्ण बात यह है कि अब हम जानते हैं कि यह सैद्धांतिक रूप से संभव है।
00:09:06तो मूल रूप से, मैं इस वीडियो में बस यही साबित करना चाहता था।
00:09:09और सच कहूँ तो, इस प्रयोग में बहुत मज़ा आया।
00:09:13तो ये रहा दोस्तों।
00:09:14ये Falcon H1 Tiny मॉडल हैं।
00:09:17शायद वर्तमान में मौजूद सबसे छोटे AI मॉडल।
00:09:20और अब हम जानते हैं कि वे वास्तव में इतने छोटे हैं कि पहली पीढ़ी के रास्पबेरी पाई पर चल सकते हैं,
00:09:25जो कि बहुत शानदार है।
00:09:27मैं यह जश्न मनाना बंद नहीं कर सकता कि यह तथ्य कितना अच्छा है।
00:09:30हालाँकि इसका व्यावहारिक कार्यान्वयन बेकार है, फिर भी यह शानदार है।
00:09:35तो दोस्तों मुझे बताएं, अगर आपके पास कोई मज़ेदार विचार,
00:09:37टिप्पणी या राय है जो आपने अभी देखा उसके बारे में।
00:09:40उन्हें नीचे कमेंट सेक्शन में पोस्ट करें।
00:09:42और दोस्तों, अगर आपको इस प्रकार के तकनीकी विश्लेषण पसंद हैं,
00:09:45तो कृपया वीडियो के नीचे उस लाइक बटन को दबाकर मुझे बताएं।
00:09:49और हमारे चैनल को सब्सक्राइब करना भी न भूलें।
00:09:51मैं Better Stack से Andris हूँ, और मैं आपको अगले वीडियो में मिलूँगा।