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