-sdy-add-data-flow-edges
DataFlowEdgeOp
را برای هر لبه جریان داده درج می کند.
DataFlowEdgeOp
برای هر مقداری که صاحب لبه جریان داده است، درج می کند، به عنوان مثال، تمام مقادیری که توسط getDataFlowEdgeOwners
در هر عملیات در ماژول برگردانده می شود.
DataFlowEdgeOp
درج شده، اشتراک گذاری موجود از هدف مالک را در صورت وجود می گیرد.
-sdy-apply-sharding-constraints
محدودیت هایی را اعمال می کند که به اشتراک گذاری ورودی آنها را دیکته می کند.
در صورتی که شاردینگ یک ShardingConstraintOp
تمام موارد زیر را برآورده کند، در ورودی آن کپی می کند:
- ورودی اشتراک گذاری موجود ندارد.
- شاردینگ
ShardingConstraintOp
کاملاً بسته است. - ورودی هیچ کاربر دیگری از نوع
ShardingConstraintOp
یاManualComputationOp
با تقسیم بندی متفاوت ندارد.
این شرایط نشان می دهد که ShardingConstraintOp
به اشتراک گذاری ورودی خود را دیکته می کند.
اگر ورودی هدف یک لبه جریان داده باشد، به جای تنظیم اشتراک گذاری عملیات، همه استفاده های input
را با ShardingConstraintOp
جایگزین می کنیم تا از محدود کردن اشتراک گذاری همه اهداف لبه جلوگیری کنیم.
توجه داشته باشید که تقسیم بندی یک ShardingConstraintOp
در حین انتشار بدون توجه به این پاس به ورودی یا کاربران آن منتشر می شود، اما از آنجایی که ویژگی بسته یک بعد منتشر نمی شود، مهم است که برای رعایت کامل محدودیت در موارد بالا، تقسیم بندی را کپی کنید.
علاوه بر این، اگر یک تانسور توسط زنجیرهای از ShardingConstraintOp
استفاده شود که تمام موارد زیر را برآورده کند:
- تانسور توسط
ShardingConstraintOp
تولید نمی شود و هیچ کاربر دیگری از نوعShardingConstraintOp
یاManualComputationOp
ندارد. - هیچ یک از
ShardingConstraintOp
در زنجیره بیش از یک مورد استفاده ندارند به جز آخرین مورد. - آخرین
ShardingConstraintOp
در زنجیره هیچ کاربری از نوعShardingConstraintOp
یاManualComputationOp
ندارد (در غیر این صورت آخرین مورد در زنجیره نیست).
سپس این پاس جایگزین تمام استفاده های دیگر از ورودی زنجیره می شود، که:
- آیا یک عملیات
func.return
نیست. - بعد از آخرین
ShardingConstraintOp
در زنجیره (و در همان بلوک) تعریف می شوند.
با نتیجه زنجیره، همانطور که باید تقسیم آن استفاده ها را دیکته کند.
-sdy-constant-or-scalar-splitter
انبساط های ثابت و اسکالر را تقسیم می کند تا هر کدام یک کاربرد واحد داشته باشند.
محاسبات فرعی ثابت و بسط های اسکالر را به گونه ای تقسیم می کند که یک کاربر واحد داشته باشند.
این تضمین میکند که یک تقسیمبندی بین استفادههای مختلف یک محاسبه فرعی ثابت منتشر نمیشود، زیرا این یک وابستگی کاذب در نظر گرفته میشود (استفادههای یک ثابت نباید به یک شکل تقسیم شوند، فقط به این دلیل که از یک ثابت استفاده میکنند). در واقع، هر استفاده میتواند یک تقسیمبندی متفاوت داشته باشد که میتواند به صورت مجزا در کپی خودش از محاسبات فرعی ثابت منتشر شود.
یک محاسبه فرعی ثابت یا به صورت زیر است:
- یک عملیات ثابت یا iota (بدون عملوند)
- یک عملیات پخش، تغییر شکل، برش یا خالص عنصر، که عملوندهای آن همگی با محاسبات فرعی ثابت (به صورت بازگشتی)، همراه با کل محاسبات فرعی که عملوندهای آن را تعریف می کنند، تعریف می شوند.
بسط اسکالر پخش یک اسکالر است.
توجه داشته باشید که در یک محاسبات فرعی ثابت، یک مقدار میتواند کاربردهای متعددی در آن محاسبه فرعی داشته باشد.
همچنین توجه داشته باشید که این پاس تانسورهای اسکالر را تقسیم نمی کند زیرا آنها خرد نمی شوند (آنها دارای رتبه 0 هستند).
-sdy-inline-meshes
MeshAttr
s را به TensorShardingAttr
s وارد می کند.
نام نمادهای مش را در TensorShardingAttr
با MeshAttr
های خطی جایگزین می کند و همه MeshOp
های استفاده نشده را حذف می کند.
-sdy-lift-inlined-meshes
MeshAttr
s را به صورت خرد شده به عنوان نماد MeshOp
s بلند می کند.
هر MeshAttr
خطی را در TensorShardingAttr
با نام نماد مش جایگزین میکند و به MeshOp
موجود یا جدید در ماژول ارجاع میدهد، به طوری که هیچ دو MeshOp
دارای MeshAttr
یکسان نیستند ( MeshOp
های موجود نیز حذف میشوند).
نام هر MeshOp
جدید به صورت زیر خواهد بود:
-
maximal_mesh_{device-id}
، برای یک مش حداکثر (یعنی لیست محور خالی و یک شناسه دستگاه واحد)، یا - اولین نام موجود در [
mesh
,mesh_0
,mesh_1
, ...].
-sdy-manual-axes-cleanup
استفاده از محورهای دستی را در ManualComputationOp
پاک می کند
- برای هر اشتراک گذاری درون/خروجی که محور دستی مشخص نکرده است، آن محور دستی را به محورهای replicate_ش اضافه کنید. این برای اطمینان از اینکه محورهای دستی همیشه به طور کامل مشخص می شوند است.
- محورهای دستی را به ترتیب اعلام محورهای مش مرتب می کند.
علاوه بر این، اگر یک محاسبات دستی ورودی یا خروجی نداشته باشد و بدنه ای خالی نداشته باشد، این گذر از کار خواهد افتاد.
-sdy-remove-size-one-axes
محورهای سایز یک را از خرده ها حذف می کند.
محورهای اندازه یک را از همه خردهکاریها و عملیات محاسباتی دستی حذف میکند تا از تضاد در حین انتشار که ناشی از چنین محورهایی است جلوگیری شود. توجه داشته باشید که محورها در مش ها برداشته نمی شوند.
-sdy-sharding-group-import
مجوز قانونی سازی و اعتبارسنجی برای گروه های اشتراک گذاری.
متعارف سازی و اعتبارسنجی را برای گروه های اشتراک گذاری پس از وارد کردن اعمال می کند. یعنی اینها عبارتند از:
یکپارچه سازی گروه شاردینگ
گروه های اشتراک گذاری را با استفاده از ویژگی گذرای عضویت در گروه ترکیب می کند. هر زمان که یک تانسور T در یک گروه تقسیمبندی G1 و گروه اشتراکگذاری G2 باشد، میتوانیم استنباط کنیم که همه اعضای G1 و G2 باید به یک شکل خرد شوند. بنابراین می توانیم G1 و G2 را در یک گروه واحد ترکیب کنیم. مجموعه شناسه های گروه متعارف پس از ادغام 0،1،...N-1 برای حداقل مجموعه گروه ها خواهد بود.
اعتبار سنجی گروه شاردینگ
تأیید می کند که گروه های اشتراک گذاری به خوبی شکل گرفته اند و با مفروضات موجود در پیاده سازی مطابقت دارند. این در حال حاضر ادعا می کند که اگر یک گروه اشتراک گذاری حاوی
Value
باشد که در داخل بلوک یکManualComputationOp
تعریف شده است، آنگاه همه مقادیر دیگر در آن گروه باید در همان بلوک قرار گیرند.