XLA फ़्लैग के लिए दिशा-निर्देश

इस गाइड में, XLA के मुख्य फ़्लैग को चुना गया है. इससे उपयोगकर्ताओं को XLA की सुविधाओं को नेविगेट करने और उनका इस्तेमाल करने में मदद मिलती है. यहां दिए गए सेक्शन में, उन फ़्लैग के बारे में बताया गया है जिनसे रनटाइम परफ़ॉर्मेंस और मेमोरी के इस्तेमाल पर काफ़ी असर पड़ सकता है. अगर किसी फ़्लैग को चालू करने के बाद, क्रैश जैसी कोई समस्या आती है, तो हमारा सुझाव है कि आप डिफ़ॉल्ट सेटिंग पर वापस जाएं और GitHub पर समस्या दर्ज करें.

परफ़ॉर्मेंस फ़्लैग

यहां दिए गए फ़्लैग, रनटाइम की परफ़ॉर्मेंस को बेहतर बनाने में मददगार होते हैं. इन सेटिंग के साथ एक्सपेरिमेंट करने से, परफ़ॉर्मेंस में काफ़ी बढ़ोतरी हो सकती है.

झंडा ब्यौरा डिफ़ॉल्ट वैल्यू सुझाई गई वैल्यू उम्मीदवार की वैल्यू
पाइपलाइनिंग
1. xla_should_allow_loop_variant_parameter_in_chain
2. xla_should_add_loop_invariant_op_in_chain
3. xla_tpu_enable_ici_ag_pipelining
इन तीन फ़्लैग का इस्तेमाल एक साथ किया जाना चाहिए, ताकि ICI(इंटरचिप-इंटरकनेक्ट) के सभी-इकट्ठा करने वाले ऑपरेशन की सामूहिक पाइपलाइनिंग चालू की जा सके. इससे ओवरलैप होने वाले एक्सीक्यूशन के ज़्यादा अवसर मिलते हैं. 1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled
2. xla_should_add_loop_invariant_op_in_chain=kDisabled
3. xla_tpu_enable_ici_ag_pipelining=false
1. xla_should_allow_loop_variant_parameter_in_chain=kEnabled
2. xla_should_add_loop_invariant_op_in_chain=kEnabled
3. xla_tpu_enable_ici_ag_pipelining=true
1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled/kEnabled/kAuto
2. xla_should_add_loop_invariant_op_in_chain=kDisabled/kEnabled/kAuto
3. xla_tpu_enable_ici_ag_pipelining=true/false
v5e/Async
xla_enable_async_all_gather
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_gather
v5e पर असाइनिमेंट के लिए, एक साथ कई एलिमेंट इकट्ठा करने की सुविधा चालू करने के लिए, इन तीनों फ़्लैग का इस्तेमाल एक साथ किया जाना चाहिए. xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kAuto
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true
xla_enable_async_all_gather=kDisabled/kEnabled/kAuto
xla_tpu_enable_async_collective_fusion=true/false
xla_tpu_enable_async_collective_fusion_fuse_all_gather=true/false
v5e/Async
xla_tpu_enable_async_collective_fusion
xla_tpu_enable_async_collective_fusion_fuse_all_reduce
v5e पर असाइनिटिव ऑल-रिड्यूस ऑपरेशन चालू करने के लिए, इन दोनों फ़्लैग का इस्तेमाल एक साथ किया जाना चाहिए. xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=false
xla_tpu_enable_async_collective_fusion=true
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true
xla_tpu_enable_async_collective_fusion=true/false
xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true/false
Async
xla_tpu_enable_async_all_to_all
यह फ़्लैग, सभी के लिए एक साथ होने वाली बातचीत की सुविधा चालू करता है. xla_tpu_enable_async_all_to_all=false xla_tpu_enable_async_all_to_all=true xla_tpu_enable_async_all_to_all=true/false
इंतज़ार का समय
xla_all_gather_latency_bound_threshold_in_bytes
यह फ़्लैग, लैटेंसी-बाउंड (यानी छोटे साइज़ वाले) सभी-इकट्ठा करने वाले ऑपरेशन के लिए है. इसे चालू करने से, खास ऑप्टिमाइज़ेशन ट्रिगर होते हैं. इनसे, लैटेंसी से जुड़े सभी-इकट्ठा करने के लिए, प्रोसेस करने में लगने वाला समय कम हो सकता है. आम तौर पर, इसका इस्तेमाल अनुमान लगाने वाले वर्कलोड में किया जाता है. xla_all_gather_latency_bound_threshold_in_bytes=-1
(जो चालू नहीं है)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
इंतज़ार का समय
xla_all_reduce_latency_bound_threshold_in_bytes
यह फ़्लैग, लैटेंसी-बाउंड (यानी छोटे साइज़ वाले) सभी-इकट्ठा करने वाले ऑपरेशन के लिए है. इसे चालू करने से, खास ऑप्टिमाइज़ेशन ट्रिगर होते हैं. इनसे, इंतज़ार के समय से जुड़ी सभी 'कम करें' कार्रवाइयों को लागू करने में लगने वाला समय कम हो सकता है. आम तौर पर, इसका इस्तेमाल अनुमान लगाने वाले वर्कलोड में किया जाता है. xla_all_reduce_latency_bound_threshold_in_bytes=-1
(जो चालू नहीं है)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
इंतज़ार का समय
xla_collective_permute_latency_bound_threshold_in_bytes
यह फ़्लैग, लैटेंसी-बाउंड (यानी छोटे साइज़ वाले) सभी-इकट्ठा करने वाले ऑपरेशन के लिए है. इसे चालू करने से, खास ऑप्टिमाइज़ेशन ट्रिगर होते हैं. इनसे, इंतज़ार के समय से जुड़े कलेक्शन-परम्यूट के लिए, लागू होने में लगने वाला समय कम हो सकता है. आम तौर पर, इसका इस्तेमाल अनुमान लगाने वाले वर्कलोड में किया जाता है. xla_collective_permute_latency_bound_threshold_in_bytes=-1
(जो चालू नहीं है)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
इंतज़ार का समय
xla_all_to_all_latency_bound_threshold_in_bytes
यह फ़्लैग, लैटेंसी-बाउंड (यानी छोटे साइज़ वाले) सभी-इकट्ठा करने वाले ऑपरेशन के लिए है. इसे चालू करने से, खास ऑप्टिमाइज़ेशन ट्रिगर होते हैं. इनसे, 'सभी से सभी' टाइप के लेन-देन में लगने वाले समय को कम किया जा सकता है. आम तौर पर, इसका इस्तेमाल अनुमान लगाने वाले वर्कलोड में किया जाता है. xla_all_to_all_latency_bound_threshold_in_bytes=-1
(जो चालू नहीं है)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
xla_enable_async_collective_permute सभी कलेक्शन-परम्यूट ऑपरेशन को उनके असाइनोक्रोनस वैरिएंट में फिर से लिखता है. auto पर सेट होने पर, XLA अन्य कॉन्फ़िगरेशन या शर्तों के आधार पर, अपने-आप असाइन किए गए कलेक्शन को चालू कर सकता है. xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto/kEnabled/kDisabled

