-sdy-close-shardings
پارگی های تانسور را می بندد و محورهای تکراری را رها می کند.
-sdy-constant-or-scalar-merger
ثابتهای یکسان و بسطهای اسکالر را با تقسیمبندیهای منطبق ادغام کنید.
یک CSE سبک وزن را روی ثابتها با شاردینگهای یکسان انجام میدهد.
خط لوله واردات، ثابتها و بسطهای اسکالر را تقسیم و تکرار میکند، به طوری که تقسیمبندی بین استفادههای مختلف یک محاسبه فرعی ثابت منتشر نمیشود. اگر ثابتها پس از انتشار، تقسیمبندیهای یکسانی داشته باشند، این پاس آنها را ادغام میکند تا در زمان کامپایل صرفهجویی شود. برای اطلاعات بیشتر به -sdy-constant-or-scalar-splitter مراجعه کنید.
-sdy-drop-sharding-rules
OpShardingRuleAttr
از همه عملیات های ثبت شده حذف می کند.
-sdy-insert-explicit-reshards
ریشاردهای صریح را درج می کند تا همه عملیات ها دارای ریزه کاری های سازگار باشند.
اشتراکگذاری سازگار اساساً به این معنی است که عملیات میتواند عملوندهای خرد شده را بپذیرد و یک نتیجه خرد شده را بدون نیاز به ارتباطات ریشارد تولید کند (توجه داشته باشید که این عملیات ممکن است همچنان به ارتباطاتی مانند کاهش همه جانبه یا تعویض هاله نیاز داشته باشد).
پس از انتشار، برخی از عملیات ها ممکن است همچنان دارای خرده های ناسازگار باشند.
توجه داشته باشید که وقتی از یک محور (یا محور فرعی) برای خرد کردن ابعاد غیر متناظر (مثلاً ابعاد غیر انقباضی در matmul) در چندین تانسور استفاده میشود، یا زمانی که یک محور یک بعد را در یک تانسور خرد میکند اما بعد متناظر را در تانسور دیگر نمیکند، گفته میشود که این عملیات دارای تعارض شاردینگ است. از این رو، پس از این پاس، عملیات بدون درگیری می شود.
این پاس به طور صریح عملیات ریشارد را تزریق میکند به طوری که برای هر عملیات، ابعاد مربوطه به یک شکل در همه عملوندها و نتایج تقسیم میشوند و هر محور (یا محور فرعی) فقط میتواند برای خرد کردن یک نوع بعدی استفاده شود.
مثال:
ورودی:
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" بر روی ابعاد غیر انقباضی شان خرد شده اند، که ناسازگار است. پاس، قبل از عمل نقطه، یک ریشارد صریح بر روی rhs
وارد می کند، به طوری که عملیات نقطه دارای تقسیم بندی های سازگار است.
گزینه ها
-enable-full-version : Enable full version.
-sdy-remove-all-gather-reduce-scatter-for-cmv1
_پراکندگی sdy.all_gather و sdy.reduce را برای CMV1 حذف می کند.
all-gather را در الگوی all-gather + dot حذف می کند. کاهش پراکندگی در الگوی نقطه + کاهش پراکندگی را حذف می کند. این پاس برای سازگاری با matmul جمعی V1 (CMV1) است. این یک راه حل موقت برای b/432019089 است.
-sdy-remove-propagation-debug-info
اطلاعات اشکال زدایی انتشار (لبه های انتشار و تکه تکه های مبدا) را در حین صادرات حذف می کند.
-sdy-remove-sharding-groups
ShardingGroupOps را پس از انتشار حذف می کند.
-sdy-reshard-to-collectives
ReshardOp را به عملیات های جمعی مختلف Shardy تبدیل می کند.
با عملیات های reshard مطابقت می دهد و آنها را در عملیات های جمعی مختلف Shardy بازنویسی می کند. پس از این پاس، هیچ عملیات ریشارد در ماژول باقی نمی ماند. این پاس فرض میکند که ریشاردهای واضح قبلاً درج شدهاند ( sdy-insert-explicit-reshards
).
مثال:
ورودی:
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
وجود دارد که آن را به عنوان تغییر شکل می دهد\[{"x"}, {}\]
. در محورهای اول، از آنجایی که پسوند {"y", "z"}
پس از reshard حذف شده است، استنباط می کنیم که {"y", "z"}
را جمع آوری کرده ایم. بعد دوم تغییر نکرده است.
-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 را به طور یکنواخت خرد می کند و نیاز به padding را به دلیل تقسیم نشدن تقسیم نمی کند.
کاربران Shardy انتظار دارند که ورودی/خروجی های تابع به طور مساوی قابل تقسیم/تجزیه باشند تا نیازی به لایه بندی تانسورهای خود نداشته باشند. انتشار ممکن است باعث شود ورودی/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این پاس آنها را به بزرگترین پیشوند تقسیمبندی بعدی از تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.