हम कुछ जीपीयू कर्नेल जनरेट करने के लिए, OpenAI Triton का इस्तेमाल करते हैं. ट्रिटन कुछ फ़्यूजन के लिए तेज़ जीपीयू कर्नेल जनरेट करने की सुविधा देता है, लेकिन हमें इस तरह के हर फ़्यूज़न के लिए कुछ पैरामीटर ट्यून करने होते हैं.
अगर फ़्यूज़न की संख्या ज़्यादा है, तो इसमें काफ़ी समय लग सकता है. इसलिए, हम ऑटो-ट्यूनिंग के नतीजों को लोड करने का एक तरीका उपलब्ध कराते हैं. साथ ही, कंपाइल करने के अन्य चरणों को सामान्य तरीके से चलाते रहते हैं. कुछ बदलाव करने पर, कैश मेमोरी अपने-आप ट्यून होने की सुविधा अब भी काम की है: कैश मेमोरी में मौजूद फ़्यूज़न, कैश मेमोरी का इस्तेमाल करेंगे और अन्य फ़्यूज़न, सामान्य तरीके से अपने-आप ट्यून हो जाएंगे.
सुझाई गई: कैश मेमोरी डायरेक्ट्री
--xla_gpu_per_fusion_autotune_cache_dir=your/directory
दी गई डायरेक्ट्री में, हर फ़्यूज़न ऑटोट्यून कैश मेमोरी का इस्तेमाल और रखरखाव करें. हर अलग फ़्यूज़न के लिए एक फ़ाइल होगी.
इस तरीके का मुख्य फ़ायदा यह है कि अलग-अलग मॉडल के कई XLA रन के लिए, एक ही कैश डायरेक्ट्री का इस्तेमाल किया जा सकता है. साथ ही, हर नए फ़्यूज़न के साथ आपका कैश बढ़ता जाएगा. इससे, बाद के रन तेज़ी से होंगे. एक ही कैश डायरेक्ट्री के साथ, एक साथ कई XLA इंस्टेंस चलाने के लिए भी बुनियादी मदद मिलती है.
XLA, ज़रूरत पड़ने पर मौजूदा नतीजे पढ़ेगा और नतीजे तय होने के बाद नए नतीजे लिखेगा.
- XLA चलाने से पहले, डायरेक्ट्री मौजूद होनी चाहिए और उसमें लिखने की अनुमति होनी चाहिए.
- कैश मेमोरी में सेव पेजों को अमान्य करने की प्रोसेस को उपयोगकर्ता को मैनेज करना होगा:
- अगर आपको खाली कैश मेमोरी से शुरू करना है, तो कृपया खाली डायरेक्ट्री का इस्तेमाल करें.
- XLA वर्शन की जांच उपयोगकर्ता को करनी होगी:
- अगर आपको XLA के अलग-अलग वर्शन के लिए अलग-अलग कैश का इस्तेमाल करना है, तो कृपया अलग-अलग डायरेक्ट्री का इस्तेमाल करें.
पैरामीटर न देने पर, कैश मेमोरी डिफ़ॉल्ट रूप से बंद रहती है.
सीमा: इस बात की कोई गारंटी नहीं है कि कैश मेमोरी की सुविधा नीचे दिए गए दूसरे तरीके के साथ काम करेगी.
इसका दूसरा तरीका: किसी दी गई एचएलओ (HLO) से सभी नतीजों को एक फ़ाइल में लोड या डंप करना
ऑटोट्यूनिंग के नतीजों को इन पैरामीटर का इस्तेमाल करके डंप/लोड किया जा सकता है:
--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=
अगर हमने .txt या .textproto फ़ाइल की जानकारी दी है, तो कैश को textproto फ़ॉर्मैट में डाला जाएगा. अगर हमने कोई जानकारी नहीं दी है, तो कैश को बाइनरी protobuf फ़ॉर्मैट में डाला जाएगा.
टेस्ट में
सेव की गई ऑटोट्यूनिंग का इस्तेमाल, टेस्ट में भी किया जा सकता है. हमारा सुझाव है कि अगर टेस्ट बहुत बड़े हैं, तो इसका इस्तेमाल करें. खास तौर पर, अगर टेस्ट एनवायरमेंट की परफ़ॉर्मेंस सीमित है.
यह सुविधा सिर्फ़ तब अच्छी तरह से काम करती है, जब ऑटोट्यून कैश मेमोरी में उसी तरह के जीपीयू पर जनरेट किए गए नतीजे हों जहां टेस्ट चलाए जा रहे हैं.
टेस्ट करने के लिए, स्थायी ऑटोट्यूनिंग का इस्तेमाल किया जा रहा है
फ़िलहाल, यह मान लेते हैं कि जिस टेस्ट की शिकायत की गई है वह हमेशा एक ही तरह के जीपीयू का इस्तेमाल करता है.
हमें टेस्ट से ऑटोट्यून के नतीजे एक्सपोर्ट करने होंगे, उदाहरण के लिए, टेस्ट कमांड में इन पैरामीटर के बारे में जानकारी देकर:
--test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto --test_sharding_strategy=disabled
सभी टेस्ट के लिए सही तरीके से एक ऑटोट्यून कैश मेमोरी पाने के लिए, शार्डिंग को बंद करना ज़रूरी है.
इसके बाद, हमें उस कैश मेमोरी को अपने कोड रिपॉज़िटरी में अपलोड करना होगा.
इसके बाद, हमें अपने टेस्ट टारगेट की डेटा डिपेंडेंसी में कैश मेमोरी जोड़नी होगी और किसी एनवायरमेंट वैरिएबल का इस्तेमाल करके उसे लोड करना होगा.
data = ["test_autotune_cache.textproto"], env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" + "$(execpath test_autotune_cache.textproto)"},
(ऑटोट्यून के नतीजे लोड करने वाले टेस्ट में, शर्डिंग का इस्तेमाल करना ठीक है.)
कृपया xla/service/gpu/tests/BUILD में उदाहरण के तौर पर दी गई टेस्ट भी देखें:
- load_autotune_results_using_execpath_test
- load_autotune_results_from_test_workspace_test
- dump_autotune_results_to_test_outputs_test
कैश मेमोरी में सेव पेजों को अमान्य करना
अगर किसी मॉडल में कई बदलाव किए जाते हैं, तो हो सकता है कि कैश मेमोरी में अब सभी फ़्यूज़न न हों. इसलिए, टेस्ट धीमा हो जाएगा. इस मामले में, हमें ऑटोट्यून कैश मेमोरी को फिर से जनरेट करना होगा.
अगर हम टेस्ट चलाने के लिए किसी नए तरह के GPU का इस्तेमाल शुरू करते हैं, तो यह शर्त उस पर भी लागू होगी.
अगर XLA कंपाइलर विकसित होता है और अलग-अलग फ़्यूज़न जनरेट करता है, तो भी कैश पुरानी हो सकता है.