-mpmd-copy-topology-from-main

প্রধান ফাংশন থেকে mpmd.call দ্বারা নির্দেশিত ফাংশনে টপোলজি অনুলিপি করে।

একটি mpmd.call দ্বারা উল্লেখিত যেকোন ফাংশনে প্রধান ফাংশন থেকে টপোলজি অ্যাট্রিবিউট কপি করে। এটি একটি এন্ট্রি পয়েন্ট ফাংশনের জন্য ভুল হওয়া এড়াতে, mpmd.call callee-কে ব্যক্তিগত দৃশ্যমানতায় সেট করে।

-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 এবং src সেট বিশ্লেষণ ব্যবহার করে প্রতিটি অব্যবহৃত গণনা, ফাংশন আউটপুট এবং ফাংশন ইনপুটে একটি জাল বরাদ্দ করে।

এই পাসটি ব্যবহার_সেট এবং src_set তথ্য ব্যবহার করে AssignOps তৈরি করে বা প্রকার পরিবর্তন করে ফাঙ্ক বডি পাতায় (অর্থাৎ, অব্যবহৃত গণনার ফলাফল, অব্যবহৃত ফাংশন আর্গুমেন্ট এবং ফাংশন আউটপুট) মেশ বরাদ্দ করে।

আমরা বিশ্লেষণের জন্য কিছু মধ্যবর্তী মানকে পাতা হিসাবে বিবেচনা করি। যথা: একটি mpmd.reduce এবং mpmd.broadcast-এর অপারেন্ডগুলিকে পাতা হিসাবে গণ্য করা হয় এবং তাদের উপর একটি অ্যাসাইন-আসাইন জোড়া তৈরি করা হবে৷

এই অ্যাসাইনমেন্টটি সমস্ত নন-লিফ অপস-এর use_set সাফ করবে, কারণ পূর্বে টীকা করা ব্যবহারগুলি বাসি হয়ে যাবে কারণ অনুমান করা রিডুড অপ্স কিছু মানগুলির use_set পরিবর্তন করবে: প্রাথমিক use_set প্রচার কমানো অপস সম্পর্কে অজানা, কিন্তু এখন আমরা কম অপস অনুমান করেছি, প্রচারটি ভিন্ন হবে৷

এই পাসটি ব্যর্থ হবে, ত্রুটি নির্গত করবে, যদি ব্যবহার- এবং src-সেটগুলি লিফ অপ্সের জন্য সঠিকভাবে পপুলেট করা না হয়।

পূর্ব-শর্ত: প্রতিটি অপের একটি অ-খালি src-সেট থাকে, অথবা আমরা স্থানান্তর অনুমান করি।

অপশন

-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 একটি মেশটেনসর টাইপ, বা একটি সু-সংজ্ঞায়িত ব্যবহার-সেট আছে।
  • এন্ট্রি-পয়েন্ট ফাংশনের যে কোনো আউটপুট o যা একটি ইকুই-অ্যাসাইনমেন্ট সীমাবদ্ধতার অংশ হতে পারে: o এর মেশটেনসর টাইপ, বা ভাল-সংজ্ঞায়িত src- এবং ব্যবহার-সেট রয়েছে।

যেখানে একটি মানের একটি সু-সংজ্ঞায়িত ব্যবহার-সেটে সমস্ত মেশ অন্তর্ভুক্ত থাকে, মানটি mpmd.assign ops এর মাধ্যমে বরাদ্দ করা হয় (ট্রানজিটিভলি) এবং অন্য কোন জাল নয়। একটি সু-সংজ্ঞায়িত src-সেটে সমস্ত মেশ রয়েছে যেখানে টেনসরকে বসবাস করার অনুমতি দেওয়া হয় এবং অন্য কোনও জাল নেই।

যদিও এটি শুধুমাত্র এন্ট্রি পয়েন্ট ফাংশনগুলিতে চলে, আমরা এটিকে একটি মডিউল অপ পাস বানাই কারণ এটি চলার আগে বিদ্যমান ফাংশনগুলির সমস্ত পাসের প্রয়োজন। উদাহরণস্বরূপ, যদি আমরা এটিকে একটি 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 ops-এ রূপান্তর করে এবং রিডুড অপস-এর চেইন সমতল করে।

টীকাকৃত রিডুস অপ্সকে mpmd.reduce ops-এ রূপান্তর করে এবং এই রিডুড অপ্সের চেইনকে সমতল করে।

