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

ShardableDataFlowOpInterface (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
                  })

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

तरीके:

getBlockArgumentEdgeOwnerShardings

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

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

setBlockArgumentEdgeOwnerSharding

void setBlockArgumentEdgeOwnerSharding(unsigned index, mlir::sdy::TensorShardingAttr sharding);

दिए गए index के साथ, ब्लॉक करें आर्ग्युमेंट के एज के मालिक के sharding को सेट करता है.

setBlockArgumentEdgeOwnerShardings

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

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

getOpResultEdgeOwnerShardings

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

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

setOpResultEdgeOwnerSharding

void setOpResultEdgeOwnerSharding(unsigned index, mlir::sdy::TensorShardingAttr sharding);

दिए गए index के साथ, ऑपरेटिंग सिस्टम के नतीजे के एज के मालिक का sharding सेट करता है.

setOpResultEdgeOwnerShardings

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

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

getBlockArgumentEdgeOwners

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

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

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

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

getEdgeSources

mlir::SmallVector<mlir::Value> getEdgeSources(mlir::Value target);

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

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 (ShardingRuleOpInterface)

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

तरीके:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

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