-sdy-close-shardings
پارگی های تانسور را می بندد و محورهای تکراری را رها می کند.
-sdy-constant-merger
ثابت های یکسان را با تقسیم بندی های منطبق ادغام کنید.
یک CSE سبک وزن را روی ثابتها با شاردینگهای یکسان انجام میدهد.
خط لوله واردات، ثابتها را تقسیم میکند و تکرار میکند، به طوری که تقسیمبندی بین استفادههای مختلف یک محاسبه فرعی ثابت منتشر نمیشود. اگر ثابتها پس از انتشار، تقسیمبندیهای یکسانی داشته باشند، این پاس آنها را ادغام میکند تا در زمان کامپایل صرفهجویی شود.
-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
وارد می کند، به طوری که عملیات نقطه دارای تقسیم بندی های سازگار است.
-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-temp-explicit-reshards-for-optimizations
ریشاردهای صریح را برای بهینه سازی های خاص درج می کند.
این پاس یک راه حل موقت است تا زمانی که بتوانیم پاس sdy-insert-explicit-reshards
به طور پیش فرض فعال کنیم.
این به ما اجازه می دهد تا در عملیات های خاص برای بهینه سازی، ریشاردهای صریح وارد کنیم.
-sdy-update-non-divisible-input-output-shardings
ورودی/خروجی های FuncOp را به طور یکنواخت خرد می کند و نیاز به padding را به دلیل تقسیم نشدن تقسیم نمی کند.
کاربران Shardy انتظار دارند که ورودی/خروجی های تابع به طور مساوی قابل تقسیم/تجزیه باشند تا نیازی به لایه بندی تانسورهای خود نداشته باشند. انتشار ممکن است باعث شود ورودی/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این پاس آنها را به بزرگترین پیشوند تقسیمبندی بعدی از تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.
، -sdy-close-shardings
پارگی های تانسور را می بندد و محورهای تکراری را رها می کند.
-sdy-constant-merger
ثابت های یکسان را با تقسیم بندی های منطبق ادغام کنید.
یک CSE سبک وزن را روی ثابتها با شاردینگهای یکسان انجام میدهد.
خط لوله واردات، ثابتها را تقسیم میکند و تکرار میکند، به طوری که تقسیمبندی بین استفادههای مختلف یک محاسبه فرعی ثابت منتشر نمیشود. اگر ثابتها پس از انتشار، تقسیمبندیهای یکسانی داشته باشند، این پاس آنها را ادغام میکند تا در زمان کامپایل صرفهجویی شود.
-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
وارد می کند، به طوری که عملیات نقطه دارای تقسیم بندی های سازگار است.
-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-temp-explicit-reshards-for-optimizations
ریشاردهای صریح را برای بهینه سازی های خاص درج می کند.
این پاس یک راه حل موقت است تا زمانی که بتوانیم پاس sdy-insert-explicit-reshards
به طور پیش فرض فعال کنیم.
این به ما اجازه می دهد تا در عملیات های خاص برای بهینه سازی، ریشاردهای صریح وارد کنیم.
-sdy-update-non-divisible-input-output-shardings
ورودی/خروجی های FuncOp را به طور یکنواخت خرد می کند و نیاز به padding را به دلیل تقسیم نشدن تقسیم نمی کند.
کاربران Shardy انتظار دارند که ورودی/خروجی های تابع به طور مساوی قابل تقسیم/تجزیه باشند تا نیازی به لایه بندی تانسورهای خود نداشته باشند. انتشار ممکن است باعث شود ورودی/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این پاس آنها را به بزرگترین پیشوند تقسیمبندی بعدی از تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.
، -sdy-close-shardings
پارگی های تانسور را می بندد و محورهای تکراری را رها می کند.
-sdy-constant-merger
ثابت های یکسان را با تقسیم بندی های منطبق ادغام کنید.
یک CSE سبک وزن را روی ثابتها با شاردینگهای یکسان انجام میدهد.
خط لوله واردات، ثابتها را تقسیم میکند و تکرار میکند، به طوری که تقسیمبندی بین استفادههای مختلف یک محاسبه فرعی ثابت منتشر نمیشود. اگر ثابتها پس از انتشار، تقسیمبندیهای یکسانی داشته باشند، این پاس آنها را ادغام میکند تا در زمان کامپایل صرفهجویی شود.
-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
وارد می کند، به طوری که عملیات نقطه دارای تقسیم بندی های سازگار است.
-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-temp-explicit-reshards-for-optimizations
ریشاردهای صریح را برای بهینه سازی های خاص درج می کند.
این پاس یک راه حل موقت است تا زمانی که بتوانیم پاس sdy-insert-explicit-reshards
به طور پیش فرض فعال کنیم.
این به ما اجازه می دهد تا در عملیات های خاص برای بهینه سازی، ریشاردهای صریح وارد کنیم.
-sdy-update-non-divisible-input-output-shardings
ورودی/خروجی های FuncOp را به طور یکنواخت خرد می کند و نیاز به padding را به دلیل تقسیم نشدن تقسیم نمی کند.
کاربران Shardy انتظار دارند که ورودی/خروجی های تابع به طور مساوی قابل تقسیم/تجزیه باشند تا نیازی به لایه بندی تانسورهای خود نداشته باشند. انتشار ممکن است باعث شود ورودی/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این پاس آنها را به بزرگترین پیشوند تقسیمبندی بعدی از تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.
، -sdy-close-shardings
پارگی های تانسور را می بندد و محورهای تکراری را رها می کند.
-sdy-constant-merger
ثابت های یکسان را با تقسیم بندی های منطبق ادغام کنید.
یک CSE سبک وزن را روی ثابتها با شاردینگهای یکسان انجام میدهد.
خط لوله واردات، ثابتها را تقسیم میکند و تکرار میکند، به طوری که تقسیمبندی بین استفادههای مختلف یک محاسبه فرعی ثابت منتشر نمیشود. اگر ثابتها پس از انتشار، تقسیمبندیهای یکسانی داشته باشند، این پاس آنها را ادغام میکند تا در زمان کامپایل صرفهجویی شود.
-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
وارد می کند، به طوری که عملیات نقطه دارای تقسیم بندی های سازگار است.
-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-temp-explicit-reshards-for-optimizations
ریشاردهای صریح را برای بهینه سازی های خاص درج می کند.
این پاس یک راه حل موقت است تا زمانی که بتوانیم پاس sdy-insert-explicit-reshards
به طور پیش فرض فعال کنیم.
این به ما اجازه می دهد تا در عملیات های خاص برای بهینه سازی، ریشاردهای صریح وارد کنیم.
-sdy-update-non-divisible-input-output-shardings
ورودی/خروجی های FuncOp را به طور یکنواخت خرد می کند و نیاز به padding را به دلیل تقسیم نشدن تقسیم نمی کند.
کاربران Shardy انتظار دارند که ورودی/خروجی های تابع به طور مساوی قابل تقسیم/تجزیه باشند تا نیازی به لایه بندی تانسورهای خود نداشته باشند. انتشار ممکن است باعث شود ورودی/خروجیها دارای تقسیمبندیهای غیرقابل تقسیم باشند، بنابراین این پاس آنها را به بزرگترین پیشوند تقسیمبندی بعدی از تقسیمبندی اصلی که به طور مساوی تقسیمبندی شده است، بهروزرسانی میکند.