परसिस्टेंट ऑटोट्यूनिंग (सिर्फ़ जीपीयू)

कुछ जीपीयू कर्नेल जनरेट करने के लिए, हम OpenAI ट्राइटन का इस्तेमाल करते हैं. ट्राइटन कुछ फ़्यूज़न के लिए तेज़ी से जीपीयू कर्नेल जनरेट करने देता है, लेकिन हमें ऐसे हर फ़्यूज़न के लिए कुछ पैरामीटर को ट्यून करना होगा.

कई फ़्यूज़न होने पर इसमें ज़्यादा समय लग सकता है. इसलिए, हम कंपाइलेशन के दूसरे चरणों को सामान्य तौर पर चलाते हुए, उन ऑटोट्यूनिंग नतीजों को लोड करने का तरीका उपलब्ध कराते हैं. अगर हम कुछ बदलाव करें, तो भी ऑटो-ट्यूनिंग कैश मेमोरी काम करेगी: कैश मेमोरी में मौजूद फ़्यूज़न, कैश का इस्तेमाल करेंगे और दूसरे अपने-आप ट्यून हो जाएंगे.

ऑटो-ट्यूनिंग के नतीजे, इन पैरामीटर का इस्तेमाल करके डंप/लोड किए जा सकते हैं:

--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=

अगर हम .txt या .textproto फ़ाइल तय करते हैं, तो कैश को टेक्स्टप्रोटो फ़ॉर्मैट में डाला जाएगा, नहीं तो बाइनरी प्रोटोबफ़ फ़ॉर्मैट में.

जांच के दौरान

टेस्ट में, परसिस्टेंट ऑटोट्यूनिंग का भी इस्तेमाल किया जा सकता है. हमारा सुझाव है कि अगर टेस्ट बहुत बड़े हों, तो इसका इस्तेमाल करें. खास तौर पर तब, जब टेस्ट एनवायरमेंट की परफ़ॉर्मेंस सीमित हो.

यह सुविधा सिर्फ़ तब काम करती है, जब ऑटोट्यून कैश मेमोरी में उसी तरह के जीपीयू पर जनरेट किए गए नतीजे शामिल हों जहां टेस्ट चल रहे हैं.

टेस्ट के दौरान, ऑटोट्यूनिंग की सुविधा का इस्तेमाल किया जा रहा है

फ़िलहाल, यह मान लेते हैं कि जिस टेस्ट की बात की जा रही है उसमें हमेशा एक ही तरह के जीपीयू का इस्तेमाल किया जाता है.

  1. हमें टेस्ट से ऑटोट्यून के नतीजे एक्सपोर्ट करने होंगे, उदाहरण के लिए, टेस्ट कमांड में ये पैरामीटर तय करके:

    --test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto
    --test_sharding_strategy=disabled
    

    सभी जांचों के लिए एक ऑटो-ट्यून कैश मेमोरी सही तरीके से पाने के लिए, शार्डिंग को बंद करना ज़रूरी है.

  2. इसके बाद, हमें उस कैश मेमोरी को अपने कोड रिपॉज़िटरी में अपलोड करना होगा.

  3. इसके बाद, हमें कैश मेमोरी को अपने टेस्ट टारगेट की डेटा डिपेंडेंसी में जोड़ना होगा. साथ ही, एनवायरमेंट वैरिएबल का इस्तेमाल करके उसे लोड करना होगा.

    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

कैश मेमोरी का पुराना होना

अगर किसी मॉडल में कई बदलाव किए जाते हैं, तो हो सकता है कि कैश में अब सभी फ़्यूज़न शामिल न हों. इससे टेस्ट धीमा हो जाएगा. इस मामले में, हमें ऑटोट्यूनिंग कैश मेमोरी को फिर से जनरेट करना होगा.

अगर हम टेस्ट करने के लिए, नए तरह के जीपीयू का इस्तेमाल करना शुरू करते हैं, तो भी यही तरीका लागू होता है.

अगर XLA कंपाइलर विकसित होता है और अलग-अलग फ़्यूज़न जनरेट करता है, तो भी कैश पुराना हो सकता है.