2017-03-31 17 views
8

चूंकि मेरे पास केवल एएमडी ए 10-7850 एपीयू है, और $ 800- $ 1200 एनवीआईडीआईए ग्राफिक्स कार्ड पर खर्च करने के लिए धन नहीं है, इसलिए मैं tensorflow के माध्यम से गहरी शिक्षा को तेज करने के लिए संसाधनों के कारण बनाने की कोशिश कर रहा हूं/keras।मैं गैर-एनवीआईडीआईए सेटअप पर गहरी शिक्षा कैसे बढ़ा सकता हूं?

प्रारंभ में, मैंने टेन्सफोर्लो के पूर्व-संकलित संस्करण का उपयोग किया था। शुरुआत 1 में 1 युग की गणना करने के लिए लगभग 1000-1200 सेकंड लगेंगे। यह दर्दनाक धीमा रहा है।

गणना तेज करने के लिए, मैंने पहले स्वयं को संकलित (एवीएक्स, और एसएसई 4 निर्देशों का उपयोग करके) टेन्सफोर्लो को स्वयं संकलित किया। यह गणना समय में लगभग 40% की कमी का कारण बनता है। उपरोक्त प्रदर्शन किए गए समान कंप्यूटेशंस में गणना करने के लिए केवल 600 सेकंड लगते हैं। यह लगभग सहनशील है - जैसा कि आप पेंट सूखी देख सकते हैं।

मैं गणना समय कम करने के तरीकों की तलाश में हूं। मेरे पास केवल एक एकीकृत एएमडी ग्राफिक्स कार्ड है जो एपीयू का हिस्सा है। (कैसे) (सी/सी) मैं इस संसाधन का उपयोग गणना को तेज करने के लिए और भी अधिक करता हूं?

अधिकतर, मान लें कि समान मौद्रिक प्रतिबंध और इंटेल सेटअप वाले अन्य लोग हैं। अलग-अलग एनवीआईडीआईए कार्ड के बिना कोई भी अपने एकीकृत ग्राफिक्स चिप्स या अन्यथा गैर-एनवीआईडीआईए सेटअप का उपयोग सीपीयू-केवल प्रदर्शन से तेज करने के लिए कैसे कर सकता है? क्या यह संभव है? क्यों नहीं? इस लक्ष्य को प्राप्त करने के लिए क्या करने की आवश्यकता है? या यह निकट भविष्य में (2-6 महीने) संभव होगा? कैसे?

उत्तर

15

कुछ महीनों के लिए इस विषय पर शोध के बाद, मैं 3.5 संभव पथ आगे देख सकते हैं:

1.) Tensorflow + OpenCL के रूप में ऊपर टिप्पणी में उल्लेख किया है:

वहाँ कुछ आंदोलन चल रहा प्रतीत हो रहा है यह क्षेत्र। कोडेप्ले में, लुकाज़ इवांस्की ने ओपनक्ल के साथ चलाने के लिए टेन्सफोर्लो को कैसे प्राप्त किया है, इस पर एक व्यापक उत्तर पोस्ट किया है (मैं केवल ऊपर बताए गए लिंक को ही प्रदान करूंगा क्योंकि जानकारी वहां बदल सकती है): https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

एकीकृत ग्राफिक्स का उपयोग करने की क्षमता आकर्षक है। एपीयू के साथ इस संयोजन के उपयोग की खोज करना भी लायक है। लेकिन मुझे यकीन नहीं है कि यह कितना अच्छा काम करेगा क्योंकि OpenCl समर्थन अभी भी विकास में शुरुआती है, और हार्डवेयर समर्थन बहुत सीमित है। इसके अलावा, ओपनक्ल अनुकूलित कोड की हस्तलिखित लाइब्रेरी के समान नहीं है। (अद्यतन 2017-04-24: मुझे कुछ मुद्दों में चलने के बाद संकलित करने के लिए कोड मिला है here!) दुर्भाग्यवश, मेरी SETUP (iGPU) पर गति सुधार की आशा की गई।

CIFAR 10 डेटासेट:

  1. Tensorflow (पिप एके unoptimized के माध्यम से): 390% सीपीयू उपयोग पर 1700sec/युग।
  2. टेन्सफोर्लो (एसएसई 4, एवीएक्स): 1100sec/युग 3 9 0% सीपीयू उपयोग पर।
  3. टेन्सफोर्लो (ओपनक्ल + आईजीपीयू): 5800 सीसी/युग 150% सीपीयू और 100% जीपीयू उपयोग पर।

