-sdy-close-shardings
تکههای تانسور را میبندد و محورهای تکثیر شده را حذف میکند.
-sdy-constant-or-scalar-merger
ثابتها و بسطهای اسکالر یکسان را با تکههای منطبق ادغام کنید.
یک CSE سبک وزن را روی ثابتهایی با شاردینگهای یکسان انجام میدهد.
خط لوله واردات، ثابتها و بسطهای اسکالر را تقسیم و کپی میکند، به طوری که تقسیمبندی بین کاربردهای مختلف یک زیرمحاسبات ثابت منتشر نشود. اگر ثابتها پس از انتشار، تقسیمبندیهای یکسانی داشته باشند، این مرحله آنها را ادغام میکند تا در زمان کامپایل صرفهجویی شود. برای اطلاعات بیشتر به -sdy-constant-or-scalar-splitter مراجعه کنید.
-sdy-convert-global-to-local
یک برنامه SDY را از اشکال سراسری به اشکال محلی تبدیل میکند.
با تقسیمبندی ابعاد منطقی بر اساس ویژگیهای شاردینگ، یک برنامه SDY را از اشکال سراسری به اشکال محلی تبدیل میکند.
این گذر از یک مبدل نوع برای نگاشت RankedTensorType از اشکال منطقی سراسری به اشکال فیزیکی محلی دستگاه استفاده میکند.
گزینهها
-per-dim-all-gather : Keep per-dimension all-gather without combining them into a single all-gather.
-combine-multi-dimension-reduce-scatter : Combine multi-dimension reduce-scatter into a single reduce-scatter.
-enable-rgv3 : Use StableHLO ReplicaGroupV3 (mesh-axes based) for collectives.
-sdy-drop-sharding-and-mesh
علامتهای عملیات مش و شاردینگ را از برنامه حذف میکند.
-sdy-drop-sharding-rules
OpShardingRuleAttr از تمام عملیاتهای ثبتشده حذف میکند.
-sdy-export-named-computations
فراخوانیهای Outline از NamedComputationOp .
یک گذرگاه ایجاد میکند که یک NamedComputationOp به یک CallOp با یک تابع خصوصی جدید به name NamedComputationOp تبدیل میکند. FuncOp و CallOp جدید دارای همان شاردینگهای عملوندها/نتایج NamedComputationOp اصلی هستند.
اگر تابعی با نام مشابه NamedComputationOp در ماژول وجود داشته باشد، جدول نمادهای MLIR آن را به {name}_# تغییر میدهد.
-sdy-insert-explicit-reshards
برای اینکه همه عملیاتها دارای شاردینگهای سازگار باشند، reshardهای صریحی درج میکند.
یک شاردینگ سازگار اساساً به این معنی است که عملیات میتواند عملوندهای شارد شده را بپذیرد و بدون نیاز به هیچگونه ارتباط شارد مجدد، نتیجه شارد شدهای تولید کند (توجه داشته باشید که این عملیات ممکن است همچنان به ارتباطی مانند all-reduce یا halo-swap نیاز داشته باشد).
پس از انتشار، برخی از عملیات ممکن است هنوز دارای شاردینگهای ناسازگار باشند.
توجه داشته باشید که وقتی از یک محور (یا زیرمحور) برای خرد کردن ابعاد غیر متناظر (مثلاً ابعاد غیر انقباضی در متمول) در چندین تانسور استفاده میشود، یا وقتی یک محور، بُعدی را در یک تانسور خرد میکند اما بُعد متناظر در تانسور دیگر را خرد نمیکند، گفته میشود که این عملیات دارای تداخل خرد کردن است. از این رو، پس از این مرحله، عملیات بدون تداخل میشوند.
این مرحله عملیات reshard را به صراحت تزریق میکند، به طوری که برای هر عملیات، ابعاد مربوطه به طور یکسان در تمام عملوندها و نتایج خرد میشوند و هر محور (یا زیر محور) فقط میتواند برای خرد کردن یک نوع بعد واحد استفاده شود.
مثال:
ورودی:
mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
: (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>
خروجی:
sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
: (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>
در مثال بالا، lhs و rhs هر دو روی محور "x" در ابعاد غیر انقباضی خود خرد شدهاند، که ناسازگار است. این مرحله قبل از عملیات نقطه، یک reshard صریح روی rhs وارد میکند، به طوری که عملیات نقطه دارای خردهای سازگار است.
گزینهها
-enable-full-version : Enable full version.
-sdy-insert-func-call-reshards
برای تداخلهای مربوط به تابع و فراخوانی شاردینگ، reshardها را درج میکند.
reshardها را برای func درج میکند و تداخلات sharding فراخوانی را روی نتایج ایجاد میکند.
-sdy-pad-for-divisibility
تانسورهای پد با خرده ریزهای غیرقابل تقسیم به اشکال قابل تقسیم.
-sdy-propagate-to-func-results
انتشار خرده ریزها از خاتمه دهنده func به نتایج func.
تکههای مقادیر خاتمهدهنده تابع func را به نتایج متناظر func.func کپی میکند، به جز تابع اصلی.
-sdy-remove-all-gather-reduce-scatter-for-cmv1
_ پراکندگی sdy.all_gather و sdy.reduce را برای CMV1 حذف میکند.
حذف all-gather در الگوی all-gather + dot. حذف reduce-scatter در الگوی dot + reduce-scatter. این گذر برای سازگاری با matmul جمعی V1 (CMV1) است. این یک راه حل موقت برای b/432019089 است.
-sdy-remove-propagation-debug-info
اطلاعات اشکالزدایی انتشار (لبههای انتشار و خردههای مبدا) را در حین صادرات حذف میکند.
-sdy-remove-sharding-groups
ShardingGroupOps را پس از انتشار حذف میکند.
-sdy-remove-sub-axes-in-input-output-shardings
زیرمحورها را در شاردینگهای ورودی/خروجی حذف میکند.
برخی از کاربران Shardy انتظار دارند که ورودیها/خروجیهای تابع، دارای تکههای بدون زیرمحور باشند. این مسیر، زیرمحورها و محورهای دنبالکنندهی آنها را از تکههای با بعد باز ورودی/خروجی حذف میکند. این مسیر معمولاً بعد از sdy-update-non-divisible-input-output-shardings است تا اطمینان حاصل شود که حذف زیرمحورها هیچ تکهی غیرقابل تقسیمی ایجاد نمیکند.
-sdy-reshard-to-collectives
ReshardOp را به عملیاتهای جمعی مختلف Shardy تبدیل میکند.
عملیاتهای reshard را تطبیق میدهد و آنها را در عملیاتهای جمعی مختلف Shardy بازنویسی میکند. پس از این مرحله، هیچ عملیات reshard در ماژول باقی نمیماند.
در صورت تمایل، اگر keepRedundantReshards برابر با true باشد، تنها عملیات reshard که باقی میمانند، عملیاتهای اضافی هستند. به طور پیشفرض، فرض بر این است که reshardهای صریح قبلاً درج شدهاند ( sdy-insert-explicit-reshards ) و reshardهای اضافی را نگه نمیدارد. اگر reshardهای صریح قبلاً درج نشده باشند، باید reshardهای اضافی را نگه دارد.
مثال:
ورودی:
mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>
خروجی:
mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>
در مثال بالا، تانسور %0 : tensor<16x2xf32> به صورت زیر خرد شده است:\[{"x", "y", "z"}, {}\] سپس، یک عملیات reshard وجود دارد که آن را به صورت reshard میکند.\[{"x"}, {}\] در محورهای اول، از آنجایی که پسوند {"y", "z"} بعد از reshard حذف شده است، استنباط میکنیم که {"y", "z"} را به صورت کامل جمعآوری کردهایم. بُعد دوم تغییر نمیکند.
گزینهها
-keep-redundant-reshards : Whether it keeps redundant reshards or removes.
-sdy-resolve-permutation-factors
مشکل شاردینگ (sharding) روی ابعاد نگاشت شده به فاکتورهای kPermutation را حل میکند.
ابعاد خرد شده با فاکتورهای kPermutation ممکن است نیاز به ارتباط بین دستگاهی داشته باشد (مثلاً تبادل هاله برای پنجرهها یا جایگشتهای جمعی برای معکوسها).
اگر enableHaloExchange درست باشد، این مسیر از یک منطق ارتباطی بهینه موجود برای حل فاکتورهای جایگشت استفاده میکند. در غیر این صورت، این مسیر به سادگی عملیات sdy.reshard را برای تکرار آن ابعاد وارد میکند. پیشفرض enableHaloExchange درست است.
گزینهها
-enable-halo-exchange : Implement halo exchange logic for windowed operations.
-sdy-sharding-constraint-to-reshard
ShardingConstraintOp را به ReshardOp تبدیل میکند.
-sdy-sink-data-flow-edges
تمام DataFlowEdgeOp را در ورودی خود قرار میدهد.
شاردینگ هر DataFlowEdgeOp را به ورودی آن (هدف ریشهای لبه) منتقل میکند و op را با ورودی آن جایگزین میکند.
گزینهها
-sink-debug-sharding-origins : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.
-sdy-sink-func-data-flow-edges
تمام FuncDataFlowEdgeOp را در ورودی خود قرار میدهد.
شاردینگ هر FuncDataFlowEdgeOp را به ورودی آن منتقل میکند و op را با ورودی آن جایگزین میکند.
-sdy-unflatten-call-graph
نمودار تماس را مسطح نمیکند.
نمودار را مسطح نمیکند. توابعی را که دارای شاردینگهای ورودی/خروجی یکسان و منشأ یکسان هستند و با ویژگی 'original_func_name' متصل به توابع توصیف شدهاند، از دادههای تکراری پاک میکند.
گزینهها
-dedup-functions-fully : If true, regardless of the input and output shardings of functions, it keeps one callee function for each caller function. The default is false, meaning it will deduplicate only if the input and output shardings are the same.
-sdy-update-non-divisible-input-output-shardings
ورودیها/خروجیهای FuncOp را به طور مساوی خرد میکند و هرگونه نیاز به لایهگذاری به دلیل خرد شدنهای غیرقابل تقسیم را از بین میبرد.
کاربران Shardy انتظار دارند ورودیها/خروجیهای تابع به طور مساوی قابل تقسیم/قابل تقسیم باشند تا از نیاز به پر کردن تانسورهایشان جلوگیری شود. انتشار ممکن است باعث شود ورودیها/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این مرحله آنها را به بزرگترین پیشوند تقسیمبندی ابعادی تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.
-sdy-verify-unreduced-axes
ثبات استفاده از محور بدون کاهش را تأیید میکند.
تأیید میکند که برای هر عملیات، اگر عملوندهای آن محورهای کاهش نیافته داشته باشند، عملیات یا صریحاً آنها را کاهش میدهد (مثلاً از طریق sdy.reshard ) یا آنها را به نتایج خود منتقل میکند (یا یک عملیات محدودکننده مانند func.call است).