-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در زنجیره (و در همان بلوک) تعریف می شوند.
با نتیجه زنجیره، همانطور که باید تقسیم آن استفاده ها را دیکته کند.
گزینه ها
-debug-sharding-origins : Whether to compute the debug origin shardings for constraints. See `debug-sharding-origins` option in propagation for more info.
-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-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تعریف شده است، آنگاه همه مقادیر دیگر در آن گروه باید در همان بلوک قرار گیرند.