आपका लाभ महत्वपूर्ण रूप से भिन्न हो सकता है। तो मैं सोच रहा हूं कि आपके सेटअप पर अन्य लोग अपेक्षाकृत बोल रहे हैं (अप्रत्याशित बनाम अनुकूलित बनाम ओपनक्ल)?

क्या ध्यान दिया जाना चाहिए: ओपनक्ल कार्यान्वयन का अर्थ है कि सभी भारी गणना GPU पर की जानी चाहिए। (2017/4/29 को अपडेट किया गया) लेकिन हकीकत में यह अभी तक मामला नहीं है क्योंकि कुछ फ़ंक्शंस अभी तक लागू नहीं किए गए हैं। यह unnecessary copying back and forth of data between CPU and GPU ram की ओर जाता है। फिर, imminent changes स्थिति में सुधार करना चाहिए। और इसके अलावा, उन लोगों के लिए जो मदद करने में रुचि रखते हैं और जो चीजों को गति देने की इच्छा रखते हैं, हम कुछ ऐसा कर सकते हैं जिसका खुलासा ओपनक्ल के साथ टेंसफोर्लो के प्रदर्शन पर एक मापनीय प्रभाव होगा।

लेकिन जैसा कि अब यह है: 1 iGPU < < एसएसई + एवीएक्स के साथ 4 सीपीयूएस। शायद बड़े रैम और/या ओपनक्ल 2.0 कार्यान्वयन के साथ बीफियर जीपीयू एक बड़ा अंतर बना सकते थे।

इस बिंदु पर, मुझे यह जोड़ना चाहिए कि कम से कम कैफे और/या थेनो + ओपनक्ल के साथ इसी तरह के प्रयास चल रहे हैं। सभी मामलों में सीमित कदम OpenCl प्रतिमान के लिए CUDA/cuDNN कार्यक्षमता का मैन्युअल पोर्टिंग प्रतीत होता है।

2.) RocM + MIOpen

RocM Radeon ओपन कंप्यूट के लिए खड़ा है और पहल की गोलमाल है कि हो रहा है/कर देगा गहरे सीखने गैर NVIDIA (ज्यादातर Radeon उपकरणों) पर संभव। इसमें 3 प्रमुख घटक शामिल हैं:

  • एचआईपी: एक उपकरण जो सीयूडीए कोड को कोड में परिवर्तित करता है जिसे एएमडी जीपीयू द्वारा उपभोग किया जा सकता है।
  • ROCK: AMD CPU + GPU डिवाइस के लिए 64-बिट लिनक्स कर्नेल ड्राइवर।
  • एचसीसी: एक सी/सी ++ कंपाइलर जो एक विषम प्रणाली आर्किटेक्चर पर्यावरण (एचएसए) के लिए कोड में कोड संकलित करता है।

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

मेरे लिए यहां समस्या यह है कि रोकम गहरी सीखने पुस्तकालयों के निर्माण के लिए उपकरण प्रदान कर रहा है। वे खुद गहरी सीखने पुस्तकालयों का प्रतिनिधित्व नहीं करते हैं। एक डेटा वैज्ञानिक के रूप में जो उपकरण विकास पर केंद्रित नहीं है, मुझे बस कुछ काम करना चाहिए। और मैं जो सीखना चाहता हूं उसे बनाने में दिलचस्पी नहीं लेता हूं। उस कंपनी में अच्छी तरह से करने के लिए दिन में पर्याप्त घंटे नहीं हैं।

एनवीआईडीआईए निश्चित रूप से सीयूडीए और सीयूडीएनएन है जो एनवीआईडीआईए जीपीयू के लिए अनुकूलित हाथ से तैयार किए गए असेंबलर कोड की मुक्ति है। इन प्रमुख स्वामित्व पुस्तकालयों के शीर्ष पर सभी प्रमुख गहरी सीखने के ढांचे का निर्माण। एएमडी में वर्तमान में ऐसा कुछ भी नहीं है।