मेमोरी फ़्लैग

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

झंडा ब्यौरा डिफ़ॉल्ट वैल्यू सुझाई गई वैल्यू उम्मीदवार की वैल्यू
शेड्यूलर
xla_latency_hiding_scheduler_rerun
इस सेटिंग से, इंतज़ार के समय को छिपाने वाले शेड्यूलर के व्यवहार में बदलाव होता है. यह प्रोसेस, शेड्यूल करने के लिए तय की गई मेमोरी की सीमा को धीरे-धीरे कम करके काम करती है. ऐसा, प्रोसेस को हर बार "फिर से चलाने" पर किया जाता है. xla_latency_hiding_scheduler_rerun=1 xla_latency_hiding_scheduler_rerun=5 0~10(it doesn’t make much sense beyond 10 reruns)
Fusion
xla_tpu_rwb_fusion
यह फ़्लैग, कम डेटा वाले और ब्रॉडकास्ट टाइप के फ़्यूज़न की सुविधा चालू करता है. साथ ही, इससे मेमोरी के इस्तेमाल में कमी आ सकती है. xla_tpu_rwb_fusion=true xla_tpu_rwb_fusion=false xla_tpu_rwb_fusion=true/false
शेड्यूलर
xla_memory_scheduler
इस फ़्लैग से उस एल्गोरिदम के बारे में पता चलता है जिसका इस्तेमाल मेमोरी शेड्यूलर, मेमोरी खर्च को कम करने के लिए करेगा. ज़्यादा बेहतर एल्गोरिदम का इस्तेमाल करने से, कम मेमोरी वाला शेड्यूल मिल सकता है. हालांकि, इसके लिए कंपाइल करने में ज़्यादा समय लगेगा. xla_memory_scheduler=kDefault xla_memory_scheduler=kBrkga xla_memory_scheduler=kDefault/kList/kDfs/kPostOrder/kBrkga
शेड्यूलर
xla_tpu_enable_latency_hiding_scheduler
यह फ़्लैग, इंतज़ार का समय छिपाने वाले शेड्यूलर को चालू करता है. इससे, सिंक्रोनस के बजाय एसिंक्रोनस कलेक्शन किया जा सकता है. इसे बंद करने पर, मेमोरी का इस्तेमाल कम हो जाता है. हालांकि, ऐसा करने पर इन असाइनमेंट की परफ़ॉर्मेंस में कमी आती है. xla_tpu_enable_latency_hiding_scheduler=true xla_tpu_enable_latency_hiding_scheduler=false xla_tpu_enable_latency_hiding_scheduler=true/false
SPMD
xla_jf_spmd_threshold_for_windowed_einsum_mib
यह फ़्लैग, एक साथ कई मैट्रिक्स गुणा करने की सुविधा को ट्रिगर करने के लिए, बिंदु के कम से कम साइज़ का थ्रेशोल्ड सेट करता है. इसे ज़्यादा वैल्यू पर सेट करने से, मेमोरी बचेगी. हालांकि, इससे एक साथ कई मैटमल करने के अवसरों का नुकसान होगा. xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 10Mb~1Gb (i.e. 10*1024*1024 ~ 1024*1024*1024) [0, 9223372036854775807]

