इस लेख के लिए मुख्य छवि हैकरनून केएआई इमेज जेनरेटर द्वारा "कंप्यूटर को देखने वाले रोबोट" के माध्यम से तैयार की गई थी।
मशीन लर्निंग (एमएल) वर्कलोड को तेजी से परिणाम देने के लिए कुशल बुनियादी ढांचे की आवश्यकता होती है। मॉडल प्रशिक्षण बड़े डेटा सेट पर बहुत अधिक निर्भर करता है। इस डेटा को स्टोरेज से ट्रेनिंग क्लस्टर तक फ़नल करना किसी भी एमएल वर्कफ़्लो का पहला चरण है, जो मॉडल प्रशिक्षण की दक्षता पर महत्वपूर्ण प्रभाव डालता है।
यह आलेख एंड-टू-एंड मशीन लर्निंग पाइपलाइनों के लिए ऑर्केस्ट्रेटिंग डेटा के एक नए समाधान पर चर्चा करेगा जो उपरोक्त प्रश्नों को संबोधित करता है। मैं मशीन सीखने के लिए डेटा पाइपलाइन का अनुकूलन करने के लिए एक नई तकनीक, डेटा ऑर्केस्ट्रेशन का प्रस्ताव देने के बाद आम चुनौतियों और नुकसान की रूपरेखा तैयार करूंगा।
एंड-टू-एंड मशीन लर्निंग पाइपलाइन डेटा प्री-प्रोसेसिंग और क्लींजिंग से लेकर मॉडल ट्रेनिंग से लेकर अनुमान तक के चरणों का एक क्रम है। प्रशिक्षण पूरे वर्कफ़्लो का सबसे महत्वपूर्ण और संसाधन-गहन हिस्सा है।
निम्नलिखित आरेख एक विशिष्ट एमएल पाइपलाइन दिखाता है। यह डेटा संग्रह से शुरू होता है, फिर डेटा तैयार करना और अंत में मॉडल प्रशिक्षण आता है। डेटा एकत्र करने के चरण के दौरान, डेटा इंजीनियरों के लिए डेटा को सुलभ बनाने के लिए डेटा प्लेटफ़ॉर्म इंजीनियरों को आमतौर पर महत्वपूर्ण समय लगता है, जो डेटा वैज्ञानिकों को मॉडल बनाने और पुनरावृत्त करने के लिए डेटा तैयार करते हैं।
प्रशिक्षण चरण के दौरान, मॉडल बनाने वाले जीपीयू को डेटा की निरंतर फीडिंग सुनिश्चित करने के लिए डेटा की अभूतपूर्व मात्रा को संसाधित किया जाता है। यह जरूरी है कि डेटा को एमएल की जटिलता और उसके निष्पादन योग्य वास्तुकला का समर्थन करने के लिए प्रबंधित किया जाए। डेटा पाइपलाइन में, प्रत्येक चरण अपनी तकनीकी चुनौतियों को प्रस्तुत करता है।
प्रशिक्षण बड़े डेटासेट से लाभान्वित होता है, इसलिए सभी प्रासंगिक स्रोतों से डेटा एकत्र करना महत्वपूर्ण है। जब डेटा झीलों, डेटा वेयरहाउस और ऑब्जेक्ट स्टोर में रहता है, चाहे ऑन-प्रिमाइसेस, क्लाउड में, या कई भौगोलिक स्थानों में वितरित किया जाता है, तो सभी डेटा को एक अखंड स्रोत में संयोजित करना संभव नहीं है। डेटा साइलो के साथ, नेटवर्क पर रिमोट एक्सेस अनिवार्य रूप से विलंबता का कारण बनता है। वांछित प्रदर्शन को बनाए रखते हुए डेटा को कैसे सुलभ बनाया जाए, यह एक महत्वपूर्ण चुनौती है।
डेटा तैयार करना संग्रह चरण से डेटा प्राप्त करने के साथ शुरू होता है और मॉडल को प्रशिक्षित करने के लिए डेटा देने से पहले सफाई, ईटीएल और परिवर्तन शामिल है। यदि इस चरण को अलगाव में माना जाता है, तो डेटा पाइपलाइन को क्रमबद्ध किया जाता है और प्रशिक्षण क्लस्टर के लिए तैयार किए गए डेटा पर प्रतीक्षा करते समय अतिरिक्त समय बर्बाद होता है। इसलिए, प्लेटफ़ॉर्म इंजीनियरों को यह पता लगाना चाहिए कि समानांतर डेटा पाइपलाइन कैसे बनाई जाए और कुशल डेटा साझाकरण और मध्यवर्ती परिणामों के कुशल भंडारण दोनों को सक्षम किया जाए।
मॉडल प्रशिक्षण के लिए सैकड़ों टेराबाइट डेटा को संसाधित करने की आवश्यकता होती है, अक्सर बड़ी संख्या में छोटी फ़ाइलें जैसे चित्र और ऑडियो फ़ाइलें। प्रशिक्षण में पुनरावृत्तियों को शामिल किया जाता है जिसके लिए युगों को कई बार चलाने की आवश्यकता होती है, जिससे डेटा तक लगातार पहुंच होती है। जीपीयू को लगातार डेटा के साथ फीड करके उसे व्यस्त रखना जरूरी है। I/O को ऑप्टिमाइज़ करना और GPU के लिए आवश्यक थ्रूपुट को बनाए रखना आसान नहीं है।
इससे पहले कि मैं विभिन्न समाधानों के बारे में बात करूँ, आइए एक सरलीकृत परिदृश्य स्थापित करें, जैसा कि नीचे दिए गए चित्र में दिखाया गया है। यहां, हम एक GPU क्लस्टर का उपयोग करके क्लाउड में प्रशिक्षण दे रहे हैं, जिसमें TensorFlow को ML फ्रेमवर्क के रूप में चलाने वाले कई नोड हैं। पूर्व-संसाधित डेटा Amazon S3 में संग्रहीत है। सामान्य तौर पर, इस डेटा को प्रशिक्षण क्लस्टर में प्राप्त करने के दो तरीके हैं। हम उन पर आगे चर्चा करेंगे।
दृष्टिकोण 1: स्थानीय संग्रहण में डुप्लिकेट डेटा
पहले दृष्टिकोण में, संपूर्ण डेटासेट को प्रशिक्षण के लिए दूरस्थ संग्रहण से प्रत्येक सर्वर के स्थानीय संग्रहण में दोहराया जाता है, जैसा कि नीचे दिखाया गया है। इसलिए, डेटा स्थानीयता की गारंटी है, और प्रशिक्षण कार्य रिमोट स्टोरेज से इसे पुनर्प्राप्त करने के बजाय स्थानीय से इनपुट पढ़ते हैं।
डेटा पाइपलाइन और I/O परिप्रेक्ष्य से, यह दृष्टिकोण उच्चतम I/O थ्रुपुट प्रदान करता है क्योंकि सभी डेटा स्थानीय हैं। जीपीयू को शुरुआत में छोड़कर व्यस्त रखा जाएगा क्योंकि प्रशिक्षण को ऑब्जेक्ट स्टोरेज से प्रशिक्षण क्लस्टर में पूरी तरह से कॉपी किए जाने के लिए डेटा की प्रतीक्षा करनी चाहिए।
फिर भी, यह दृष्टिकोण सभी स्थितियों के लिए उपयुक्त नहीं है।
सबसे पहले, डेटासेट को कुल स्थानीय संग्रहण में फिट होना चाहिए। जैसे-जैसे इनपुट डेटासेट का आकार बढ़ता है, डेटा कॉपी प्रक्रिया लंबी और अधिक त्रुटि-प्रवण हो जाती है, जिससे GPU संसाधनों की बर्बादी में अधिक समय लगता है।
दूसरा, प्रत्येक प्रशिक्षण मशीन में बड़ी मात्रा में डेटा कॉपी करने से स्टोरेज सिस्टम और नेटवर्क पर महत्वपूर्ण दबाव पड़ता है। ऐसी स्थितियों में जहां इनपुट डेटा अक्सर बदलता रहता है, डेटा सिंक्रोनाइज़ेशन बहुत जटिल हो सकता है।
अंत में, मैन्युअल रूप से डेटा की प्रतियां बनाना समय लेने वाली और त्रुटि-प्रवण है क्योंकि क्लाउड स्टोरेज पर डेटा को प्रशिक्षण डेटा के साथ सिंक्रनाइज़ करना चुनौतीपूर्ण है।
दृष्टिकोण 2: सीधे क्लाउड स्टोरेज तक पहुँचें
एक अन्य सामान्य तरीका यह है कि प्रशिक्षण को सीधे रिमोट स्टोरेज पर लक्ष्य डेटासेट से जोड़ा जाए, जैसा कि नीचे दिखाया गया है। इस दृष्टिकोण के साथ, पिछले समाधान के साथ, डेटासेट का आकार कोई समस्या नहीं है। लेकिन यह कई नई चुनौतियों का सामना करता है।
सबसे पहले, I / O और पाइपलाइन के दृष्टिकोण से, डेटा को क्रमिक रूप से संसाधित किया जाता है। सभी डेटा एक्सेस ऑपरेशंस को ऑब्जेक्ट स्टोरेज और ट्रेनिंग क्लस्टर के बीच नेटवर्क से गुजरना चाहिए, जिससे I / O एक अड़चन बन जाता है। नतीजतन, जीपीयू इंतजार कर रहे चक्र खर्च करते हैं क्योंकि आई / ओ थ्रूपुट नेटवर्क से घिरा हुआ है।
दूसरा, जब प्रशिक्षण का पैमाना बड़ा होता है, तो सभी प्रशिक्षण नोड एक साथ एक ही डेटासेट को एक ही रिमोट स्टोरेज से एक्सेस करते हैं, जिससे स्टोरेज सिस्टम पर भारी दबाव पड़ता है। अत्यधिक समवर्ती पहुंच के कारण भंडारण संभवतः भीड़भाड़ वाला हो जाएगा, जिसके परिणामस्वरूप जीपीयू का कम उपयोग होगा।
तीसरा, यदि डेटासेट में बड़ी संख्या में छोटी फ़ाइलें हैं, तो मेटाडेटा एक्सेस अनुरोधों में डेटा अनुरोधों का एक बड़ा हिस्सा शामिल होगा। नतीजतन, ऑब्जेक्ट स्टोर से बड़ी संख्या में फ़ाइलों या निर्देशिकाओं के मेटाडेटा को सीधे पुनर्प्राप्त करना प्रदर्शन बाधा बन जाता है और साथ ही मेटाडेटा संचालन लागत भी बढ़ जाती है।
इन चुनौतियों और कमियों को दूर करने के लिए, मशीन लर्निंग पाइपलाइन में I/O के साथ काम करते समय हमें डेटा प्लेटफ़ॉर्म आर्किटेक्चर पर फिर से विचार करने की आवश्यकता है। यहां मैं एंड-टू-एंड एमएल पाइपलाइन में तेजी लाने के लिए एक नए दृष्टिकोण, डेटा ऑर्केस्ट्रेशन की सिफारिश करता हूं। डेटा ऑर्केस्ट्रेशन प्रौद्योगिकियाँ भंडारण प्रणालियों में सार डेटा का उपयोग करती हैं, सभी डेटा का वर्चुअलाइज़ करती हैं, और डेटा-संचालित अनुप्रयोगों के लिए मानकीकृत एपीआई और एक वैश्विक नाम स्थान के माध्यम से डेटा प्रस्तुत करती हैं।
डेटा को कॉपी करने और इधर-उधर ले जाने के बजाय, उसे वहीं छोड़ दें, चाहे वह ऑन-प्रिमाइसेस हो या क्लाउड में। डेटा ऑर्केस्ट्रेशन एकीकृत दृश्य बनाने के लिए डेटा को सार करने में मदद कर सकता है। यह डेटा संग्रह चरण में जटिलता को काफी कम कर देगा।
क्योंकि डेटा ऑर्केस्ट्रेशन पहले से ही स्टोरेज सिस्टम के साथ एकीकृत हो सकता है, मशीन लर्निंग फ्रेमवर्क को किसी भी कनेक्टेड स्टोरेज से डेटा एक्सेस करने के लिए केवल एक डेटा ऑर्केस्ट्रेशन प्लेटफॉर्म के साथ इंटरैक्ट करने की आवश्यकता होती है। नतीजतन, किसी भी स्रोत से सभी डेटा पर प्रशिक्षण दिया जा सकता है, जिससे मॉडल की गुणवत्ता में सुधार हो सकता है। डेटा को मैन्युअल रूप से केंद्रीय स्रोत में ले जाने की कोई आवश्यकता नहीं है। Spark, Presto, PyTorch, और TensorFlow सहित सभी संगणना ढाँचे, बिना किसी चिंता के डेटा तक पहुँच सकते हैं कि वह कहाँ रहता है।
पूरे डेटासेट को प्रत्येक मशीन में डुप्लिकेट करने के बजाय, मैं वितरित कैशिंग को लागू करने की सलाह देता हूं, जहां डेटा क्लस्टर में समान रूप से वितरित किया जा सकता है। वितरित कैशिंग विशेष रूप से लाभप्रद है जब प्रशिक्षण डेटासेट एकल नोड की भंडारण क्षमता से बहुत बड़ा होता है। डेटा दूरस्थ होने पर भी यह मदद करता है क्योंकि डेटा स्थानीय रूप से कैश किया जाता है। एमएल प्रशिक्षण तेज और अधिक लागत प्रभावी हो जाता है क्योंकि डेटा एक्सेस करते समय कोई नेटवर्क I/O नहीं होता है।
उपरोक्त आंकड़ा एक ऑब्जेक्ट स्टोर दिखाता है जहां सभी प्रशिक्षण डेटा संग्रहीत होते हैं, और डेटासेट (/path1/file1 और/path2/file2) का प्रतिनिधित्व करने के लिए दो फाइलें। प्रत्येक प्रशिक्षण मशीन पर सभी फ़ाइल ब्लॉकों को संग्रहीत करने के बजाय, ब्लॉकों को कई मशीनों में वितरित किया जाएगा। डेटा हानि को रोकने और पठन समेकन में सुधार करने के लिए, प्रत्येक ब्लॉक को एक साथ कई सर्वरों पर संग्रहीत किया जा सकता है।
एमएल प्रशिक्षण नौकरी द्वारा किए गए डेटा पढ़ने और लिखने के बीच उच्च स्तर का ओवरलैप होता है, दोनों नौकरियों के भीतर और भर में। डेटा साझाकरण यह सुनिश्चित कर सकता है कि अगले चरण के लिए वर्कलोड पढ़ने और लिखने दोनों के लिए सभी संगणना ढांचे के पास पहले से कैश्ड डेटा तक पहुंच है। उदाहरण के लिए, यदि आप डेटा तैयार करने के चरण में ईटीएल के लिए स्पार्क का उपयोग करते हैं, तो डेटा साझाकरण यह सुनिश्चित कर सकता है कि आउटपुट डेटा कैश किया गया है और भविष्य के चरणों के लिए उपलब्ध है। डेटा साझाकरण के माध्यम से, संपूर्ण डेटा पाइपलाइन बेहतर एंड-टू-एंड प्रदर्शन प्राप्त करती है।
हम प्रीलोडिंग और ऑन-डिमांड कैशिंग को लागू करके डेटा पाइपलाइन को ऑर्केस्ट्रेट करते हैं। नीचे दी गई तस्वीर दिखाती है कि डेटा कैशिंग के साथ स्रोत से डेटा लोड करना वास्तविक प्रशिक्षण कार्य के साथ समानांतर में किया जा सकता है। नतीजतन, प्रशिक्षण से पहले पूर्ण डेटा को कैश करने की प्रतीक्षा किए बिना डेटा तक पहुंचने पर उच्च डेटा थ्रूपुट से प्रशिक्षण लाभ होता है।
हालांकि शुरुआत में कुछ I/O विलंबता होगी, प्रतीक्षा समय कम हो जाएगा क्योंकि डेटा पहले ही कैश में लोड हो चुका है। इस दृष्टिकोण के माध्यम से, आप चरणों को ओवरलैप कर सकते हैं। ऑब्जेक्ट स्टोरेज से प्रशिक्षण क्लस्टर में डेटा लोडिंग, कैशिंग, प्रशिक्षण में डेटा लोडिंग ऑन-डिमांड, और प्रशिक्षण सभी को समानांतर में किया जा सकता है, जिससे पूरी प्रक्रिया में तेजी आती है।
आइए दो पारंपरिक दृष्टिकोणों के साथ नए अनुशंसित दृष्टिकोण की तुलना करें। मशीन लर्निंग पाइपलाइन के चरणों में डेटा को ऑर्केस्ट्रेट करके, हम सीरियल निष्पादन और संबद्ध अक्षमताओं को समाप्त करते हैं क्योंकि डेटा एक चरण से दूसरे चरण में प्रवाहित होता है। यह बदले में एक उच्च जीपीयू उपयोग दर प्राप्त करेगा।
| स्थानीय भंडारण में डुप्लिकेट डेटा | क्लाउड स्टोरेज को सीधे एक्सेस करें | डेटा ऑर्केस्ट्रेशन |
---|---|---|---|
डेटा स्थानीयता | ✓ | | ✓ |
डेटासेट के आकार की कोई सीमा नहीं | | ✓ | ✓ |
प्रशिक्षण से पहले पूर्ण डेटा को मैन्युअल रूप से कॉपी करने की आवश्यकता नहीं है | ✓ | ✓ | ✓ |
डेटा स्थिरता सुनिश्चित की जाती है | | ✓ | ✓ |
GPU का उपयोग अधिक है | ✓ | | ✓ |
डेटा ऑर्केस्ट्रेशन का उपयोग कैसे करें, यह दिखाने के लिए आइए यहां एक उदाहरण के रूप में Alluxio का उपयोग करें। दोबारा, हम उसी सरलीकृत परिदृश्य का उपयोग करेंगे। TensorFlow नौकरियों को शेड्यूल करने के लिए, आप या तो कुबेरनेट्स का उपयोग कर सकते हैं या सार्वजनिक क्लाउड सेवाओं का उपयोग कर सकते हैं।
मशीन लर्निंग और डीप लर्निंग ट्रेनिंग को ऑर्केस्ट्रेट करने के लिए Alluxio का उपयोग करने में आमतौर पर तीन चरण होते हैं:
अलग-अलग स्टोरेज सिस्टम में डेटा को माउंट करने के तुरंत बाद Alluxio के माध्यम से एक्सेस किया जा सकता है और उन्हें TensorFlow को संशोधित किए बिना बेंचमार्क स्क्रिप्ट के माध्यम से पारदर्शी रूप से एक्सेस किया जा सकता है। यह एप्लिकेशन के विकास को महत्वपूर्ण रूप से सरल करता है, जिसे अन्यथा प्रत्येक विशेष स्टोरेज सिस्टम के एकीकरण के साथ-साथ क्रेडेंशियल्स के कॉन्फ़िगरेशन की आवश्यकता होगी।
आप TensorFlow के साथ Alluxio का उपयोग करके छवि पहचान चलाने के लिए यहां गाइड का अनुसरण कर सकते हैं।
जैसे-जैसे मशीन लर्निंग तकनीक विकसित होती जा रही है और फ्रेमवर्क अधिक जटिल कार्य करता है, डेटा पाइपलाइन के प्रबंधन के हमारे तरीके भी बेहतर होते जाएंगे। डेटा ऑर्केस्ट्रेशन को डेटा पाइपलाइन में विस्तारित करके, आप अपने एंड-टू-एंड प्रशिक्षण पाइपलाइन के लिए बेहतर दक्षता और संसाधन उपयोग प्राप्त कर सकते हैं।
अनुमति के साथ दोबारा मुद्रित। © आईडीजी कम्युनिकेशंस, इंक।, 2022। सर्वाधिकार सुरक्षित। https://www.infoworld.com/article/3651453/orchestrating-data-for-machine-learning-pipelines.html ।