एक तंत्रिका नेटवर्क के प्रशिक्षण के लिए सीपीयू और जीपीयू के बीच चयन


29

मैंने एक जीपीयू के 'ओवरहेड' के बारे में चर्चा की है, और 'छोटे' नेटवर्क के लिए, यह वास्तव में एक जीपीयू की तुलना में सीपीयू (या सीपीयू के नेटवर्क) पर प्रशिक्षित करने के लिए तेज़ हो सकता है।

'छोटा' से क्या तात्पर्य है?

उदाहरण के लिए, क्या 100 छिपी इकाइयों वाली एकल-परत एमएलपी 'छोटी' होगी?

क्या आवर्तक वास्तुशिल्प के लिए 'छोटे' की हमारी परिभाषा बदल जाती है?

क्या कोई अन्य मानदंड हैं जो यह तय करते समय विचार किया जाना चाहिए कि सीपीयू या जीपीयू पर प्रशिक्षित करना है या नहीं?

संपादित करें 1:

मुझे बस एक ब्लॉग पोस्ट मिला (संभवतः पुराना है; यह 2014 से है):

"... अधिकांश नेटवर्क कार्ड [s] केवल उस मेमोरी के साथ काम करते हैं जो CPU के साथ पंजीकृत है और इसलिए GPU को दो नोड्स के बीच GPU ट्रांसफर इस तरह होगा: GPU 1 से CPU 1 टू नेटवर्क कार्ड 1 से नेटवर्क कार्ड 2 से CPU 2 से 2 जीपीयू। इसका क्या मतलब है, अगर कोई धीमा नेटवर्क कार्ड चुनता है, तो एक कंप्यूटर पर कोई स्पीडअप नहीं हो सकता है। तेज नेटवर्क कार्ड के साथ, यदि क्लस्टर बड़ा है, तो एक की तुलना में GPU से स्पीडअप भी नहीं मिलता है। सीपीयू के रूप में सीपीयू नेटवर्क कार्ड के लिए बस तेजी से काम करते हैं ताकि उनके साथ बने रहें।

यही कारण है कि Google और Microsoft जैसी कई बड़ी कंपनियां अपने बड़े तंत्रिका नेटवर्क को प्रशिक्षित करने के लिए GPU क्लस्टर के बजाय CPU का उपयोग कर रही हैं। "

तो कुछ बिंदु पर, इस पोस्ट के अनुसार, यह CPU का उपयोग करने के लिए तेज़ हो सकता था। क्या अभी भी यही मामला है?

संपादित करें 2: हाँ, वह ब्लॉग पोस्ट बहुत अच्छी तरह से पुरानी हो सकती है क्योंकि:

अब ऐसा लगता है कि नोड के भीतर GPU PCIe बस के माध्यम से जुड़ा हुआ है, इसलिए संचार लगभग 6GiB / s पर हो सकता है। (उदाहरण के लिए: https://www.youtube.com/watch?v=el1iSlP1uOs , लगभग 35 मिनट)। स्पीकर का तात्पर्य है कि यह GPU1 से CPU से GPU2 तक जाने से तेज है। इसका मतलब होगा कि नेटवर्क कार्ड अब अड़चन नहीं है।


अपने ब्लॉग पोस्ट के साथ वह आदमी अच्छे अंक लाता है। मुझे उसका सारा औचित्य समझ में नहीं आया। हालांकि, यह तथ्य कि Google, फेसबुक, ट्विटर और शिक्षा के सभी प्रमुख गहन शिक्षण समूह अपने कोड को मुख्य रूप से GPU पर चलाते हैं, यह बताता है कि यह एक अच्छा विचार है। हालांकि पक्षपाती: nvidia.com/content/events/geoInt2015/LBrown_DL.pdf
जाह्नवीस

जवाबों:


28

अन्य कुछ उत्तरों के विपरीत, मैं किसी दूसरे विचार के बिना हमेशा GPU पर प्रशिक्षण के खिलाफ अत्यधिक सलाह दूंगा। यह छवियों और ग्रंथों पर गहरी सीखने के तरीकों के उपयोग से प्रेरित है, जहां डेटा बहुत समृद्ध है (उदाहरण के लिए बहुत सारे पिक्सेल = बहुत सारे चर) और मॉडल के समान कई लाखों पैरामीटर हैं। अन्य डोमेन के लिए, यह मामला नहीं हो सकता है।

'छोटा' से क्या तात्पर्य है? उदाहरण के लिए, क्या 100 छिपी इकाइयों वाली एकल-परत एमएलपी 'छोटी' होगी?

हां, यह निश्चित रूप से आधुनिक मानकों से बहुत छोटा है। जब तक आपके पास प्रशिक्षण के लिए पूरी तरह से अनुकूल GPU है (जैसे कि NVIDIA 1080 या NVIDIA टाइटन), मुझे यह जानकर आश्चर्य नहीं होगा कि आपका सीपीयू तेज था।

ध्यान दें कि आपके तंत्रिका नेटवर्क की जटिलता आपके इनपुट सुविधाओं की संख्या पर भी निर्भर करती है, न कि आपकी छिपी हुई परत में केवल इकाइयों की संख्या पर। यदि आपकी छिपी हुई परत में 100 इकाइयां हैं और आपके डेटासेट में प्रत्येक अवलोकन में 4 इनपुट विशेषताएं हैं, तो आपका नेटवर्क छोटा है (~ 400 पैरामीटर)। यदि इसके बजाय प्रत्येक अवलोकन में कुछ मेडिकल / बायोटेक संदर्भों के रूप में 1M इनपुट सुविधाएँ हैं, तो आपका नेटवर्क मापदंडों की संख्या के मामले में बहुत बड़ा है। मेरे उत्तर के शेष के लिए मैं मान रहा हूँ कि आपके पास कुछ इनपुट सुविधाएँ हैं। अवलोकन।

एक अच्छा उदाहरण मैंने सीपीयू बनाम जीपीयू प्रदर्शन की तुलना करने के लिए पाया है जब मैंने सुदृढीकरण सीखने का उपयोग करके पोकर बॉट को प्रशिक्षित किया था। सुदृढीकरण सीखने के लिए आप अक्सर यह नहीं चाहते हैं कि आपके तंत्रिका नेटवर्क में कई परतें हैं और हमने पाया कि हमें केवल कुछ मापदंडों के साथ कुछ परतों की आवश्यकता थी। इसके अलावा, इनपुट सुविधाओं की संख्या काफी कम थी। प्रारंभ में मैंने एक GPU (NVIDIA टाइटन) पर प्रशिक्षण दिया था, लेकिन सुदृढीकरण सीखने में एक लंबा समय लग रहा था क्योंकि इसमें बहुत सारे पुनरावृत्तियों की आवश्यकता होती है। सौभाग्य से, मैंने पाया कि मेरे सीपीयू पर प्रशिक्षण के बजाय मेरे प्रशिक्षण को 10 गुना तेज बना दिया गया था! यह केवल कहने के लिए है कि सीपीयू कभी-कभी प्रशिक्षण के लिए बेहतर हो सकता है।

क्या कोई अन्य मानदंड हैं जो यह तय करते समय विचार किया जाना चाहिए कि सीपीयू या जीपीयू पर प्रशिक्षित करना है या नहीं?

यह ध्यान रखना महत्वपूर्ण है कि GPU पर रहते हुए आप हमेशा अपने बैच आकार को बढ़ाकर संपूर्ण GPU मेमोरी को भरना चाहेंगे, जो कि CPU पर ऐसा नहीं है। सीपीयू पर बैच आकार में वृद्धि के समय जनसंपर्क में वृद्धि होगी। बैच। इसलिए, यदि आपके लिए बहुत बड़े बैच का आकार होना आवश्यक है (जैसे बहुत शोर के संकेत के कारण), तो GPU का उपयोग करना फायदेमंद हो सकता है। मैंने इस व्यवहार में अनुभव नहीं किया है और आम तौर पर छोटे बैच आकार पसंद किए जाते हैं।


थैंक यू @pir! क्या आपके पास कोई विशिष्ट संदर्भ है जहां मैं अधिक पढ़ सकता हूं?
स्टैटसॉरसिएस

तुलना करने और देखने के लिए आप आसानी से वीजीजी के मापदंडों की संख्या पा सकते हैं और देख सकते हैं कि आपका नेटवर्क तुलना में छोटा है।
पीर

3
मैंने छोटे नेटवर्क पर बहुत अधिक सीपीयू / जीपीयू की तुलना नहीं देखी है क्योंकि यही वह नहीं है जो बड़ी कंपनियों और अनुसंधान प्रयोगशालाओं में रुचि रखते हैं।
पीर

@StatsSorceress यदि आप इसे अपने दम पर जांचना चाहते हैं, तो बस एक साधारण केरस MLP सेटअप क्यों न करें और GPU बनाम CPU पर प्रदर्शन का परीक्षण करें? इसके अलावा, मेरे अपडेटेड उत्तर को देखें। आपके नेटवर्क का आकार।
पीर

5

सीपीयू शाखा का प्रबंधक है, वह सब कुछ कर सकता है, लेकिन कार्यों को सौंपने के अलावा वह महान नहीं है। हालांकि, GPU आपकी मशीन में छिपा हुआ एक गणितज्ञ है। अगर आप कोई गणित की भारी प्रक्रिया कर रहे हैं तो आपको अपने GPU का उपयोग करना चाहिए। हमेशा।

यदि आप मशीन सीखने के लिए किसी भी लोकप्रिय प्रोग्रामिंग भाषा का उपयोग कर रहे हैं जैसे कि अजगर या MATLAB तो यह आपके कंप्यूटर को बताने के लिए कोड का एक-लाइनर है जिसे आप अपने GPU पर चलाना चाहते हैं।

आपको अपनी मशीन के सभी कोर का उपयोग करना भी सुनिश्चित करना चाहिए। इसका अर्थ है समानांतर कंप्यूटिंग का उपयोग करना। विशेष रूप से तंत्रिका नेटवर्क के लिए जहां ऑपरेशन स्वतंत्र रूप से किया जा सकता है, यह आपकी गति को बहुत अधिक बढ़ाने वाला है।


4
मैंने पाया है कि कभी-कभी और GPU से डेटा को स्थानांतरित करने का ओवरहेड पूरी तरह से समानता से गति में वृद्धि को मिटा देता है। GPU के लिए जाना हमेशा एक अच्छा विचार नहीं है।
एड्रियन कीस्टर

1
यह आपके मॉडल की जटिलता पर निर्भर करता है। यदि आप एक सरल के-एनएन का प्रशिक्षण ले रहे हैं तो शायद यह सार्थक नहीं है। हालाँकि, यदि आप किसी ऐसे मॉडल का प्रशिक्षण ले रहे हैं जिसके लिए एक व्युत्क्रम मैट्रिक्स या एक तंत्रिका नेटवर्क की आवश्यकता होती है, जिसके लिए कई परिणामी मैट्रिक्स संचालन की आवश्यकता होती है, तो यह हमेशा एक अच्छा विचार है कि GPU के लिए विकल्प चुना जाए।
जाह्नवीस

1
@ AdrianKeister मैं सहमत हूं। कि मैं अपने उत्तर में क्या पाने की कोशिश कर रहा था। ओपी द्वारा उल्लिखित नेटवर्क के लिए जो अड़चन होगी।
पीर

1
मेरी मशीन का उपयोग कर जीपीयू पर 100 छिपी हुई इकाइयाँ तेज़ हैं। सीपीयू के तेज होने के लिए मुझे बहुत कम संख्या में छिपी हुई इकाइयों की आवश्यकता होगी। इसके अलावा, मैं हमेशा अपने प्रशिक्षण को बैचों में करने के लिए तैयार हूं। इस मामले में मुझे संदेह है कि सीपीयू डेटा पर विचार करने वाली अड़चन होगी जो पर्याप्त घनी है।
JahKnows

3

मैं पहले ऐसे ही प्रश्नों के कुछ उद्धरणों का संदर्भ लूंगा:

जब यह मैट्रिक्स ऑपरेशन की बात आती है, तो आप दो बार नहीं सोचते हैं, आप हमेशा GPU के लिए चुनते हैं। स्रोत

एक GPU में समानांतर वास्तुकला वेक्टर और मैट्रिक्स संचालन के लिए अच्छी तरह से अनुकूलित है। स्रोत

इसलिए यदि आप इन प्रश्नों को पढ़ते हैं, तो आप देखेंगे कि वे मामले की परवाह किए बिना GPU का उपयोग करने की सलाह देते हैं; यह हमेशा कुछ सुधार प्रदान करेगा।

आपने पढ़ा हो सकता है कि 'छोटे' नेटवर्क को सीपीयू के साथ प्रशिक्षित किया जाना चाहिए, इसका कारण यह है कि सिर्फ एक छोटे नेटवर्क के लिए जीपीयू प्रशिक्षण को लागू करने में सीपीयू के साथ प्रशिक्षण से अधिक समय लग सकता है - इसका मतलब यह नहीं है कि जीपीयू धीमा हो जाएगा।

एक 100-हिडन यूनिट नेटवर्क एक प्रकार का छोटा है , मैं इसे बड़े गहरे नेटवर्क के सापेक्ष एक छोटा नेटवर्क कहूँगा । आवर्तक आर्किटेक्चर (ज्यादातर) में थ्योरी फीड नेटवर्क के लिए अधिक सिनैप्स हैं, इसलिए 100-छिपी इकाइयां आरएनएन 100-छिपी इकाई एफएफएन की तुलना में 'बड़ी' हैं।


क्या यह सच नहीं है कि अगर आपके पास 100 इकाइयों की एक छिपी हुई परत के साथ एक एमएलपी है, जिसमें वजन साझा करने के कारण 100 छिपे हुए इकाइयों के साथ मानक आरएनएन के समान पैरामीटर हैं? इसके और अधिक 'सिंकैप्स' हैं - अधिक 'सक्रियण' - लेकिन मापदंडों की समान संख्या, है ना?
स्टैटसॉरसस

मैं 'वेट' शब्द के बंटवारे से परिचित नहीं हूं। इसमें समान मात्रा में सक्रियता है, लेकिन अधिक कनेक्शन इतने अधिक पैरामीटर ...
थॉमस डब्ल्यू

वेट शेयरिंग का मतलब है कि आरएनएन में एक छिपे हुए लेयर से अगली हिडन लेयर तक का वेट मैट्रिक्स वही है; यह एक ही 'U' मैट्रिक्स है, जिसे पूरे समय में दोहराया जाता है। इसके अलावा, इनपुट से छिपी हुई परत तक का भार समय के दौरान समान होता है।
स्टैटसॉरसिएस

@StatsSorceress मैं मैट्रिस के साथ काम करने से परिचित नहीं हूं। हां, एक छिपी हुई परत से अगले तक वजन मैट्रिक्स समान है। हालांकि, कुल में अधिक कनेक्शन हैं (क्योंकि एक परत भी PREVIOUS परत से जुड़ सकती है)। मुझे यकीन नहीं है कि मैं कैसे समझा सकता हूं, लेकिन एक आरएनएन में हमेशा अधिक पैरामीटर होंगे क्योंकि अधिक जुड़े परतें हैं ..
थॉमस डब्ल्यू

हां, मैं समझता हूं कि शारीरिक रूप से अधिक पैरामीटर हैं, लेकिन उन मापदंडों में से कई समान मूल्य लेते हैं, जिसका अर्थ है कि एक एमएलपी और आरएनएन में मापदंडों की प्रभावी संख्या समान इनपुट आयामों और समान संख्या में छिपे हुए आयामों की संख्या होगी वही।
स्टैटसॉरसिएस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.