-sdy-close-shardings
پارگی های تانسور را می بندد و محورهای تکراری را رها می کند.
-sdy-drop-sharding-rules
OpShardingRuleAttr
از همه عملیات های ثبت شده حذف می کند.
-sdy-insert-explicit-reshards
ریشاردهای صریح را درج می کند تا همه عملیات ها دارای ریزه کاری های سازگار باشند.
اشتراکگذاری سازگار اساساً به این معنی است که عملیات میتواند عملوندهای خرد شده را بپذیرد و یک نتیجه خرد شده را بدون نیاز به ارتباطات ریشارد تولید کند (توجه داشته باشید که این عملیات ممکن است همچنان به ارتباطاتی مانند کاهش همه جانبه یا تعویض هاله نیاز داشته باشد).
پس از انتشار، برخی از عملیات ها ممکن است همچنان دارای خرده های ناسازگار باشند.
لطفاً توجه داشته باشید، زمانی که یک محور (یا محور فرعی) برای خرد کردن ابعاد غیر متناظر (مثلاً ابعاد غیر انقباضی در matmul) در چندین تانسور استفاده میشود، یا زمانی که یک محور یک بعد را در یک تانسور خرد میکند اما بعد مربوطه را در تانسور نمیکند. تانسور دیگر، گفته می شود که عملیات دارای یک درگیری شاردینگ است. از این رو، پس از این پاس، عملیات بدون درگیری می شود.
این پاس به طور صریح عملیات ریشارد را تزریق میکند به طوری که برای هر عملیات، ابعاد مربوطه به یک شکل در همه عملوندها و نتایج تقسیم میشوند و هر محور (یا محور فرعی) فقط میتواند برای خرد کردن یک نوع بعدی استفاده شود.
یک مثال روشنگر:
ورودی:
mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"y"},{"x"}\]>}
%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
، قبل از عمل نقطه، به صراحت فقط در بعد اول و در محور "x" خرد می شود. به این ترتیب عمل نقطه سازگار می شود.
-sdy-remove-sharding-groups
ShardingGroupOps را پس از انتشار حذف می کند.
-sdy-sharding-constraint-to-reshard
ShardingConstraintOp را به ReshardOp تبدیل می کند.
-sdy-sink-data-flow-edges
تمام DataFlowEdgeOp
را در ورودی آنها غرق می کند.
اشتراک گذاری هر DataFlowEdgeOp
را به ورودی خود (هدف ریشه لبه) منتقل می کند و op را با ورودی خود جایگزین می کند.
TODO(tomnatan): در نظر بگیرید که شاردینگ را به همه اهدافی که میتوانند به اشتراک گذاری متصل باشند منتقل کنید.
-sdy-update-non-divisible-input-output-shardings
ورودی/خروجی های FuncOp را به طور یکنواخت خرد می کند و نیاز به padding را به دلیل تقسیم نشدن تقسیم نمی کند.
کاربران Shardy انتظار دارند که ورودی/خروجی های تابع به طور مساوی قابل تقسیم/تجزیه باشند تا نیازی به لایه بندی تانسورهای خود نداشته باشند. انتشار ممکن است باعث شود ورودی/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این پاس آنها را به بزرگترین پیشوند تقسیمبندی بعدی از تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.