-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 پاک می کند

  1. برای هر اشتراک گذاری درون/خروجی که محور دستی مشخص نکرده است، آن محور دستی را به محورهای replicate_ش اضافه کنید. این برای اطمینان از اینکه محورهای دستی همیشه به طور کامل مشخص می شوند است.
  2. محورهای دستی را به ترتیب اعلام محورهای مش مرتب می کند.

علاوه بر این، اگر یک محاسبات دستی ورودی یا خروجی نداشته باشد و بدنه ای خالی نداشته باشد، این گذر از کار خواهد افتاد.

-sdy-remove-size-one-axes

محورهای سایز یک را از خرده ها حذف می کند.

محورهای اندازه یک را از همه خرده‌کاری‌ها و عملیات محاسباتی دستی حذف می‌کند تا از تضاد در حین انتشار که ناشی از چنین محورهایی است جلوگیری شود. توجه داشته باشید که محورها در مش ها برداشته نمی شوند.

-sdy-sharding-group-import

مجوز قانونی سازی و اعتبارسنجی برای گروه های اشتراک گذاری.

متعارف سازی و اعتبارسنجی را برای گروه های اشتراک گذاری پس از وارد کردن اعمال می کند. یعنی اینها عبارتند از:

  1. یکپارچه سازی گروه شاردینگ

    گروه های اشتراک گذاری را با استفاده از ویژگی گذرای عضویت در گروه ترکیب می کند. هر زمان که یک تانسور T در یک گروه تقسیم‌بندی G1 و گروه اشتراک‌گذاری G2 باشد، می‌توانیم استنباط کنیم که همه اعضای G1 و G2 باید به یک شکل خرد شوند. بنابراین می توانیم G1 و G2 را در یک گروه واحد ترکیب کنیم. مجموعه شناسه های گروه متعارف پس از ادغام 0،1،...N-1 برای حداقل مجموعه گروه ها خواهد بود.

  2. اعتبار سنجی گروه شاردینگ

    تأیید می کند که گروه های اشتراک گذاری به خوبی شکل گرفته اند و با مفروضات موجود در پیاده سازی مطابقت دارند. این در حال حاضر ادعا می کند که اگر یک گروه اشتراک گذاری حاوی Value باشد که در داخل بلوک یک ManualComputationOp تعریف شده است، آنگاه همه مقادیر دیگر در آن گروه باید در همان بلوک قرار گیرند.