-mpmd-copy-topology-from-main
mpmd.call से रेफ़र किए गए फ़ंक्शन में, मुख्य फ़ंक्शन से टोपोलॉजी कॉपी करता है.
mpmd.call से रेफ़र किए गए किसी भी फ़ंक्शन में, मुख्य फ़ंक्शन से टोपोलॉजी एट्रिब्यूट कॉपी करता है. इससे mpmd.call कैली को निजी तौर पर दिखने की सेटिंग पर भी सेट किया जाता है, ताकि इसे एंट्री पॉइंट फ़ंक्शन न समझा जाए.
-mpmd-enforce-input-output-equisharding
MPMD फ़ंक्शन के लिए, इक्विशार्डिंग की पाबंदियां लागू करता है.
ज़रूरत पड़ने पर, TransferOps को शामिल करके, MPMD फ़ंक्शन के लिए इनपुट-आउटपुट इक्विशार्डिंग की पाबंदियां लागू करता है.
विकल्प
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-generate-sdy-meshes-from-topology
MPMD टोपोलॉजी के आधार पर, शर्डी मेश जनरेट करता है.
यह पास, मौजूदा सभी शर्डी मेश ऑप्स को हटाता है और उन्हें MPMD टोपोलॉजी के आधार पर ऑप्स से बदलता है. यह नए मेश ऑप्स को रेफ़र करने के लिए, टेंसर शार्डिंग को भी अपडेट करता है.
-mpmd-infer-mesh-assign-mesh-func-leaves
_use_set और srcset के विश्लेषण का इस्तेमाल करके, इस्तेमाल न की गई हर कंप्यूटेशन, फ़ंक्शन आउटपुट, और फ़ंक्शन इनपुट को मेश असाइन करता है.
यह पास, AssignOps बनाकर या टाइप बदलकर, फ़ंक्शन बॉडी लीफ़ (यानी, इस्तेमाल न की गई कंप्यूटेशन, इस्तेमाल न किए गए फ़ंक्शन आर्ग्युमेंट, और फ़ंक्शन आउटपुट के नतीजे) को मेश असाइन करता है. इसके लिए, use_set और src_set की जानकारी का इस्तेमाल किया जाता है.
विश्लेषण के लिए, हम कुछ इंटरमीडिएट वैल्यू को लीफ़ के तौर पर भी मानते हैं. जैसे: mpmd.reduce और mpmd.broadcast के ऑपरेंड को लीफ़ के तौर पर माना जाता है. साथ ही, इन पर असाइन-अनअसाइन पेयर बनाया जाएगा.
इस असाइनमेंट से, सभी नॉन-लीफ़ ऑप्स का use_set साफ़ हो जाएगा, क्योंकि पहले एनोटेट किए गए इस्तेमाल, पुराने हो जाएंगे. ऐसा इसलिए होगा, क्योंकि रिड्यूस ऑप्स का अनुमान लगाने से कुछ वैल्यू का use_set बदल जाएगा: शुरुआती use_set का अनुमान, रिड्यूस ऑप्स के बारे में नहीं बताता. हालांकि, अब हमने रिड्यूस ऑप्स का अनुमान लगा लिया है, इसलिए अनुमान अलग होगा.
अगर लीफ़ ऑप्स के लिए, यूज़-सेट और एसआरसी-सेट सही तरीके से नहीं भरे गए हैं, तो यह पास काम नहीं करेगा और गड़बड़ियां दिखाएगा.
पहले से मौजूद शर्त: हर ऑप में, खाली न होने वाला एसआरसी-सेट होना चाहिए. अगर ऐसा नहीं है, तो हम ट्रांसफ़र का अनुमान लगाते हैं.
विकल्प
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-assign-using-input-output-constraints
इनपुट-आउटपुट असाइनमेंट की पाबंदियों के मुताबिक, इनपुट और आउटपुट को मेश असाइन करता है.
यह पास, इनपुट-आउटपुट इक्वि-असाइनमेंट की पाबंदियों का इस्तेमाल करके, इनपुट और आउटपुट, दोनों को एक ही मेश असाइन करता है.
ध्यान दें कि इससे इस बात की गारंटी मिलती है कि इनपुट एक ही मेश पर है. भले ही, बाद में इसे दूसरे मेश पर ट्रांसफ़र किया गया हो. हालांकि, इसका मतलब है कि हमें इस पास के बाद, populate-src-set नहीं चलाना चाहिए.
ज़रूरी शर्तें:
- एंट्री-पॉइंट फ़ंक्शन के किसी भी इनपुट
iके लिए, जो इक्वि-असाइनमेंट की पाबंदी का हिस्सा हो सकता है:iमें MeshTensorType या अच्छी तरह से तय किया गया यूज़-सेट होना चाहिए. - एंट्री-पॉइंट फ़ंक्शन के किसी भी आउटपुट
oके लिए, जो इक्वि-असाइनमेंट की पाबंदी का हिस्सा हो सकता है:oमें MeshTensorType या अच्छी तरह से तय किए गए एसआरसी-सेट और यूज़-सेट होने चाहिए.
किसी वैल्यू के अच्छी तरह से तय किए गए यूज़-सेट में, वे सभी मेश शामिल होते हैं जिन्हें वैल्यू (ट्रांज़िटिव तरीके से) असाइन की जाती है. इसके लिए, mpmd.assign ऑप्स का इस्तेमाल किया जाता है. इसमें कोई दूसरा मेश शामिल नहीं होता. अच्छी तरह से तय किए गए एसआरसी-सेट में, वे सभी मेश शामिल होते हैं जहां टेंसर को रहने की अनुमति होती है. इसमें कोई दूसरा मेश शामिल नहीं होता..
हालांकि, यह सिर्फ़ एंट्री पॉइंट फ़ंक्शन पर चलता है, लेकिन हम इसे मॉड्यूल ऑप पास बनाते हैं, क्योंकि इसे चलाने से पहले, मौजूदा फ़ंक्शन पर सभी पास पूरे होने चाहिए. उदाहरण के लिए, अगर हम इसे EntryPointFunctionPass बनाते हैं, तो पास मैनेजर, एंट्री पॉइंट फ़ंक्शन के अलावा दूसरे फ़ंक्शन पर पुष्टि पूरी होने से पहले, इस पास को चला सकता है.
विकल्प
-verbose-logging : Whether to enable verbose logging
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-infer-mesh-convert-reduce-ops
एनोटेट किए गए रिड्यूस ऑप्स को mpmd.reduce ऑप्स में बदलता है और रिड्यूस ऑप्स की चेन को फ़्लैट करता है.
एनोटेट किए गए रिड्यूस ऑप्स को mpmd.reduce ऑप्स में बदलता है. साथ ही, इन रिड्यूस ऑप्स की चेन को फ़्लैट करता है.
सिंबल में:
x = add(w0, w1) {mpmd.reduce = #mpmd.reduce
विकल्प
-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.
-mpmd-infer-mesh-finalize
पैटर्न मेश के अनुमान के बाद, फ़ाइनल क्लीन अप लागू करता है.
विकल्प
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-mpmd-infer-mesh-populate-src-set
_UnassignOps और func आर्ग्युमेंट के लिए src_set को शुरू करता है. साथ ही, srcset. को आगे बढ़ाता है._
यह पास, src_set को शुरू करता है और इसे आगे बढ़ाता है. साथ ही, src_set की जानकारी के साथ ग्राफ़ को भरता है.
पहले से मौजूद शर्त: func आर्ग्युमेंट में src_set होने के लिए, use_set भरा होना चाहिए.
शुरुआत: UnassignOp का src_set, उस मेश पर सेट होता है जिसे वह असाइन करता है. func आर्ग्युमेंट का src_set, उसके use_set पर सेट होता है.
आगे बढ़ाना: src_set, ऑपरेंड से ऑप तक आगे बढ़ते हैं. इसके लिए, ऑपरेंड का इंटरसेक्शन लिया जाता है. ज़्यादा जानकारी के लिए, PropagateSrcSet देखें.
-mpmd-infer-mesh-populate-use-set
_AssignOps के लिए use_set को शुरू करता है और useset को आगे बढ़ाता है._
यह पास, use_set को शुरू करता है और इसे पीछे की ओर बढ़ाता है. साथ ही, use_set की जानकारी के साथ ग्राफ़ को भरता है.
शुरुआत: AssignOp का use_set, उस मेश पर सेट होता है जिसे वह असाइन करता है.
आगे बढ़ाना: use_set, उपयोगकर्ताओं से ऑप तक पीछे की ओर बढ़ते हैं. इसके लिए, उपयोगकर्ताओं का यूनियन लिया जाता है. किसी ऑप का use_set, परिभाषा के मुताबिक, उसके उपयोगकर्ताओं के use_set का यूनियन होता है, क्योंकि use_set, ट्रांज़िटिव इस्तेमाल का सेट होता है.
-mpmd-infer-mesh-rewrite-using-analysis
_useset के मुताबिक, ऑप्स को फिर से लिखता है._
यह पास, use_set और src_set के विश्लेषण का इस्तेमाल करके, मेशलेस ऑप्स को फ़्रैगमेंट में रैप करके असाइन करता है.
यह क्लीन अप के तौर पर, use_set और src_set एट्रिब्यूट को भी हटाता है, क्योंकि इसके बाद विश्लेषण की ज़रूरत नहीं होती.
पहले से मौजूद शर्त: हर ऑप में use_set होना चाहिए. इसका मतलब है कि विश्लेषण पूरा हो गया है. पहले से मौजूद शर्त: एंट्री पॉइंट फ़ंक्शन के अलावा दूसरे फ़ंक्शन का हर आर्ग्युमेंट, कम से कम एक नॉन-टर्मिनेटर ऑप से इस्तेमाल किया जाता है.
काम: jupvfranco - इस पास का नाम बदलने पर विचार करें, क्योंकि अब यह विश्लेषण पर ज़्यादा निर्भर नहीं करता.
विकल्प
-max-clones : How many copies of a meshless operation we allow. Setting it to 1 means we never clone the op.
-mpmd-infer-mesh-validate-no-additional-transfers-needed
पुष्टि करता है कि मेश असाइनमेंट के लिए, किसी और ट्रांसफ़र की ज़रूरत नहीं है.
यह पास पुष्टि करता है कि किसी और ट्रांसफ़र को शामिल किए बिना, सभी मेशलेस ऑप्स के लिए मेश असाइनमेंट किया जा सकता है.
func ऑप्स के अलावा, मेशलेस ऑप्स के लिए, इन स्थितियों में गड़बड़ी होती है:
- किसी दिए गए ऑप के लिए, use_set, src_set में शामिल नहीं है. इसका मतलब है कि ट्रांसफ़र की ज़रूरत है.
func ऑप्स के लिए, func आर्ग्युमेंट के लिए ऊपर दी गई शर्तों की जांच करना काफ़ी है, क्योंकि func, मेशलेस ऑप्स या ब्लॉक आर्ग्युमेंट दिखाता है.
विकल्प
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-validate-src-set-not-empty
_पुष्टि करता है कि हर मेशलेस ऑप में, खाली न होने वाला srcset है.
यह पास, सभी मेशलेस ऑप्स की पुष्टि करता है. साथ ही, यह जांचता है कि ऑप को कहीं असाइन किया जा सकता है या नहीं. यानी, func ऑप्स के अलावा, मेशलेस ऑप्स के लिए, इन स्थितियों में गड़बड़ी होती है: किसी ऑप पर src_set खाली है या अगर यह अनुमान लगाया गया है कि यह क्रॉस-मेश रिडक्शन है, लेकिन इसे बदला नहीं गया है. यह func लीफ़ असाइनमेंट के लिए ज़रूरी शर्त है.
func ऑप्स के लिए, func आर्ग्युमेंट के लिए ऊपर दी गई शर्तों की जांच करना काफ़ी है, क्योंकि func, मेशलेस ऑप्स या ब्लॉक आर्ग्युमेंट दिखाता है.
यह मॉड्यूल लेवल पर एक पास होना चाहिए, क्योंकि कैली में गड़बड़ी होने पर, हम कॉलर को प्रिंट करना चाहते हैं.
पहले से मौजूद शर्त: इस पास को चलाने से पहले, क्रॉस-मेश रिडक्शन को रिड्यूस ऑप्स में बदल दिया जाना चाहिए.
विकल्प
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
नाम वाली कंप्यूटेशन में नेस्ट किए गए, उपयोगकर्ता के लिए दिखने वाले किसी भी mpmd ऑप को इनलाइन करता है.
नाम वाली किसी भी कंप्यूटेशन, नाम वाले टेंसर, ब्रॉडकास्ट, और रिड्यूस ऑप को इनलाइन करता है. यह ऑप, नाम वाली कंप्यूटेशन में नेस्ट किया गया है. साथ ही, यह जांचता है कि इसका मेश असाइनमेंट (अगर तय किया गया है) पैरंट के मेश असाइनमेंट से मैच करता है या नहीं.
विकल्प
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-insert-nameless-clone-of-negligible-ops
नाम वाली कंप्यूटेशन के अलावा, नगण्य ऑप्स को क्लोन करता है.
नगण्य कार्रवाइयों को क्लोन करता है. जैसे, सिंगल रिज़ल्ट, ज़ीरो ऑपरेंड कार्रवाइयां. यह कार्रवाइयां, नाम वाली कंप्यूटेशन के अलावा तब क्लोन होती हैं, जब इनका इस्तेमाल कंप्यूटेशन के रिटर्न ऑप से किया जाता है. साथ ही, नाम वाली कंप्यूटेशन के नतीजे को क्लोन से बदल दिया जाता है. यह इसलिए ज़रूरी है, क्योंकि अगर अलग-अलग मेश को असाइन की गई नाम वाली कंप्यूटेशन से ऐसे नतीजों का इस्तेमाल किया जाता है, तो इससे मेश के अनुमान में टकराव हो सकता है. इस पास को लागू करके, हम मेश के अनुमान को इन नगण्य ऑप्स को क्लोन करने की अनुमति देते हैं.
यह पास, नाम वाली कंप्यूटेशन में कोई बदलाव नहीं करता.
-mpmd-introduce-transfers
उपयोगकर्ता के मेश असाइनमेंट के आधार पर, डेटा ट्रांसफ़र बनाता है.
एक ऐसा पास बनाता है जो उपयोगकर्ता के मेश असाइनमेंट के आधार पर, ट्रांसफ़र कार्रवाइयां शुरू करता है. इसमें यह शामिल है:
- अगर UnassignOp के नतीजे को बाद में कैली में असाइन किया जाता है, तो mpmd कॉल में UnassignOp को पुश करें.
- UnassignOp के AssignOp को TransferOp से बदलता है.
- अगर फ़्रैगमेंट के बीच, मेशलेस एडिशन है, तो एडिशन को इस्तेमाल करने वाले मेश को असाइन करें और ट्रांसफ़र शुरू करें.
-mpmd-map-input-output-to-mesh
फ़ंक्शन इनपुट और आउटपुट को मेश असाइन करता है.
एक ऐसा पास बनाता है जो उपयोगकर्ता के तय किए गए मेश असाइनमेंट के आधार पर, फ़ंक्शन इनपुट/आउटपुट को मेश पर मैप करता है.
इनपुट आर्ग्युमेंट के लिए, यह पास:
- इनपुट टेंसर को मेश टेंसर में कास्ट करता है. इन टेंसर को मेश पर रखा जाना चाहिए.
- फ़ंक्शन सिग्नेचर अपडेट करता है.
- टेंसर के इस्तेमाल से पहले, mpmd.unassign जोड़ता है.
आउटपुट आर्ग्युमेंट के लिए, यह पास, टेंसर के वापस आने से पहले mpmd.assign जोड़ता है और फ़ंक्शन सिग्नेचर अपडेट करता है.
ज़रूरी शर्तें: हर इनपुट/आउटपुट इंडेक्स मान्य होना चाहिए और मैप किया गया हर मेश, टोपोलॉजी में मान्य मेश होना चाहिए.
विकल्प
-input-assignment : Mapping between function input indices and assigned mesh names.E.g., '0@m0,1@m1' defines that input with index 0 will be assigned to mesh m0 and input with index 1 will be assigned to mesh m1.
-output-assignment : Mapping between function output indices and assigned mesh names.E.g., '0@m0,1@m1' defines that output with index 0 will be assigned to mesh m0 and output with index 1 will be assigned to mesh m1.
-mpmd-map-named-ops-to-mpmd-ops
उपयोगकर्ता के तय किए गए ऑपरेशंस को मेश असाइन करता है.
एक ऐसा पास बनाता है जो Assign(Unassign(%v)) को mpmd.named_tensor असाइन करता है. यह पास, assignment में एंट्री होने पर ही असाइन करता है. साथ ही, यह पास, नाम वाली हर कंप्यूटेशन को मेश पर मैप करता है. इसके लिए, नाम वाली कंप्यूटेशन और मेश के नामों के बीच, उपयोगकर्ता के तय किए गए मैपिंग का इस्तेमाल किया जाता है. इसका मतलब है कि नाम वाली हर कंप्यूटेशन को फ़्रैगमेंट से बदलना और इन फ़्रैगमेंट के ऑपरेंड के लिए AssignOps और नतीजों के लिए UnassignOps बनाना. अब शुरू किया गया पैटर्न Assign(Unassign(%v)) को Transfer(%v) में फिर से लिखा जाता है.
इस पास के बाद, नाम वाली कंप्यूटेशन/नाम वाले टेंसर ऑप्स मौजूद नहीं होंगे.
ज़रूरी शर्तें: सभी नाम वाली कंप्यूटेशन और नाम वाले टेंसर, फ़ंक्शन के टॉप-लेवल पर मौजूद होने चाहिए.
विकल्प
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-simplify-named-computations
नाम वाली कंप्यूटेशन ऑप्स के इनपुट और आउटपुट को आसान बनाता है.
नाम वाली हर कंप्यूटेशन को अलग-अलग आसान बनाता है. खास तौर पर, यह:
- नतीजों और उनकी संबंधित रिटर्न वैल्यू को डुप्लीकेट होने से बचाता है;
- ऑपरेंड और उनके संबंधित ब्लॉक आर्ग्युमेंट को डुप्लीकेट होने से बचाता है;
- उन नतीजों को हटाता है जिनके संबंधित रिटर्न ऑपरेंड, ऑप का ब्लॉक आर्ग्युमेंट होता है;
- उन ऑपरेंड को हटाता है जिनके संबंधित ब्लॉक आर्ग्युमेंट का अब कोई इस्तेमाल नहीं है (या शुरुआत से ही कोई इस्तेमाल नहीं था); और
- उन नतीजों को हटाता है जिनका इस्तेमाल नहीं किया गया है.
- नाम वाली कंप्यूटेशन में,
arg -> stablehlo.optimization_barrier -> returnपैटर्न कोarg -> returnपैटर्न से बदलता है, ताकि इसे और आसान बनाया जा सके.
-mpmd-validate-named-ops-in-mpmd-func
पुष्टि करता है कि नाम वाले ऑप्स सिर्फ़ mpmd फ़ंक्शन में नेस्ट किए गए हैं.
पुष्टि करता है कि NamedComputationOp और NamedTensorOp सिर्फ़ mpmd फ़ंक्शन में नेस्ट किए गए हैं. यानी, टोपोलॉजी एट्रिब्यूट वाले फ़ंक्शन में.