-sdy-add-data-flow-edges
हर डेटा-फ़्लो एज के लिए DataFlowEdgeOp
डालता है.
हर उस वैल्यू के लिए DataFlowEdgeOp
डालता है जो डेटा-फ़्लो एज का मालिक है. इसका मतलब है कि मॉड्यूल में हर ऑपरेशन पर getDataFlowEdgeOwners
से मिली सभी वैल्यू.
अगर मालिक के टारगेट के लिए पहले से कोई शर्डिंग मौजूद है, तो डाले गए DataFlowEdgeOp
में वह शर्डिंग इस्तेमाल की जाएगी.
TODO(b/330339693): getDataFlowEdgeOwners
हटाए जाने पर, इस दस्तावेज़ को अपडेट करें.
-sdy-apply-sharding-constraints
ऐसी पाबंदियां लागू करता है जो इनपुट को अलग-अलग हिस्सों में बांटने का फ़ैसला लेती हैं.
अगर ShardingConstraintOp
इन सभी शर्तों को पूरा करता है, तो यह अपने इनपुट में ShardingConstraintOp
की शर्डिंग को कॉपी करता है:
- इनपुट में पहले से कोई शर्डिंग नहीं है.
- इनपुट को
DataFlowEdgeOp
से जनरेट नहीं किया जाता है, जो एज के सभी टारगेट की sharding को होल्ड करता है. ShardingConstraintOp
की शर्डिंग पूरी तरह से बंद हो गई है.- इनपुट में,
ShardingConstraintOp
याManualComputationOp
टाइप के ऐसे कोई अन्य उपयोगकर्ता नहीं हैं जिनकी शर्डिंग अलग हो.
इससे पता चलता है कि ShardingConstraintOp
अपने इनपुट की sharding तय करता है.
ध्यान दें कि इस पास के बावजूद, ShardingConstraintOp
की शार्डिंग, प्रोपेगेशन के दौरान अपने इनपुट या उपयोगकर्ताओं पर प्रोपेगेट होगी. हालांकि, किसी डाइमेंशन की क्लोज़्ड प्रॉपर्टी प्रोपेगेट नहीं होती. इसलिए, ऊपर दिए गए मामलों में पूरी तरह से शर्त का पालन करने के लिए, शार्डिंग को कॉपी करना ज़रूरी है.
इसके अलावा, अगर किसी टेंसर का इस्तेमाल ShardingConstraintOp
की चेन के ज़रिए किया जाता है, तो यह ज़रूरी है कि वह चेन इन सभी शर्तों को पूरा करती हो:
- टेंसर को
ShardingConstraintOp
से जनरेट नहीं किया गया है और इसमेंShardingConstraintOp
याManualComputationOp
टाइप के कोई अन्य उपयोगकर्ता नहीं है. - चेन में किसी भी
ShardingConstraintOp
का इस्तेमाल सिर्फ़ आखिरी बार किए जाने के अलावा, एक से ज़्यादा नहीं हो सकता. - चेन में मौजूद आखिरी
ShardingConstraintOp
में,ShardingConstraintOp
याManualComputationOp
टाइप के कोई उपयोगकर्ता नहीं होना चाहिए. ऐसा न होने पर, वह चेन में आखिरी नहीं होगा.
इसके बाद यह पास, चेन के इनपुट के उन अन्य सभी इस्तेमाल की जगह ले लेता है जो
चेन में आखिरी ShardingConstraintOp
के बाद (और उसी ब्लॉक में) के बारे में बताए गए हैं.
ये पास, चेन के नतीजे के तौर पर होते हैं. ऐसा इसलिए, क्योंकि इसे इन इस्तेमाल के बारे में शार्डिंग के बारे में बताया जाना चाहिए.
-sdy-constant-splitter
यह लगातार होने वाली गणनाओं को अलग-अलग करता है, ताकि हर गणना का इस्तेमाल एक बार किया जा सके.
लगातार होने वाली सब-कंप्यूटेशन को इस तरह से बांटता है कि उनका एक उपयोगकर्ता हो.
इससे यह पक्का होता है कि किसी कॉन्स्टेंट सब-कंप्यूटेशन के अलग-अलग इस्तेमाल के बीच, एक ही तरह से शर्डिंग न की जाए, क्योंकि इसे गलत डिपेंडेंसी माना जाता है. किसी कॉन्स्टेंट के इस्तेमाल को सिर्फ़ इसलिए एक ही तरह से शर्ड नहीं किया जाना चाहिए, क्योंकि वे एक ही कॉन्स्टेंट का इस्तेमाल करते हैं. इस मामले में, हर इस्तेमाल के लिए अलग शार्डिंग हो सकती है, जो कॉन्स्टेंट सब-कंप्यूटेशन की अपनी कॉपी में अलग-अलग हो सकती है.
कोई स्थिर सब-कंप्यूटेशन इनमें से कोई एक होता है:
- कोई कॉन्स्टेंट या iota ऑपरेटर (कोई ऑपरेंड नहीं)
- एक ब्रॉडकास्ट, स्लाइस या पूरी तरह से एलिमेंट के हिसाब से ऑपरेट किया गया ऑपरेशन, जिसके सभी ऑपरेंड को लगातार सब-कंप्यूटेशन (बार-बार होने वाली) से तय किया जाता है. साथ ही, वे सभी सब-कंप्यूटेशन भी होते हैं जो इसके ऑपरेंड को तय करते हैं.
ध्यान दें कि कॉन्सटैंट सब-कंप्यूटेशन में वैल्यू के लिए, उस सब-कंप्यूटेशन में कई इस्तेमाल हो सकते हैं.
-sdy-lift-inlined-meshes
शर्डिंग में इनलाइन किए गए MeshAttr
को सिंबल MeshOp
के तौर पर हटाता है.
यह TensorShardingAttr
में मौजूद किसी भी इनलाइन किए गए MeshAttr
को, मॉड्यूल में मौजूद या नए MeshOp
का रेफ़रंस देने वाले मेश सिंबल के नाम से बदल देता है. ऐसा इसलिए किया जाता है, ताकि एक जैसे MeshAttr
वाले दो MeshOp
न हों. साथ ही, मौजूदा MeshOp
को भी डुप्लीकेट नहीं किया जाता.
हर नए MeshOp
का नाम इनमें से कोई एक होगा:
maximal_mesh_{device-id}
, ज़्यादा से ज़्यादा मेश के लिए (यानी, खाली ऐक्सिस सूची और एक डिवाइस आईडी).- अन्य मामलों में, [
mesh
,mesh_0
,mesh_1
, ...] में उपलब्ध नाम. ###-sdy-manual-axes-cleanup
ManualComputationOp
में मैन्युअल ऐक्सिस के इस्तेमाल को हटाता है
1) किसी भी इन/आउट शार्डिंग के लिए, मैन्युअल ऐक्सिस की जानकारी न होने पर, मैन्युअल ऐक्सिस को replicated_axes में जोड़ें. इससे यह पक्का होता है कि मैन्युअल ऐक्सिस के लिए, हमेशा पूरी जानकारी दी गई हो.
2) मैन्युअल ऐक्सिस को मेश ऐक्सिस के एलान के क्रम में क्रम से लगाता है.
-sdy-sharding-group-import
शार्डिंग ग्रुप के लिए कैननिकल और पुष्टि करने का पास.
इंपोर्ट करने पर, शर्डिंग ग्रुप में कैननिकल डेटा बनाने और उसकी पुष्टि करने की सुविधा लागू होती है. इनके नाम हैं:
1) शर्डिंग ग्रुप को एक साथ जोड़ना - ग्रुप की सदस्यता की ट्रांज़िटिव प्रॉपर्टी का इस्तेमाल करके, शर्डिंग ग्रुप को एक साथ जोड़ता है. जब भी कोई टेंसर T, shaerding ग्रुप G1 और shaerding ग्रुप G2 में होता है, तो हम यह अनुमान लगा सकते हैं कि G1 और G2 के सभी सदस्यों को एक ही तरह से shaer किया जाना चाहिए. इसलिए, हम G1 और G2 को एक ही ग्रुप में जोड़ सकते हैं. मर्ज करने के बाद, ग्रुप के सबसे कम सेट के लिए कैननिकल ग्रुप आईडी का सेट 0,1,...N-1 होगा.
2) शीयरिंग ग्रुप की पुष्टि करना
इससे यह पुष्टि की जाती है कि शीयरिंग ग्रुप सही तरीके से बनाए गए हैं और लागू करने के दौरान, उनसे जुड़ी मान्यताओं के मुताबिक हैं. फ़िलहाल, यह इस बात का दावा करता है कि अगर किसी sharding ग्रुप में ManualComputationOp
के ब्लॉक में तय किया गया Value
है, तो उस ग्रुप की सभी अन्य वैल्यू एक ही ब्लॉक में होनी चाहिए.