-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 به هر محاسبات استفاده نشده، خروجی تابع و ورودی تابع یک مش اختصاص می دهد.
این پاس با ایجاد AssignOps یا تغییر نوع، با استفاده از اطلاعات use_set و src_set، مش ها را به برگه های بدنه تابع (یعنی نتایج محاسبات استفاده نشده، آرگومان های تابع استفاده نشده و خروجی های تابع) اختصاص می دهد.
ما همچنین مقادیر میانی خاصی را برای تجزیه و تحلیل به عنوان برگ در نظر می گیریم. یعنی: عملوندهای mpmd.reduce و mpmd.broadcast به عنوان برگ در نظر گرفته می شوند و یک جفت assign-unassign بر روی آنها ایجاد می شود.
این انتساب use_set را از تمام عملیاتهای غیر برگ پاک میکند، زیرا استفادههای شرحدادهشده قبلی کهنه میشوند، زیرا استنتاج کاهش عملیات، use_set برخی از مقادیر را تغییر میدهد: انتشار use_set اولیه از کاهش ops بیاطلاع است، اما اکنون که ما کاهش ops را استنباط کردیم، انتشار متفاوت خواهد بود.
اگر مجموعههای use- و 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یک MeshTensorType یا یک مجموعه استفاده کاملاً تعریف شده دارد. - برای هر خروجی
oاز تابع نقطه ورودی که ممکن است بخشی از یک محدودیت تخصیص معادل باشد:oدارای نوع MeshTensorType، OR 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
گزینه ها
-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
_src_set را برای UnassignOps و func args اولیه می کند و مجموعه src را منتشر می کند.
این پاس src_set را مقداردهی اولیه می کند و آن را منتشر می کند و نمودار را با اطلاعات src_set پر می کند.
پیش شرط: برای اینکه func args دارای src_sets باشد، use_set باید پر شود.
مقداردهی اولیه: src_set یک UnassignOp به مشی که به آن اختصاص می دهد تنظیم می شود. src_set یک func arg روی use_set آن تنظیم شده است.
انتشار: src_sets از عملوندها به خود op منتشر می شود و محل تقاطع عملوندها را می گیرد. برای جزئیات بیشتر به PropagateSrcSet مراجعه کنید.
-mpmd-infer-mesh-populate-use-set
_use_set را برای AssignOps راه اندازی می کند و مجموعه use را منتشر می کند.
این پاس، use_set را مقداردهی اولیه می کند و آن را به عقب منتشر می کند، و نمودار را با اطلاعات use_set پر می کند.
Initialization: use_set یک AssignOp به مشی که به آن اختصاص می دهد تنظیم می شود.
انتشار: use_sets به عقب از کاربران به خود op منتشر می شود و اتحادیه کاربران را می گیرد. Use_set یک op طبق تعریف، ترکیبی از use_set های کاربران آن است، زیرا 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
تایید می کند که هیچ انتقال اضافی برای انتساب مش مورد نیاز نیست.
این پاس تأیید می کند که تخصیص مش برای همه عملیات های بدون مش بدون ارائه هیچ گونه انتقال اضافی امکان پذیر است.
برای عملیاتهای بدون مش که عملیاتهای کاربردی نیستند، زمانی که:
- 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 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 در معرض کاربر را که در یک محاسبات نامگذاری شده تودرتو شده است، درج میکند.
هر named_computation، named_tensor، پخش و کاهش عملیاتی که در یک named_computation تودرتو است را وارد میکند و بررسی میکند که تخصیص مش آن (هنگامی که تعریف شده است) مطابق با والد باشد.
گزینه ها
-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
عملیات ناچیز را خارج از محاسبات نامگذاری شده کلون می کند.
عملیات ناچیز، به عنوان مثال، منفرد نتیجه، عملیات عملوند صفر، محاسبات خارج از نام را هر زمان که توسط عملیات بازگشتی محاسبات استفاده می شود، کلون می کند، و نتیجه named_computation را با کلون جایگزین می کند. این مورد نیاز است زیرا اگر چنین نتایجی توسط محاسبات نامگذاری شده اختصاص داده شده به مش های مختلف استفاده شود، می تواند باعث تضاد استنتاج مش شود. با اعمال این پاس، به استنتاج مش اجازه می دهیم تا این عملیات ناچیز را شبیه سازی کند.
این پاس اصلاً محاسبات نامگذاری شده را تغییر نمیدهد.
-mpmd-introduce-transfers
انتقال داده ها را بر اساس تکالیف مش کاربر ایجاد می کند.
پاسی ایجاد می کند که عملیات انتقال را بر اساس تخصیص مش کاربر معرفی می کند. این شامل:
- اگر نتیجه UnassignOp بعداً در تماس گیرنده تخصیص داده شد، UnassignOp را برای تماس های mpmd فشار دهید.
- AssignOp یک UnassignOp را با یک 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
مش ها را به عملیات تعریف شده توسط کاربر اختصاص می دهد.
گذرنامه ای ایجاد می کند که mpmd.named_tensor را به صورت اختیاری به Assign(Unassign(%v)) اختصاص می دهد (بستگی دارد که ورودی در assignment وجود داشته باشد)، و برای نگاشت هر named_computation به یک مش، با استفاده از نگاشت تعریف شده توسط کاربر بین named_computations و نام های مش. این به معنای جایگزینی هر named_computation با یک Fragment و ایجاد AssignOps برای عملوندها و UnassignOps برای نتایج این Fragment ها است. الگوی معرفی شده Assign(Unassign(%v)) در Transfer(%v) بازنویسی می شود. پس از این پاس هیچ عملیات named_computation/named_tensor وجود نخواهد داشت.
نیاز به: همه محاسبات_named و named_tensors برای زندگی در سطح بالای تابع.
گزینه ها
-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
ورودی ها و خروجی های عملیات محاسباتی نامگذاری شده را ساده می کند.
هر محاسبات نامگذاری شده را به طور مستقل ساده می کند. به طور خاص، آن:
- نتایج و مقادیر بازگشتی مربوط به آنها را کپی می کند.
- عملوندها و آرگومان های بلوک مربوط به آنها را حذف می کند.
- نتایجی را حذف می کند که عملوند بازگشتی متناظر آنها آرگومان بلوکی op است.
- عملوندهایی را حذف می کند که آرگومان بلوک متناظر آنها کاربرد بیشتری ندارد (یا برای شروع هیچ استفاده ای نداشتند). و
- نتایجی را که استفاده نشده اند حذف می کند.
- الگوی
arg -> stablehlo.optimization_barrier -> returnدر یک محاسبه نامگذاری شده با الگویarg -> returnجایگزین میکند، که امکان سادهسازی بیشتر را فراهم میکند.
-mpmd-validate-named-ops-in-mpmd-func
تأیید می کند که عملیات نامگذاری شده فقط در توابع mpmd تودرتو هستند.
تأیید می کند که NamedComputationOp و NamedTensorOp فقط در توابع mpmd، یعنی توابعی با attr توپولوژی تودرتو هستند.