आम तौर पर इस्तेमाल होने वाले अन्य फ़्लैग

झंडा टाइप नोट
xla_dump_to स्ट्रिंग (फ़ाइल पाथ) वह फ़ोल्डर जहां ऑप्टिमाइज़ेशन से पहले की HLO फ़ाइलें और अन्य आर्टफ़ैक्ट रखे जाएंगे (XLA टूल देखें).

TPU XLA फ़्लैग

झंडा टाइप नोट
xla_tpu_enable_data_parallel_all_reduce_opt बूलियन (सही/गलत) डेटा पैरलल शर्डिंग के लिए इस्तेमाल किए जाने वाले डीसीएन (डेटा सेंटर नेटवर्किंग) ऑल-रिड्यूस के ओवरलैप के अवसरों को बढ़ाने के लिए ऑप्टिमाइज़ेशन.
xla_tpu_data_parallel_opt_different_sized_ops बूलियन (सही/गलत) एक से ज़्यादा बार दोहराए जाने वाले ऑपरेशन के लिए, डेटा पैरलल ऑपरेशन की पाइपलाइनिंग की सुविधा चालू करता है. भले ही, उनके आउटपुट साइज़, स्टैक किए गए वैरिएबल में सेव किए जा सकने वाले साइज़ से मेल न खाते हों. इससे मेमोरी पर दबाव बढ़ सकता है.
xla_tpu_spmd_rng_bit_generator_unsafe बूलियन (सही/गलत) RngBitGenerator HLO को अलग-अलग हिस्सों में चलाना है या नहीं. अगर कैलकुलेशन के अलग-अलग हिस्सों में अलग-अलग शर्डिंग के साथ, तय नतीजे मिलने की उम्मीद है, तो यह तरीका असुरक्षित है.
xla_tpu_megacore_fusion_allow_ags बूलियन (सही/गलत) यह फ़ंक्शन, कन्वोल्यूशन/सभी-कम करने वाले फ़ंक्शन के साथ, सभी-इकट्ठा करने वाले फ़ंक्शन को फ़्यूज़ करने की अनुमति देता है.
xla_tpu_enable_ag_backward_pipelining बूलियन (सही/गलत) स्कैन लूप की मदद से, पाइपलाइन में सभी-इकट्ठा करने की सुविधा (फ़िलहाल, मेगास्केल सभी-इकट्ठा करने की सुविधा) को पीछे की ओर भेजा जाता है.

