इस सेक्शन में ट्रेनिंग पाइपलाइन के बारे में बताया गया है.
इनपुट पाइपलाइन को ऑप्टिमाइज़ करना
खास जानकारी: इनपुट-बाउंड पाइपलाइन की वजहें और इंटरवेंशन, टास्क पर बहुत ज़्यादा निर्भर करते हैं. प्रोफ़ाइलर का इस्तेमाल करें और सामान्य समस्याओं का पता लगाएं.
इनपुट-बाउंड पाइपलाइन की समस्या का पता लगाने के लिए, इनमें से किसी एक जैसे सही प्रोफ़ाइलर का इस्तेमाल करें:
- JAX के लिए Perfetto
- TensorFlow के लिए TensorFlow profiler.
आखिरकार, समस्या की खास वजहें और समाधान, टास्क पर काफ़ी हद तक निर्भर करते हैं. इंजीनियरिंग से जुड़ी अन्य बातों (जैसे, डिस्क के इस्तेमाल को कम करना) की वजह से, इनपुट पाइपलाइन की परफ़ॉर्मेंस पर असर पड़ सकता है.
इनपुट पर निर्भर रहने वाली पाइपलाइन की सामान्य वजहें यहां दी गई हैं:
- डेटा को ट्रेनिंग प्रोसेस के साथ नहीं रखा जाता है. इस वजह से, I/O में देरी होती है. उदाहरण के लिए, नेटवर्क पर ट्रेनिंग डेटा पढ़ने से I/O में देरी हो सकती है.
- ऑनलाइन डेटा की प्रीप्रोसेसिंग में ज़्यादा खर्च होता है. ऑफ़लाइन होने पर, एक बार प्रीप्रोसेसिंग करें और नतीजों को सेव करें.
- अनजाने में सिंक करने से जुड़ी ऐसी समस्याएं जो डेटा पाइपलाइन की प्रीफ़ेचिंग में रुकावट डालती हैं. उदाहरण के लिए, CommonLoopUtils में डिवाइस और होस्ट के बीच मेट्रिक सिंक करते समय.
हमारा सुझाव है कि इनपुट पर निर्भर पाइपलाइन के लिए, ये कार्रवाइयां की जा सकती हैं:
- उदाहरणों को पहले से फ़ेच करने के लिए, इनपुट पाइपलाइन को इंस्ट्रूमेंट करें (उदाहरण के लिए, tf.data.Dataset.prefetch).
- पाइपलाइन में जितनी जल्दी हो सके, हर फ़ाइल से इस्तेमाल न की गई सुविधाओं और मेटाडेटा को हटाएं.
- इनपुट पाइपलाइन के लिए उदाहरण जनरेट करने वाली नौकरियों की संख्या बढ़ाएं. उदाहरण के लिए, tf.data service का इस्तेमाल करके.
मॉडल की परफ़ॉर्मेंस का आकलन करना
खास जानकारी: ट्रेनिंग के मुकाबले, बड़े बैच साइज़ पर आकलन करें. नियमित समय अंतराल पर नहीं, बल्कि नियमित चरण अंतराल पर आकलन करें.
इवैलुएशन सेटिंग
अपने मॉडल की परफ़ॉर्मेंस का आकलन करने के लिए, इन सेटिंग का इस्तेमाल किया जा सकता है:
- ऑनलाइन आकलन: जब मॉडल, प्रोडक्शन एनवायरमेंट में अनुमानित नतीजे दिखाता है, तब मेट्रिक इकट्ठा करें. आम तौर पर, ऑनलाइन आकलन से मॉडल की क्वालिटी का सबसे सटीक आकलन मिलता है. ऐसा इसलिए, क्योंकि यह मॉडल के इस्तेमाल के तरीके से मेल खाता है.
- ऑफ़लाइन आकलन: मॉडल को ऑफ़लाइन ट्रेनिंग, पुष्टि करने या टेस्ट सेट पर चलाने के दौरान मेट्रिक इकट्ठा करें. ये सेट, प्रोडक्शन एनवायरमेंट के हिसाब से होने चाहिए. समस्या के आधार पर, ऑफ़लाइन आकलन में काफ़ी समय लग सकता है और यह कंप्यूटेशनल रूप से महंगा हो सकता है.
- समय-समय पर होने वाले आकलन: मॉडल ट्रेनिंग के दौरान ऐसी मेट्रिक इकट्ठा करें जो ऑफ़लाइन आकलन के लिए प्रॉक्सी हो सकती हैं और/या ऑफ़लाइन आकलन में इस्तेमाल किए गए डेटा के सबसेट पर हो सकती हैं. समय-समय पर होने वाले आकलन, सबसे व्यावहारिक और किफ़ायती विकल्प हैं. हालांकि, हो सकता है कि ये प्रोडक्शन एनवायरमेंट को पूरी तरह से न दिखाएं. हमारा मकसद, ऑफ़लाइन आकलन के लिए एक प्रॉक्सी का इस्तेमाल करना है. इससे ट्रेनिंग के दौरान मिले सिग्नल की विश्वसनीयता पर कोई असर नहीं पड़ेगा.
समय-समय पर होने वाले आकलन सेट अप करना
हमारा सुझाव है कि ट्रेनिंग के दौरान समय-समय पर आकलन किया जाना चाहिए. इसकी वजहें यहां दी गई हैं:
- ट्रेनिंग की प्रोग्रेस को रीयल टाइम में मॉनिटर करने के लिए.
- इससे मॉडल के चेकपॉइंट को पिछली तारीख के हिसाब से चुनने में मदद मिलती है.
- ट्रेनिंग के आखिर में, ट्रेनिंग कर्व की जांच करने के लिए.
सबसे आसान कॉन्फ़िगरेशन यह है कि ट्रेनिंग और समय-समय पर होने वाले आकलन, दोनों को एक ही कंप्यूट इंस्टेंस में किया जाए. साथ ही, समय-समय पर ट्रेनिंग और आकलन के बीच बदलाव किया जाए. इस मामले में, आकलन करने के लिए इस्तेमाल किए गए बैच का साइज़, ट्रेनिंग के लिए इस्तेमाल किए गए बैच के साइज़ के बराबर या उससे ज़्यादा होना चाहिए. ऐसा इसलिए है, क्योंकि आपको मॉडल के आकलन के दौरान मॉडल ऐक्टिवेशन बनाए रखने की ज़रूरत नहीं होती. इससे हर उदाहरण के लिए कंप्यूटेशनल ज़रूरतें कम हो जाती हैं.
नियमित अंतराल पर नहीं, बल्कि तय किए गए चरणों के हिसाब से समय-समय पर आकलन करें. समय के अंतराल के आधार पर आकलन करने से, ट्रेनिंग कर्व को समझना मुश्किल हो सकता है. ऐसा खास तौर पर तब होता है, जब ट्रेनिंग में ट्रेनिंग जॉब के प्रीएम्पशन, नेटवर्क की लेटेन्सी की समस्याओं वगैरह की वजह से रुकावटें आती हैं.
पुष्टि करने और टेस्ट करने की मेट्रिक में समय-समय पर होने वाले बदलाव (शफ़ल किए गए ट्रेनिंग सेट, पुष्टि करने वाले सेट, और टेस्ट सेट के स्प्लिट का इस्तेमाल करते समय) से, लागू करने से जुड़ी गड़बड़ियों का पता चल सकता है. जैसे:
- टेस्ट डेटा, ट्रेनिंग डेटा से ओवरलैप हो रहा है.
- ट्रेनिंग डेटा को सही तरीके से शफ़ल नहीं किया जा रहा है.
नियमित अंतराल पर जांच करने से, इन समस्याओं का पता आसानी से लगाया जा सकता है.
जब आकलन सेट को बैच साइज़ से पूरी तरह से नहीं बांटा जा सकता, तब कुछ बैच बन सकते हैं. पक्का करें कि पैडिंग वाले उदाहरणों को सही तरीके से वेट किया गया हो. जैसे, बैच पर औसत नुकसान का हिसाब लगाने वाले उदाहरणों पर वेटेड एवरेज. इससे नुकसान के फ़ंक्शन को उनसे पक्षपाती होने से रोका जा सकेगा. अक्सर, इन उदाहरणों को शून्य का वेट दिया जा सकता है.
ऑफ़लाइन विश्लेषण के लिए, हर आकलन के हिसाब से ज़रूरी जानकारी सेव करें. हमारा सुझाव है कि आप अलग-अलग उदाहरणों के लिए अनुमान सेव करें. इससे डीबग करने में मदद मिलती है. SavedModels जैसे आर्टफ़ैक्ट जनरेट करने से, आकलन की प्रोसेस पूरी होने के बाद मॉडल की जांच करना आसान हो जाता है.
समय-समय पर होने वाले आकलन के लिए सैंपल चुनना
ऐसा हो सकता है कि समय-समय पर होने वाले आकलन का काम, मेट्रिक का हिसाब लगाने के लिए तेज़ी से न हो. इससे, ऑफ़लाइन आकलन के पूरे सेट पर तय समय में मेट्रिक का हिसाब नहीं लगाया जा सकेगा. इस समस्या की वजह से, समय-समय पर आकलन करने के लिए डेटा की सैंपलिंग करना ज़रूरी हो जाता है. सैंपल किए गए डेटासेट को बनाते समय, सैंपल साइज़ और असंतुलित डेटासेट में खास समस्याओं पर ध्यान दें.
सैंपल साइज़
जांच करें कि समय-समय पर होने वाले जॉब के लिए इस्तेमाल किए गए सैंपल वाले डेटासेट पर कैलकुलेट की गई परफ़ॉर्मेंस, पूरे ऑफ़लाइन आकलन सेट पर कैलकुलेट की गई परफ़ॉर्मेंस से मेल खाती हो. इसका मतलब है कि पक्का करें कि सैंपल वाले डेटासेट और पूरे डेटासेट के बीच कोई अंतर न हो.
समय-समय पर आकलन करने के लिए इस्तेमाल किया जाने वाला डेटासेट, इन दोनों शर्तों को पूरा करना चाहिए:
- इतना छोटा कि पूरे डेटा के आधार पर मॉडल के अनुमान आसानी से जनरेट किए जा सकें.
- इतना बड़ा हो कि ये दोनों काम किए जा सकें:
- मॉडल में हुए सुधारों को सटीक तरीके से मेज़र करें. इसका मतलब है कि मेज़रमेंट पर लेबल नॉइज़ का असर नहीं पड़ना चाहिए.
- एक के बाद एक कई आकलन किए जा सकते हैं. साथ ही, सटीक अनुमान भी लगाए जा सकते हैं. इसका मतलब है कि डेटासेट इतना बड़ा होना चाहिए कि समय के साथ, पुष्टि करने वाले सेट के हिसाब से "फ़िट" न हो. ऐसा होने पर, मॉडल को टेस्ट सेट के लिए सामान्यीकृत नहीं किया जा सकेगा. हालांकि, इस बात पर बहुत कम ध्यान दिया जाता है.
इंबैलेंस डेटासेट
इंबैलेंस वाले डेटासेट के लिए, माइनॉरिटी क्लास की परफ़ॉर्मेंस अक्सर सही नहीं होती. जिन डेटासेट में अल्पसंख्यक वर्ग के उदाहरणों की संख्या कम है उनके लिए, सही तरीके से अनुमान लगाए गए उदाहरणों की संख्या को लॉग करें. इससे आपको सटीकता में हुए सुधार के बारे में ज़्यादा जानकारी मिलेगी. उदाहरण के लिए, .05 सेंसिटिविटी में सुधार होना अच्छा लगता है, लेकिन क्या यह सुधार सिर्फ़ एक और उदाहरण के सही होने की वजह से हुआ है?
चेकपॉइंट सेव करना और बाद में सबसे सही चेकपॉइंट चुनना
खास जानकारी: तय किए गए चरणों के लिए ट्रेनिंग चलाएं. साथ ही, रन से सबसे अच्छा चेकपॉइंट चुनें.
ज़्यादातर डीप लर्निंग फ़्रेमवर्क, मॉडल चेकपॉइंटिंग की सुविधा देते हैं. इसका मतलब है कि मॉडल की मौजूदा स्थिति को समय-समय पर डिस्क में सेव किया जाता है. चेकपॉइंटिंग की मदद से, ट्रेनिंग जॉब को कंप्यूट इंस्टेंस में आने वाली रुकावटों से बचाया जा सकता है. सबसे अच्छा चेकपॉइंट अक्सर आखिरी चेकपॉइंट नहीं होता. खास तौर पर, जब समय के साथ-साथ पुष्टि करने वाले सेट की परफ़ॉर्मेंस में लगातार बढ़ोतरी नहीं होती, बल्कि किसी खास वैल्यू के आस-पास घट-बढ़ होती रहती है.
ट्रेनिंग के दौरान अब तक देखे गए N सबसे अच्छे चेकपॉइंट को ट्रैक करने के लिए, पाइपलाइन सेट अप करें. ट्रेनिंग के आखिर में, मॉडल चुनने का मतलब सिर्फ़ सबसे अच्छा चेकपॉइंट चुनना होता है. हम इस तरीके को रेट्रोस्पेक्टिव ऑप्टिमल चेकपॉइंट सिलेक्शन कहते हैं. आम तौर पर, अर्ली स्टॉपिंग की सुविधा के लिए सहायता की ज़रूरत नहीं होती, क्योंकि आपने पहले से ही ट्रायल बजट तय कर दिया है. साथ ही, अब तक देखे गए N सबसे अच्छे चेकपॉइंट को सेव किया जा रहा है.
एक्सपेरिमेंट ट्रैकिंग सेट अप करना
खास जानकारी: अलग-अलग एक्सपेरिमेंट को ट्रैक करते समय, कई ज़रूरी चीज़ों को ट्रैक करें. जैसे, स्टडी में किसी चेकपॉइंट की सबसे अच्छी परफ़ॉर्मेंस और स्टडी के बारे में कम शब्दों में जानकारी.
हमारा सुझाव है कि एक्सपेरिमेंट के नतीजों को स्प्रेडशीट में ट्रैक करें. हमारी स्प्रेडशीट में अक्सर ये कॉलम शामिल होते हैं:
- अध्ययन का नाम
- स्टडी के कॉन्फ़िगरेशन को सेव करने की जगह का लिंक.
- स्टडी के बारे में नोट या कम शब्दों में जानकारी.
- ट्रायल की संख्या
- स्टडी में सबसे अच्छे चेकपॉइंट के पुष्टि करने वाले सेट की परफ़ॉर्मेंस.
- ट्रेनिंग शुरू करने के लिए, सबमिट नहीं किए गए किन बदलावों को लागू करना ज़रूरी था, इस बारे में खास निर्देश या नोट.
ऐसा ट्रैकिंग सिस्टम ढूंढें जो ऊपर दी गई जानकारी को कम से कम कैप्चर कर सके. ट्रैक न किए गए एक्सपेरिमेंट का कोई मतलब नहीं है.
बैच नॉर्मलाइज़ेशन लागू करने से जुड़ी जानकारी
खास जानकारी: आजकल, बैच नॉर्मलाइज़ेशन को LayerNorm से बदला जा सकता है. हालांकि, कुछ मामलों में ऐसा नहीं किया जा सकता. ऐसे में, बैच साइज़ या होस्ट की संख्या बदलते समय कुछ मुश्किल बातों का ध्यान रखना होता है.
बैच नॉर्मलाइज़ेशन, मौजूदा बैच में उनके औसत और विचरण का इस्तेमाल करके ऐक्टिवेशन को सामान्य करता है. हालांकि, एक से ज़्यादा डिवाइसों पर इस्तेमाल करने की सेटिंग में, ये आंकड़े हर डिवाइस पर अलग-अलग होते हैं. ऐसा तब तक होता है, जब तक इन्हें साफ़ तौर पर सिंक न किया जाए. अनौपचारिक रिपोर्ट (ज़्यादातर ImageNet पर) से पता चलता है कि सिर्फ़ ~64 उदाहरणों का इस्तेमाल करके, इन सामान्य बनाने वाले आंकड़ों का हिसाब लगाने से, असल में बेहतर नतीजे मिलते हैं. (Train longer, generalize better: closing the generalization gap in large batch training of neural networks में, Ghost Batch Normalization के बारे में जानकारी देखें.) बैच के कुल साइज़ और बैच नॉर्म के आंकड़े कैलकुलेट करने के लिए इस्तेमाल किए गए उदाहरणों की संख्या को अलग-अलग करने से, बैच के साइज़ की तुलना करने में मदद मिलती है.
घोस्ट बैच नॉर्मलाइज़ेशन को लागू करने पर, हमेशा उस स्थिति को सही तरीके से हैंडल नहीं किया जाता है जहां हर डिवाइस के लिए बैच का साइज़, वर्चुअल बैच के साइज़ से ज़्यादा होता है. इस मामले में, आपको हर डिवाइस पर बैच को सबसेंपल करना होगा, ताकि बैच नॉर्म के आंकड़ों के सही उदाहरण मिल सकें.
टेस्ट मोड बैच नॉर्मलाइज़ेशन में इस्तेमाल किए गए एक्सपोनेंशियल मूविंग एवरेज (ईएमए), ट्रेनिंग के आंकड़ों का सिर्फ़ एक लीनियर कॉम्बिनेशन होते हैं. इसलिए, आपको इन ईएमए को सिर्फ़ चौकियों में सेव करने से पहले सिंक्रनाइज़ करना होगा. हालांकि, बैच नॉर्मलाइज़ेशन के कुछ सामान्य तरीकों में इन ईएमए को सिंक्रनाइज़ नहीं किया जाता है. साथ ही, सिर्फ़ पहले डिवाइस से ईएमए सेव किया जाता है.
कई होस्ट वाली पाइपलाइन के लिए ध्यान रखने वाली बातें
खास जानकारी: लॉगिंग, आकलन, आरएनजी, चेकपॉइंटिंग, और डेटा शार्डिंग के लिए, मल्टी-होस्ट ट्रेनिंग से बग को आसानी से जोड़ा जा सकता है!
एक से ज़्यादा होस्ट वाली पाइपलाइन के लिए, यह तरीका अपनाएं:
- पक्का करें कि पाइपलाइन, सिर्फ़ एक होस्ट पर लॉग और चेकपॉइंट कर रही हो.
- बैच नॉर्मलाइज़ेशन के आंकड़ों को सभी होस्ट के साथ पहले सिंक करें. इसके बाद, उनका आकलन करें या उन्हें चेकपॉइंट करें.
- डेटा फ़ाइलों को अलग-अलग होस्ट में बांटें, क्योंकि इससे आम तौर पर परफ़ॉर्मेंस बेहतर होती है.
अहम जानकारी: पक्का करें कि आपके पास ऐसे आरएनजी सीड हों जो सभी होस्ट के लिए एक जैसे हों (मॉडल को शुरू करने के लिए) और ऐसे सीड हों जो सभी होस्ट के लिए अलग-अलग हों (डेटा को शफ़ल करने/प्रीप्रोसेस करने के लिए). इसलिए, पक्का करें कि आपने उन्हें सही तरीके से मार्क किया हो.