बैच आकार 2 की शक्ति रखने का क्या लाभ है?


19

मशीन सीखने में मॉडल का प्रशिक्षण करते समय, कभी-कभी बैच आकार को 2 की शक्ति तक रखना क्यों फायदेमंद होता है? मैंने सोचा कि एक आकार का उपयोग करना सबसे अच्छा होगा जो आपके GPU मेमोरी / RAM में सबसे बड़ा है।

यह उत्तर दावा करता है कि कुछ पैकेजों के लिए, 2 की शक्ति एक बैच आकार के रूप में बेहतर है। क्या कोई इसके लिए विस्तृत विवरण / लिंक प्रदान कर सकता है? क्या यह सभी अनुकूलन एल्गोरिदम (ग्रेडिएंट डिसेंट, बैकप्रॉपैजेशन, आदि) या उनमें से कुछ के लिए ही सही है?

जवाबों:


24

यह GPU के भौतिक प्रोसेसर (PP) पर वर्चुअल प्रोसेसर (VP) के संरेखण की समस्या है। चूंकि पीपी की संख्या अक्सर 2 की शक्ति होती है, इसलिए 2 की शक्ति से अलग वीपी की संख्या का उपयोग करने से खराब प्रदर्शन होता है।
आप पीपी की संख्या के स्लाइस के ढेर के रूप में पीपी पर वीपी की मैपिंग देख सकते हैं ।
कहते हैं कि आपको 16 पीपी मिले हैं।
आप उन पर 16 वीपी मैप कर सकते हैं: 1 वीपी 1 पीपी पर मैप किया गया है।
आप उन पर 32 वीपी मैप कर सकते हैं: 16 वीपी के 2 स्लाइस, 1 पीपी 2 वीपी के लिए जिम्मेदार होंगे।
आदि निष्पादन के दौरान, प्रत्येक पीपी 1 वीपी की नौकरी को निष्पादित करेगा, जिसके लिए वह जिम्मेदार है, फिर 2 वीपी की नौकरी आदि।
यदि आप 17 वीपी का उपयोग करते हैं, तो प्रत्येक पीपी अपने 1 पीपी की नौकरी को अंजाम देगा, फिर 1 पीपी होगा 17 वीं और की नौकरी निष्पादित करेंअन्य लोग कुछ भी नहीं करेंगे (नीचे दिए गए)।
यह SIMD प्रतिमान ( 70 के दशक में वेक्टर कहा जाता है ) के कारण होता है जिसका उपयोग GPU द्वारा किया जाता है। इसे अक्सर डेटा समानांतरवाद कहा जाता है: सभी पीपी एक ही समय में एक ही काम करते हैं लेकिन अलग-अलग डेटा पर। Https://en.wikipedia.org/wiki/SIMD देखें ।
अधिक सटीक रूप से, 17 वीपी के साथ उदाहरण में, एक बार किए गए 1 स्लाइस का काम (सभी पीपीपी अपने 1 वीपी के काम को पूरा करके), सभी पीपी एक ही काम करेंगे (2 वें वीपी), लेकिन केवल एक में कुछ है पर काम करने के लिए डेटा
सीखने से कोई लेना-देना नहीं। यह केवल प्रोग्रामिंग सामान है।


क्या यह कहना अधिक सटीक होगा कि बैच का आकार पीपी की संख्या का एक से अधिक होना चाहिए? अर्थात्, आपके उदाहरण में हम 16x3 = 48 वीपी से 16 पीपी तक मैप कर सकते हैं?
पश्चिम

हाँ। ठीक है ... यदि आप मैपिंग VP -> PP, अपने आप से करते हैं, तो सुनिश्चित करें कि आप 100% सही हैं। यदि आप एक पुस्तकालय का उपयोग करते हैं, और 80 वीपी के लिए पूछते हैं। मुझे यकीन नहीं है। मैं यह नहीं कह रहा कि तुम गलत हो। यदि अनुपात 2 की शक्ति है, तो आप बहुत ही शास्त्रीय और आसान अनुकूलन का उपयोग कर सकते हैं। मेमोरी एक्सेस का उपयोग करें। यदि VP के ऊपर वाले पड़ोसी # 2 की शक्ति नहीं है, तो 5 का कहना है कि, लिबास O (log_2 (n)) का उपयोग पड़ोसियों की मेमोरी तक आसानी से करने में सक्षम नहीं होगा।
jcm69

@ jcm69 आप वीपी मेमोरी एक्सेस के लिए log_2 (n) एक्सेस समय के लिए लिंक समझा या दे सकते हैं
अरायन सिंह

यह कंप्यूटर विज्ञान में वस्तुओं को संभालने के बारे में एक सामान्य विचार है। जब आप सुनिश्चित होते हैं कि ऑब्जेक्ट 2 नियमों की शक्ति का पालन करते हैं, तो उन्हें बाइनरी सर्च ट्री, बाइनरी शिफ्ट्स आदि द्वारा आसानी से और सुरक्षित रूप से प्रबंधित किया जा सकता है। जब आप सुनिश्चित नहीं होते हैं, तो ठीक है, आपको कुछ अतिरिक्त परीक्षण और अधिक जटिल अहंकार करना पड़ सकता है। वैसे भी, यह प्रारंभिक प्रश्न से थोड़ा दूर है;)
jcm69

1

संपूर्ण विचार आपके मिनी-बैच को पूरी तरह से सीपीयू / जीपीयू में फिट करने का है। चूंकि, सभी सीपीयू / जीपीयू दो की शक्ति में भंडारण क्षमता के साथ आता है, इसलिए मिनी-बैच के आकार को दो की शक्ति रखने की सलाह दी जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.