GPU XLA फ़्लैग

झंडा टाइप नोट
xla_gpu_enable_latency_hiding_scheduler बूलियन (सही/गलत) इस फ़्लैग की मदद से, लैटेंसी छिपाने वाले शेड्यूलर, असाइनमेंट के बीच के समय को कैलकुलेशन के साथ बेहतर तरीके से ओवरलैप कर पाते हैं. डिफ़ॉल्ट मान False है.
xla_gpu_enable_triton_gemm बूलियन (सही/गलत) Triton पर आधारित मैट्रिक्स गुणन का इस्तेमाल करें.
xla_gpu_graph_level फ़्लैग (0-3) जीपीयू ग्राफ़ लेवल सेट करने के लिए लेगसी फ़्लैग. नए इस्तेमाल के उदाहरणों में xla_gpu_enable_command_buffer का इस्तेमाल करें. 0 = बंद है; 1 = फ़्यूज़न और memcpys कैप्चर करें; 2 = gemms कैप्चर करें; 3 = कन्वोल्यूशन कैप्चर करें.
xla_gpu_all_reduce_combine_threshold_bytes पूर्णांक (बाइट) ये फ़्लैग, एक से ज़्यादा छोटे AllGather / ReduceScatter / AllReduce को एक बड़े AllGather / ReduceScatter / AllReduce में जोड़ने का समय तय करते हैं. इससे, अलग-अलग डिवाइसों के बीच कम्यूनिकेशन में लगने वाला समय कम हो जाता है. उदाहरण के लिए, ट्रांसफ़ॉर्मर पर आधारित वर्कलोड के लिए, AllGather / ReduceScatter थ्रेशोल्ड को ज़्यादा से ज़्यादा ट्यून करें, ताकि कम से कम ट्रांसफ़ॉर्मर लेयर के वज़न वाले AllGather / ReduceScatter को जोड़ा जा सके. डिफ़ॉल्ट रूप से, combine_threshold_bytes 256 पर सेट होता है.
xla_gpu_all_gather_combine_threshold_bytes पूर्णांक (बाइट) ऊपर xla_gpu_all_reduce_combine_threshold_bytes देखें.
xla_gpu_reduce_scatter_combine_threshold_bytes पूर्णांक (बाइट) ऊपर xla_gpu_all_reduce_combine_threshold_bytes देखें.
xla_gpu_enable_pipelined_all_gather बूलियन (सही/गलत) सभी-इकट्ठा करने के निर्देशों की पाइपलाइनिंग की सुविधा चालू करें.
xla_gpu_enable_pipelined_reduce_scatter बूलियन (सही/गलत) reduce-scatter निर्देशों की पाइपलाइनिंग की सुविधा चालू करें.
xla_gpu_enable_pipelined_all_reduce बूलियन (सही/गलत) सभी-कम करने के निर्देशों की पाइपलाइनिंग की सुविधा चालू करें.
xla_gpu_enable_while_loop_double_buffering बूलियन (सही/गलत) while लूप के लिए डबल-बफ़रिंग की सुविधा चालू करें.
xla_gpu_enable_all_gather_combine_by_dim बूलियन (सही/गलत) सभी-इकट्ठा करने वाले ऑपरेशन को एक ही इकट्ठा करने वाले डाइमेंशन के साथ या उनके डाइमेंशन के बावजूद जोड़ें.
xla_gpu_enable_reduce_scatter_combine_by_dim बूलियन (सही/गलत) एक ही डाइमेंशन या अलग-अलग डाइमेंशन वाले डेटा के लिए, कम करने वाले स्कैटर ऑपरेशन को जोड़ें.