-sdy-add-data-flow-edges
برای هر لبه جریان داده، DataFlowEdgeOp را درج میکند.
برای هر مقداری که مالک یک لبه جریان داده است، DataFlowEdgeOp را درج میکند، یعنی تمام مقادیری که توسط getBlockArgumentEdgeOwners و getOpResultEdgeOwners در هر ShardableDataFlowOpInterface در ماژول بازگردانده میشوند.
DataFlowEdgeOp درج شده، در صورت وجود، شاردینگ موجود از هدف مالک را دریافت میکند.
-sdy-add-func-data-flow-edges
برای هر تابع/فراخوانی لبه جریان داده، FuncDataFlowEdgeOp را درج میکند.
برای هر آرگومان تابع و نتیجه فراخوانی، FuncDataFlowEdgeOp را درج میکند.
-sdy-apply-sharding-constraints
محدودیتهایی را اعمال میکند که تقسیمبندی ورودی آنها را تعیین میکند.
اگر همه موارد زیر را برآورده کند، شاردینگ یک ShardingConstraintOp را در ورودی خود کپی میکند:
- ورودی فاقد شاردینگ (sharding) موجود است.
- شاردینگ
ShardingConstraintOpکاملاً بسته شده است. - ورودی هیچ کاربر دیگری از نوع
ShardingConstraintOpیاManualComputationOpبا شاردینگ متفاوت ندارد.
این شرایط نشان میدهد که ShardingConstraintOp تقسیمبندی ورودی خود را دیکته میکند.
اگر ورودی، هدف یک لبه جریان داده باشد، به جای تنظیم شاردینگِ عملیات، تمام کاربردهای input را با ShardingConstraintOp جایگزین میکنیم تا از محدود کردن شاردینگِ تمام اهداف لبه جلوگیری شود.
توجه داشته باشید که شاردینگ یک ShardingConstraintOp صرف نظر از این گذر، در طول انتشار به ورودی یا کاربران آن منتقل میشود، اما از آنجایی که ویژگی بسته یک بُعد منتشر نمیشود، کپی کردن شاردینگ برای رعایت کامل محدودیت در موارد فوق مهم است.
علاوه بر این، اگر یک تانسور توسط زنجیرهای از ShardingConstraintOp استفاده شود که تمام موارد زیر را برآورده میکنند:
- این تانسور توسط
ShardingConstraintOpتولید نمیشود و هیچ کاربر دیگری از نوعShardingConstraintOpیاManualComputationOpندارد. - هیچکدام از
ShardingConstraintOpموجود در زنجیره، به جز مورد آخر، بیش از یک کاربرد ندارند؛ - آخرین
ShardingConstraintOpدر زنجیره هیچ کاربری از نوعShardingConstraintOpیاManualComputationOpندارد (در غیر این صورت آخرین مورد در زنجیره نیست)؛
سپس این مسیر جایگزین تمام کاربردهای دیگر ورودی زنجیره میشود، به طوری که:
-
func.returnبرای 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 op (بدون عملوند)
- یک عملیات پخش، تغییر شکل، برش یا عنصر-محور خالص، که همه عملوندهای آن به همراه کل زیرمحاسباتی که عملوندهای آن را تعریف میکنند، توسط زیرمحاسبات ثابت (به صورت بازگشتی) تعریف میشوند.
بسط اسکالر، پخش یک اسکالر است.
توجه داشته باشید که در یک زیرمحاسبهی ثابت، یک مقدار میتواند چندین کاربرد در آن زیرمحاسبهی داشته باشد.
همچنین توجه داشته باشید که این مسیر، تانسورهای اسکالر را تقسیم نمیکند زیرا آنها خرد نمیشوند (رتبه آنها 0 است).
-sdy-explicit-gather-scatter-batching
dim های دسته ای ضمنی را در Gather/Scatter به dim های دسته بندی صریح تبدیل می کند.
ابعاد ضمنی دستهای را در عملیاتهای stablehlo.gather و stablehlo.scatter شناسایی کرده و آنها را به ابعاد دستهای صریح عملوند/شاخصهای شروع تبدیل میکند.
-sdy-flatten-call-graph
نمودار تماس را مسطح میکند.
نمودار تماس را مسطح میکند.
-sdy-import-func-calls
فراخوانیهای درونخطی به NamedComputationOp .
یک مسیر برای تبدیل یک CallOp به یک NamedComputationOp با بدنه تابع inline شده و نام تابع فراخوانی شده ایجاد میکند. توجه داشته باشید که اگر تابع توسط چندین فراخوانی استفاده شود، بدنههای تابع کپی میشوند.
در صورتی که چندین عملیات فراخوانی برای یک تابع فراخوانیشده وجود داشته باشد، بدنه تابع را برای هر عملیات فراخوانی کپی کرده و یک هشدار منتشر میکنیم.
گزینهها
-add-data-flow-edges-on-named-computations : Whether to add data flow edges on named computations.
-sdy-inline-meshes
MeshAttr s را به TensorShardingAttr s وارد می کند.
نام نمادهای مش را در TensorShardingAttr ها با MeshAttr های درونخطی جایگزین میکند و تمام MeshOp استفاده نشده را حذف میکند.
-sdy-lift-inlined-meshes
MeshAttr های درونخطی را در sharding ها به عنوان نماد MeshOp افزایش میدهد.
هر MeshAttr درونخطی در TensorShardingAttr را با یک نام نماد مش جایگزین میکند، که به یک MeshOp موجود یا جدید در ماژول اشاره دارد، به طوری که هیچ دو MeshOp دارای MeshAttr یکسان نباشند ( MeshOp های موجود نیز deduped میشوند).
نام هر MeshOp جدید یکی از موارد زیر خواهد بود:
-
maximal_mesh_{device-id}، برای یک مش حداکثری (یعنی، لیست محورهای خالی و یک شناسه دستگاه واحد)، یا - اولین نام موجود در [
mesh,mesh_0,mesh_1, ... ].
-sdy-manual-axes-cleanup
استفاده از محورهای دستی را در ManualComputationOp حذف میکند.
- برای هر شاردینگ ورودی/خروجی که محور دستی مشخص نکرده است، آن محور دستی را به replicad_axes آن اضافه کنید. این کار برای اطمینان از مشخص بودن کامل محورهای دستی است.
- محورهای دستی را به ترتیب اعلان محور مش مرتب میکند.
علاوه بر این، اگر یک محاسبه دستی هیچ ورودی یا خروجی نداشته باشد و بدنه آن خالی نباشد، این مرحله با شکست مواجه خواهد شد.
-sdy-pre-order-funcs
توابع موجود در ماژول را بر اساس ترتیب قبلی گراف فراخوانی، دوباره مرتب میکند.
توابع موجود در ماژول را به ترتیب پیشترتیب گراف فراخوانی، مرتب میکند. این قابلیت زمانی مفید است که توابع/فراخوانیها را درونخطی کنیم، زیرا انتشار در بلوکها از بالا به پایین است و یک تکرار پیشترتیب در توابع، آن را شبیهسازی میکند.
-sdy-propagate-sharding-from-func-to-call
اگر خالی است، تکههای نتیجه فراخوانی را به عنوان تکههای نتیجه تابع تنظیم کنید.
یک مسیر برای انتشار func result sharding ایجاد میکند تا در صورت عدم وجود sharding در فراخوانی result و وجود func، آن را فراخوانی کند. نکته قابل توجه این است که اگر فراخوانی از قبل sharding های نتیجه داشته باشد، sharding نتیجه فراخوانی را حفظ میکند، حتی اگر همه sharding های نتیجه منفرد خالی باشند.
-sdy-remove-size-one-axes
محورهای با اندازه یک را از خرده ریزها حذف میکند.
محورهای با اندازه یک را از تمام شاردینگها و عملیات محاسبات دستی حذف میکند تا از تداخل ناشی از چنین محورهایی در حین انتشار جلوگیری شود. توجه داشته باشید که محورهای موجود در مشها حذف نمیشوند.
-sdy-sharding-group-import
مجوز استانداردسازی و اعتبارسنجی برای گروههای شاردینگ.
هنگام وارد کردن، استانداردسازی و اعتبارسنجی را برای گروههای شاردینگ اعمال میکند. این موارد عبارتند از:
اتحاد گروه شاردینگ
گروههای شاردینگ را با استفاده از ویژگی انتقالی عضویت گروهی ترکیب میکند. هر زمان که یک تانسور T در یک گروه شاردینگ G1 و گروه شاردینگ G2 باشد، میتوانیم استنباط کنیم که همه اعضای G1 و G2 باید به یک روش شاردینگ شوند. بنابراین میتوانیم G1 و G2 را در یک گروه واحد ترکیب کنیم. مجموعه شناسههای گروههای متعارف پس از ادغام برای حداقل مجموعه گروهها 0،1،...N-1 خواهد بود.
اعتبارسنجی گروه شاردینگ
تأیید میکند که گروههای شاردینگ به خوبی شکل گرفتهاند و با فرضیات موجود در پیادهسازی مطابقت دارند. این در حال حاضر ادعا میکند که اگر یک گروه شاردینگ حاوی
Valueباشد که درون بلوکManualComputationOpتعریف شده است، تمام مقادیر دیگر در آن گروه باید در همان بلوک قرار داشته باشند.