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();
ऑपरेशन का शार्डिंग नियम दिखाता है.