-sdy-add-data-flow-edges

हर डेटा-फ़्लो एज के लिए DataFlowEdgeOp डालता है.

यह हर उस वैल्यू के लिए DataFlowEdgeOp डालता है जो डेटा-फ़्लो एज का मालिक है. इसका मतलब है कि मॉड्यूल में हर ऑपरेशन पर getDataFlowEdgeOwners से मिली सभी वैल्यू.

अगर मालिक के टारगेट के लिए मौजूदा शर्डिंग है, तो डाले गए DataFlowEdgeOp में वह शर्डिंग इस्तेमाल की जाएगी.

-sdy-apply-sharding-constraints

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

अगर ShardingConstraintOp इन सभी शर्तों को पूरा करता है, तो इसके इनपुट में sharding को कॉपी करता है:

  • इनपुट में पहले से कोई शार्डिंग नहीं है.
  • ShardingConstraintOp की शर्डिंग पूरी तरह से बंद हो गई है.
  • इनपुट में, ShardingConstraintOp या ManualComputationOp टाइप के ऐसे कोई अन्य उपयोगकर्ता नहीं हैं जिनकी शर्डिंग अलग हो.

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

अगर इनपुट किसी DataFlowEdgeOp से जनरेट होता है, तो हम एज के सभी टारगेट की sharding पर पाबंदी लगाने से बचने के लिए, ऑपरेटर की sharding सेट करने के बजाय, input के सभी इस्तेमाल को ShardingConstraintOp से बदल देते हैं.

ध्यान दें कि इस पास के बावजूद, ShardingConstraintOp की शार्डिंग, प्रोपेगेशन के दौरान अपने इनपुट या उपयोगकर्ताओं पर प्रोपेगेट होगी. हालांकि, किसी डाइमेंशन की क्लोज़्ड प्रॉपर्टी प्रोपेगेट नहीं होती. इसलिए, ऊपर दिए गए मामलों में पूरी तरह से शर्त का पालन करने के लिए, शार्डिंग को कॉपी करना ज़रूरी है.

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

  • टेंसर को ShardingConstraintOp ने जनरेट नहीं किया है और इसमें ShardingConstraintOp या ManualComputationOp टाइप के कोई अन्य उपयोगकर्ता नहीं है;
  • चेन में मौजूद किसी भी ShardingConstraintOp का इस्तेमाल एक से ज़्यादा बार नहीं किया गया है, सिवाय आखिरी ShardingConstraintOp के;
  • चेन में मौजूद आखिरी ShardingConstraintOp में, ShardingConstraintOp या ManualComputationOp टाइप के कोई उपयोगकर्ता नहीं है (अन्यथा यह चेन में आखिरी नहीं होगा);

तो यह पास, चेन के इनपुट के उन सभी इस्तेमाल को बदल देता है जो चेन में आखिरी ShardingConstraintOp के बाद (और उसी ब्लॉक में) तय किए गए हैं. इनके बदले, चेन के नतीजे का इस्तेमाल किया जाता है, क्योंकि इनके इस्तेमाल के लिए, शर्डिंग तय की जानी चाहिए.

-sdy-constant-splitter

यह लगातार होने वाली गणनाओं को अलग-अलग करता है, ताकि हर गणना का इस्तेमाल एक बार किया जा सके.

लगातार होने वाली सब-कंप्यूटेशन को इस तरह से बांटता है कि उनका एक उपयोगकर्ता हो.

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

कोई स्थिर सब-कंप्यूटेशन इनमें से कोई एक होता है:

  • कोई कॉन्स्टेंट या iota ऑपरेटर (कोई ऑपरेंड नहीं)
  • ब्रॉडकास्ट, स्लाइस या एलिमेंट के हिसाब से किया जाने वाला ऑपरेशन, जिसके सभी ऑपरेंड को लगातार सब-कंप्यूटेशन (बार-बार) से परिभाषित किया जाता है. साथ ही, इसके ऑपरेंड को परिभाषित करने वाले सभी सब-कंप्यूटेशन भी शामिल होते हैं.

ध्यान दें कि किसी सब-कंप्यूटेशन में, किसी वैल्यू का इस्तेमाल कई बार किया जा सकता है.

-sdy-lift-inlined-meshes

शर्डिंग में इनलाइन किए गए MeshAttr को सिंबल MeshOp के तौर पर हटाता है.

यह TensorShardingAttr में मौजूद किसी भी इनलाइन किए गए MeshAttr को, मशीन लर्निंग के लिए इस्तेमाल होने वाले सिंबल के नाम से बदल देता है. यह सिंबल, मॉड्यूल में मौजूद किसी मौजूदा या नए MeshOp का रेफ़रंस देता है. इससे, किसी भी दो MeshOp में एक जैसा MeshAttr नहीं होता. साथ ही, मौजूदा 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. अलग-अलग ग्रुप को एक साथ जोड़ना

    ग्रुप की सदस्यता की ट्रांज़िटिव प्रॉपर्टी का इस्तेमाल करके, shaerding ग्रुप को जोड़ता है. जब भी कोई टेंसर T, शर्डिंग ग्रुप G1 और शर्डिंग ग्रुप G2 में होता है, तो हम यह अनुमान लगा सकते हैं कि G1 और G2 के सभी सदस्यों को एक ही तरह से शर्ड किया जाना चाहिए. इसलिए, हम G1 और G2 को एक ग्रुप में जोड़ सकते हैं. ग्रुप के कम से कम सेट के लिए, मर्ज करने के बाद कैननिकल ग्रुप आईडी का सेट 0,1,...N-1 होगा.

  2. शेयर किए गए डेटा के ग्रुप की पुष्टि करना

    यह पुष्टि करता है कि शर्डिंग ग्रुप सही तरीके से बनाए गए हैं और लागू करने के दौरान, उनमें बताई गई बातों के मुताबिक हैं. फ़िलहाल, यह नियम है कि अगर किसी sharding ग्रुप में ManualComputationOp के ब्लॉक में कोई Value शामिल है, तो उस ग्रुप की सभी अन्य वैल्यू उसी ब्लॉक में होनी चाहिए.