প্রতীকগুলিতে:

x = add(w0, w1) {mpmd.reduce = #mpmd.reduce } y = add(x, w2) {mpmd.reduce = #mpmd.reduce } ~~> r = mpmd.reduce (w0,w1,w2)

অপশন

-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 args-এর জন্য src_set সূচনা করে এবং src সেট প্রচার করে।

এই পাসটি src_set শুরু করে এবং এটিকে প্রচার করে, গ্রাফটিকে src_set তথ্য দিয়ে তৈরি করে।

পূর্ব-শর্ত: func args-এর জন্য src_sets, use_set পপুলেট করা আবশ্যক।

ইনিশিয়ালাইজেশন: একটি UnassignOp-এর src_set যে মেশকে বরাদ্দ করে তাতে সেট করা হয়। একটি func arg এর src_set তার use_set এ সেট করা আছে।

প্রসারণ: src_sets অপারেন্ডের ছেদ গ্রহণ করে অপারেন্ড থেকে অপের দিকে এগিয়ে যায়। বিস্তারিত জানার জন্য PropagateSrcSet দেখুন।

-mpmd-infer-mesh-populate-use-set

_AssignOps-এর জন্য use_set শুরু করে এবং ব্যবহারের সেট প্রচার করে।

এই পাসটি use_set শুরু করে এবং এটিকে পিছনের দিকে প্রচার করে, use_set তথ্যের সাথে গ্রাফটিকে পপুলেট করে।

প্রারম্ভিকতা: একটি AssignOp-এর use_set যে জালকে এটি বরাদ্দ করে তাতে সেট করা হয়।

প্রসারণ: use_sets ব্যবহারকারীদের ইউনিয়ন নিয়ে ব্যবহারকারীদের থেকে অপের দিকে পিছনের দিকে প্রচার করে। একটি অপের use_set হল সংজ্ঞা অনুসারে তার ব্যবহারকারীদের use_sets এর মিলন, যেহেতু use_set হল ট্রানজিটিভ ব্যবহারের সেট।

-mpmd-infer-mesh-rewrite-using-analysis

_ব্যবহারের সেট অনুযায়ী অপ্স পুনরায় লিখুন।

এই পাসটি use_set এবং src_set বিশ্লেষণ ব্যবহার করে টুকরো টুকরো করে মোড়ানো মেশলেস অপ্স নির্ধারণ করে।

এটি পরিষ্কার করার অংশ হিসাবে use_set এবং src_set বৈশিষ্ট্যগুলিকেও সরিয়ে দেয়, যেহেতু এর পরে বিশ্লেষণের আর প্রয়োজন নেই।

পূর্ব-শর্ত: প্রতিটি অপের একটি use_set আছে, অর্থাৎ বিশ্লেষণ সম্পূর্ণ। পূর্ব-শর্ত: একটি নন-এন্ট্রি পয়েন্ট ফাংশনের প্রতিটি আর্গুমেন্ট কমপক্ষে একটি নন-টার্মিনেটর অপের দ্বারা ব্যবহৃত হয়।

TODO: 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

জাল অ্যাসাইনমেন্টের জন্য কোন অতিরিক্ত স্থানান্তরের প্রয়োজন নেই তা যাচাই করে।

এই পাসটি যাচাই করে যে কোনও অতিরিক্ত স্থানান্তর প্রবর্তন না করেই সমস্ত জালবিহীন অপারেশনের জন্য মেশ অ্যাসাইনমেন্ট সম্ভব।

মেশলেস অপ্সের জন্য যা ফাংশন অপস নয়, এতে ত্রুটি হয় যখন:

  1. use_set একটি প্রদত্ত অপের জন্য src_set এর মধ্যে নেই, যেমন একটি স্থানান্তর প্রয়োজন।

Func ops-এর জন্য, func args-এর জন্য উপরের শর্তগুলি পরীক্ষা করাই যথেষ্ট, যেহেতু 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

_ যাচাই করে যে প্রতিটি মেশলেস অপের একটি অ-খালি src সেট আছে।

এই পাসটি সমস্ত জালবিহীন অপারেশনকে যাচাই করে, পরীক্ষাটি কোথাও বরাদ্দ করা যেতে পারে। যেমন মেশলেস অপ্সের জন্য যেগুলি ফাংশন অপ্স নয়, এটি ত্রুটি হয় যখন একটি অপে src_set খালি থাকে বা যদি এটি একটি ক্রস-মেশ হ্রাস বলে অনুমান করা হয় তবে এটি রূপান্তরিত হয় না। এটি func পাতা নিয়োগের জন্য একটি পূর্বশর্ত.

Func ops-এর জন্য, func args-এর জন্য উপরের শর্তগুলি পরীক্ষা করাই যথেষ্ট, যেহেতু 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 op একটি নামযুক্ত গণনায় নেস্ট করা হয়।

যে কোনো নামকৃত_গণনা, নামে_টেন্সর, সম্প্রচার এবং কম অপ-কে ইনলাইন করে যা একটি নামে_সংখ্যাতে নেস্ট করা হয়, পরীক্ষা করে যে এর মেশ অ্যাসাইনমেন্ট (যখন সংজ্ঞায়িত করা হয়) পিতামাতার সাথে মেলে।

অপশন

-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

ব্যবহারকারী জাল অ্যাসাইনমেন্টের উপর ভিত্তি করে ডেটা স্থানান্তর তৈরি করে।

একটি পাস তৈরি করে যা ব্যবহারকারীর মেশ অ্যাসাইনমেন্টের উপর ভিত্তি করে স্থানান্তর ক্রিয়াকলাপ প্রবর্তন করে। এর মধ্যে রয়েছে:

  1. যদি UnassignOp-এর ফলাফল পরে কলিতে বরাদ্দ করা হয় তাহলে mpmd কলে UnassignOp-এ পুশ করুন।
  2. একটি UnassignOp এর AssignOp কে TransferOp দিয়ে প্রতিস্থাপন করে।
  3. গ্রাসকারী জালের সংযোজন বরাদ্দ করুন এবং যদি টুকরোগুলির মধ্যে একটি জালবিহীন সংযোজন থাকে তবে একটি স্থানান্তর প্রবর্তন করুন।

-mpmd-map-input-output-to-mesh

ফাংশন ইনপুট এবং আউটপুটে মেশ বরাদ্দ করে।

একটি পাস তৈরি করে যা একটি ব্যবহারকারী-সংজ্ঞায়িত জাল অ্যাসাইনমেন্ট দেওয়া মেশে ফাংশন ইনপুট/আউটপুট ম্যাপ করে।

ইনপুট আর্গুমেন্টের জন্য, এই পাস:

  1. ইনপুট টেনসরগুলিকে কাস্ট করে যা একটি জালের উপর একটি জাল টেনসরে রাখা উচিত৷
  2. ফাংশন স্বাক্ষর আপডেট করে।
  3. টেনসর ব্যবহার করার আগে 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

ব্যবহারকারীর সংজ্ঞায়িত ক্রিয়াকলাপের জন্য জাল বরাদ্দ করে।

একটি পাস তৈরি করে ঐচ্ছিকভাবে mpmd.named_tensor বরাদ্দ করে (অসাইনমেন্ট আনঅ্যাসাইন(%v)) (নির্ভর করে যদি assignment কোনো এন্ট্রি থাকে) এবং প্রতিটি নামে_গণনাকে একটি জালে ম্যাপ করার জন্য, name_computations এবং মেশ নামের মধ্যে ব্যবহারকারী-সংজ্ঞায়িত ম্যাপিং ব্যবহার করে। এর মানে হল প্রতিটি নামকৃত_গণনাকে একটি ফ্র্যাগমেন্ট দিয়ে প্রতিস্থাপন করা এবং অপারেন্ডের জন্য AssignOps তৈরি করা এবং এই খণ্ডগুলির ফলাফলের জন্য UnassignOps তৈরি করা। এখন প্রবর্তিত প্যাটার্ন অ্যাসাইন(আনসাইন(%v)) একটি ট্রান্সফার(%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 -> প্যাটার্ন arg -> return সাথে একটি নামযুক্ত গণনার মধ্যে arg -> stablehlo.optimization_barrier -> return , আরও সরলীকরণের অনুমতি দেয়।

-mpmd-validate-named-ops-in-mpmd-func

নামকরণকৃত অপস শুধুমাত্র mpmd ফাংশনে নেস্ট করা আছে।

যাচাই করে যে NamedComputationOp এবং NamedTensorOp শুধুমাত্র mpmd ফাংশনে নেস্ট করা হয়েছে, যেমন, একটি টপোলজি attr সহ ফাংশন।