मुझे अनिश्चितता है कि एनवीआईडीआईए इस संबंध में कितनी सफलतापूर्वक एएमडी प्राप्त करेगा। लेकिन 4/3/2017 here पर कार्लोस पेरेज़ द्वारा पोस्ट किए गए एक लेख में एएमडी के इरादे क्या हैं, इस पर कुछ प्रकाश दिखाई दे रहा है। हाल ही में lecture at Stanford रेजेन, वेगा और गहरी सीखने के साथ सामान्य शब्दों में भी बात करता है। संक्षेप में, लेख में कहा गया है कि एमआईओपेन एएमडी उपकरणों के लिए अनुकूलित गहरे सीखने के कार्यों की इस हस्तनिर्मित लाइब्रेरी का प्रतिनिधित्व करेगा। यह पुस्तकालय 2017 के एच 1 में रिलीज होने वाला है। मुझे अनिश्चितता है कि इन पुस्तकालयों को प्रमुख गहरे सीखने के ढांचे में कितनी जल्दी शामिल किया जाएगा और इस समय कार्यात्मक कार्यान्वयन का दायरा क्या होगा।

लेकिन स्पष्ट रूप से, AMD has already worked with the developers of Caffe to "hippify" the code basis। असल में, सीयूडीए कोड स्वचालित रूप से एचआईपी के माध्यम से सी कोड में परिवर्तित हो जाता है। स्वचालन कोड आधार के विशाल बहुमत का ख्याल रखता है, केवल 0.5% से कम कोड को बदलना पड़ता है और मैन्युअल ध्यान देने की आवश्यकता होती है। मैन्युअल अनुवाद को ओपनसीएल कोड में तुलना करें, और एक को यह महसूस हो रहा है कि यह दृष्टिकोण अधिक टिकाऊ हो सकता है। मैं इस बारे में स्पष्ट नहीं हूं कि निचले स्तर के असेंबलर भाषा अनुकूलन में आते हैं।

(2017-05-19 अपडेट करें) लेकिन एएमडी वेगा कार्ड की आगामी रिलीज के साथ (पेशेवर फ्रंटियर संस्करण कार्ड उपभोक्ताओं के लिए नहीं होगा पहले), संकेत हैं कि major deep learning frameworks will be supported through the MIOpen framework। आज जारी किए गए Forbes article ने प्रदर्शन के संदर्भ में पिछले कुछ महीनों में एमओओपेन की प्रगति को दिखाया है: यह महत्वपूर्ण प्रतीत होता है। (अपडेट 2017-08-25) MiOpen आधिकारिक तौर पर जारी किया गया है। हम अब यहां परिकल्पनाओं में बात नहीं कर रहे हैं। अब हमें यह जानने की जरूरत है कि यह ढांचा कितना अच्छा काम करता है।

3.) नियॉन

Neon Nervana के (अब इंटेल द्वारा अधिग्रहीत) खुला स्रोत गहरे सीखने रूपरेखा है। इस ढांचे का उल्लेख करने का कारण यह है कि यह उपयोग करने के लिए काफी सरल है। वाक्यविन्यास केरास के रूप में आसान और सहज ज्ञान युक्त है। अधिक महत्वपूर्ण बात यह है कि, इस ढांचे ने उन कंप्यूटेशंस के लिए कुछ हाथ से तैयार किए गए असेंबलर भाषा अनुकूलन के कारण some benchmarks पर टेन्सफोर्लो की तुलना में 2x तेज तक की गति हासिल की है। संभावित रूप से, 500 सेकेंड/युग से 300 सेकेंड/युग तक गणना गणना काटने पर छींकने के लिए कुछ भी नहीं है। 300 सेकंड = 5 मिनट। तो एक घंटे में 15 युग मिल सकता है। और लगभग 3.5 घंटे में लगभग 50 युग! लेकिन आदर्श रूप में, मैं एक घंटे से कम समय में इन प्रकार की गणना करना चाहता हूं। उन स्तरों तक पहुंचने के लिए, मुझे एक जीपीयू का उपयोग करने की आवश्यकता है, और इस बिंदु पर, केवल एनवीआईडीआईए इस संबंध में पूर्ण समर्थन प्रदान करता है: जब एक जीपीयू उपलब्ध होता है तो नियॉन भी सीयूडीए और सीयूडीएनएन का उपयोग करता है (और बेशक, इसे एक एनवीआईडीआईए जीपीयू होना चाहिए)। यदि आपके पास अन्य इंटेल हार्डवेयर तक पहुंच है तो यह निश्चित रूप से आगे बढ़ने का एक वैध तरीका है। इसके बाद, नियॉन को गैर-एनवीआईडीआईए सेटअप (जैसे नर्वाना के कस्टम सीपीयू, और अब इंटेल एफपीजीए या ज़ीओन फ़िस) पर भी काम करने के लिए प्रेरित करने के लिए एक प्रेरणा से विकसित किया गया था।

