-sdy-close-shardings
تکههای تانسور را میبندد و محورهای تکثیر شده را حذف میکند.
-sdy-constant-or-scalar-merger
ثابتها و بسطهای اسکالر یکسان را با تکههای منطبق ادغام کنید.
یک CSE سبک وزن را روی ثابتهایی با شاردینگهای یکسان انجام میدهد.
خط لوله واردات، ثابتها و بسطهای اسکالر را تقسیم و کپی میکند، به طوری که تقسیمبندی بین کاربردهای مختلف یک زیرمحاسبات ثابت منتشر نشود. اگر ثابتها پس از انتشار، تقسیمبندیهای یکسانی داشته باشند، این مرحله آنها را ادغام میکند تا در زمان کامپایل صرفهجویی شود. برای اطلاعات بیشتر به -sdy-constant-or-scalar-splitter مراجعه کنید.
-sdy-convert-global-to-local
یک برنامه SDY را از اشکال سراسری به اشکال محلی تبدیل میکند.
با تقسیمبندی ابعاد منطقی بر اساس ویژگیهای شاردینگ، یک برنامه SDY را از اشکال سراسری به اشکال محلی تبدیل میکند.
این گذر از یک مبدل نوع برای نگاشت RankedTensorType از اشکال منطقی سراسری به اشکال فیزیکی محلی دستگاه استفاده میکند.
-sdy-drop-sharding-rules
OpShardingRuleAttr از تمام عملیاتهای ثبتشده حذف میکند.
-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.
-avoid-reshards-on-named-computations : Avoid explicit reshards/collectives on named computations.
-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-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-update-non-divisible-input-output-shardings
ورودیها/خروجیهای FuncOp را به طور مساوی خرد میکند و هرگونه نیاز به لایهگذاری به دلیل خرد شدنهای غیرقابل تقسیم را از بین میبرد.
کاربران Shardy انتظار دارند ورودیها/خروجیهای تابع به طور مساوی قابل تقسیم/قابل تقسیم باشند تا از نیاز به پر کردن تانسورهایشان جلوگیری شود. انتشار ممکن است باعث شود ورودیها/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این مرحله آنها را به بزرگترین پیشوند تقسیمبندی ابعادی تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.