OpInterface की परिभाषाएं

CollectiveOpInterface (Sdy_CollectiveOpInterface)

सभी सामूहिक ऑपरेशन के लिए इंटरफ़ेस. outSharding एट्रिब्यूट के लिए, सामान्य get/set को शामिल करता है.

सीमाएं:

  • ऑपरेंड में शर्डिंग होनी चाहिए या allowMissingInputSharding(), 'सही' दिखाता हो.
  • out_sharding, उस टाइप के हिसाब से मान्य है.
  • अगर allowDifferentMeshes() गलत वैल्यू दिखाता है, तो ऑपरेंड और नतीजे की शर्डिंग में एक ही मेश होना चाहिए.
  • ऑपरेंड और नतीजे की शर्डिंग के लिए एक ही रैंक.

तरीके:

getOutSharding

::mlir::sdy::TensorShardingAttr getOutSharding();

यह फ़ंक्शन, एक साथ कई ऑपरेशन करने वाले ऑपरेशन के आउटपुट टेंसर की शर्डिंग दिखाता है.

setOutShardingAttr

void setOutShardingAttr(::mlir::sdy::TensorShardingAttr sharding);

यह एक साथ कई ऑपरेशन करने की सुविधा वाले ऑपरेशन के आउटपुट टेंसर को शर्ड करने की सुविधा सेट करता है.

getTensor

::mlir::TypedValue<::mlir::TensorType> getTensor();

कलेटिव ऑपरेशन का टेंसर ऑपरेंड पाएं.

getType

::mlir::Type getType();

कलेटिव ऑपरेशन के नतीजे का टाइप पाएं.

allowDifferentMeshes

bool allowDifferentMeshes();

इससे पता चलता है कि कलेटिव ऑपरेशन में, इनपुट और आउटपुट के लिए अलग-अलग मेश इस्तेमाल किए जा सकते हैं या नहीं.

allowMissingInputSharding

bool allowMissingInputSharding();

इससे पता चलता है कि कलेटिव ऑपरेशन में इनपुट को बिना शीयर किया जा सकता है या नहीं.इसका मतलब है कि इनपुट को पूरी तरह से डुप्लीकेट किया जा सकता है.

ShardableDataFlowOpInterface (Sdy_ShardableDataFlowOpInterface)

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

किसी ऑपरेटर X का डेटा फ़्लो एज, सोर्स के एक सेट (हर सोर्स, X का ऑपरेंड या X के ब्लॉक टर्मिनेटर का ऑपरेंड होता है) और टारगेट के एक सेट (हर टारगेट, X का नतीजा या X का ब्लॉक आर्ग्युमेंट होता है) के बीच एक ब्रिज तय करता है. ऐसा इसलिए किया जाता है, ताकि सभी सोर्स और टारगेट को एक ही तरह से शर्ड किया जा सके. किसी ऑपरेशन में कई डेटा फ़्लो एज हो सकते हैं, जो एक-दूसरे के लिए ऑर्थोगोनल होते हैं.

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

उदाहरण के लिए:

  y_1, ..., y_n = custom_op (x_1, ..., x_n)
                  ((body_arg_1,..., body_arg_n) {
                    ...
                    return return_value_1, ..., return_value_n
                  })

इस कस्टम_ऑपरेशन में डेटा फ़्लो एज के दो टाइप होते हैं. return_value_i (सोर्स) और y_i (टारगेट) के बीच n एज और x_i(सोर्स) और body_arg_i(टारगेट) के बीच n एज. इस मामले में, एज के मालिक और टारगेट एक ही होते हैं.

यहां एक से ज़्यादा टारगेट वाले ऑपरेशन का उदाहरण दिया गया है:

  y_0, ..., y_n = while (x_0, ..., x_n)
                  ((pred_arg_0,... , pred_arg_n) { ... })
                  ((body_arg_0,..., body_arg_n) {
                    ...
                    return return_value_0, ..., return_value_n
                  })

इस while op में n डेटा फ़्लो एज हैं. i-th डेटा फ़्लो एज, सोर्स x_i, return_value_i और टारगेट y_i, pred_arg_i, body_arg_i के बीच है.

तरीके:

getBlockArgumentEdgeOwnerShardings

mlir::SmallVector<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();

यह फ़ंक्शन, ब्लॉक आर्ग्युमेंट डेटा फ़्लो एज के सभी मालिकों की शार्डिंग दिखाता है.

setBlockArgumentEdgeOwnerShardings

void setBlockArgumentEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

ब्लॉक आर्ग्युमेंट के सभी किनारों के मालिकों का shardings सेट करता है.

getOpResultEdgeOwnerShardings

mlir::SmallVector<mlir::sdy::TensorShardingAttr> getOpResultEdgeOwnerShardings();

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

setOpResultEdgeOwnerShardings

void setOpResultEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

सभी ऑपरेटिव नतीजों के किनारे के मालिकों के shardings सेट करता है.

transformTargetSharding

mlir::sdy::TensorShardingAttr transformTargetSharding(mlir::Value target, mlir::sdy::TensorShardingAttr sharding, mlir::sdy::DataFlowShardingTransformType transformType);

transformType के आधार पर, टारगेट के sharding को बदलता है

ज़्यादा जानकारी के लिए, DataFlowShardingTransformType पर जाएं.

getBlockArgumentEdgeOwners

mlir::ArrayRef<mlir::BlockArgument> getBlockArgumentEdgeOwners();

ब्लॉक आर्ग्युमेंट के सभी एज के मालिकों की जानकारी पाता है.

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

सभी ऑप्टिमाइज़ किए गए नतीजों के एज मालिकों की जानकारी मिलती है.

getEdgeSources

mlir::SmallVector<mlir::OpOperand*> getEdgeSources(mlir::Value owner);

एज owner के हिसाब से, डेटा फ़्लो एज सोर्स पाता है.

getEdgeOwnerFromTarget

mlir::Value getEdgeOwnerFromTarget(mlir::Value target);

किसी target को डेटा फ़्लो एज के मालिक target के तौर पर दिखाता है. यह target, मालिक हो सकता है या नहीं.

getEdgeOwnerFromSource

mlir::Value getEdgeOwnerFromSource(mlir::OpOperand&source);

किसी source के दिए गए डेटा फ़्लो एज का मालिकाना हक टारगेट पाता है.

getNonEdgeOwnerTargets

mlir::SmallVector<mlir::Value> getNonEdgeOwnerTargets(mlir::Value owner);

यह फ़ंक्शन, एज owner के लिए, डेटा फ़्लो एज के ऐसे टारगेट दिखाता है जिनका मालिकाना हक आपके पास नहीं है.

ShardingRuleOpInterface (Sdy_ShardingRuleOpInterface)

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

तरीके:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

ऑपरेशन का शार्डिंग नियम दिखाता है.