3,5) इंटेल Movidius

अद्यतन 2017/08/25:। मैं this article बारे में जाना। इंटेल ने यूएसबी 3.0-स्टिक-आधारित "गहरी शिक्षा" त्वरक जारी किया है। जाहिर है, यह कैफे के साथ काम करता है और उपयोगकर्ता को नेटवर्क और अनुमान के सामान्य कैफे-आधारित ठीक-ट्यूनिंग करने की अनुमति देता है। यह महत्वपूर्ण तनाव है: यदि आप अपने नेटवर्क को खरोंच से प्रशिक्षित करना चाहते हैं, तो शब्द यहां बहुत संदिग्ध है। इसलिए मैं मानता हूं कि नेटवर्क को ठीक-ठीक करने के अलावा, प्रशिक्षण को खुद को समानांतर गणना के साथ कुछ भी किया जाना चाहिए। वास्तविक किकर हालांकि यह है: जब मैंने मूल्य निर्धारण के लिए चेक किया तो इस छड़ी का केवल $ 79 खर्च होता है। यह आपके औसत एनवीआईडीआईए 1070-80 (टीआई) कार्ड की लागत की तुलना में कुछ भी नहीं है। यदि आप केवल कुछ संबंधित कार्यों के लिए पहले से उपलब्ध सामान्य नेटवर्क टोपोलॉजीज का उपयोग करके कुछ दृष्टि समस्याओं से निपटना चाहते हैं, तो आप इस छड़ी का उपयोग अपने स्वयं के उपयोग के लिए ठीक से ट्यून करने के लिए कर सकते हैं, फिर कोड संकलित कर सकते हैं और इसे जल्दी से अनुमान लगाने के लिए इस छड़ी में डाल सकते हैं। कई उपयोग मामलों को इस छड़ी से ढंका जा सकता है, और फिर से $ 79 के लिए यह लायक हो सकता है। यह इंटेल है, वे इंटेल पर बाहर जाने का प्रस्ताव कर रहे हैं। उनका मॉडल प्रशिक्षण के लिए क्लाउड (यानी नर्वाना क्लाउड) का उपयोग करना है। फिर, प्रोटोटाइप अनुमान या अनुमान के लिए इस चिप का उपयोग करें जहां ऊर्जा खपत महत्वपूर्ण है। क्या यह सही दृष्टिकोण है या पाठक के उत्तर देने के लिए नहीं छोड़ा गया है।

इस समय, ऐसा लगता है कि एनवीआईडीआईए के बिना गहरी शिक्षा अभी भी महसूस करना मुश्किल है। कुछ सीमित गति लाभ मुश्किल हैं लेकिन ओपनक्ल के उपयोग के माध्यम से संभावित रूप से संभव है। अन्य पहलों को वादा करने का वादा किया गया है लेकिन इन पहलुओं के वास्तविक प्रभाव को हल करने में समय लगेगा।

+0

क्या आप मुझे _CIFAR 10 Dataset_ के साथ संदर्भित बेंचमार्क को चलाने के निर्देशों पर निर्देश दे सकते हैं? –

2

यदि आपका प्लेटफ़ॉर्म ओपनक्ल का समर्थन करता है तो आप इसे टेंसफोर्लो के साथ उपयोग करने के लिए देख सकते हैं। लिनक्स पर this github repository पर इसके लिए कुछ प्रयोगात्मक समर्थन है। कुछ प्रारंभिक निर्देश the documentation section of of this github repository पर हैं।

+0

यहां ओपनसीएल कार्यान्वयन की स्थिति के बारे में कुछ उच्च स्तर की जानकारी भी है, साथ ही मामले में भी मदद करता है।लेकिन बेनोइट की शाखा लिंक करने के लिए सही जगह है https://www.codeplay.com/portal/02-14-17-bringing-the-acceleration-of-opencl-to-tensorflow-with-sycl –

+0

आशा है कि आप ' टी दिमाग ... मैं इस सप्ताहांत का जवाब दूंगा। – Thornhale

संबंधित मुद्दे