تعاریف OpInterface

CollectiveOpInterface ( Sdy_CollectiveOpInterface )

رابط برای همه عملیات جمعی. get/set مشترک را برای ویژگی outSharding در بر می گیرد.

محدودیت ها:

  • عملوند باید شاردینگ داشته باشد یا allowMissingInputSharding() true را برمی گرداند.
  • out_sharding در نوع مربوطه معتبر است.
  • اگر allowDifferentMeshes() false را برگرداند باید مش یکسان باشد.
  • رتبه مشابه برای عملوند و تقسیم نتایج.

روش ها:

getOutSharding

::mlir::sdy::TensorShardingAttr getOutSharding();

تقسیم بندی تانسور خروجی عملیات جمعی را برمی گرداند.

setOutShardingAttr

void setOutShardingAttr(::mlir::sdy::TensorShardingAttr sharding);

تقسیم بندی تانسور خروجی عملیات جمعی را تنظیم می کند.

getTensor

::mlir::TypedValue<::mlir::TensorType> getTensor();

عملوند تانسور عملیات جمعی را بدست آورید.

getType

::mlir::Type getType();

نوع نتیجه عملیات جمعی را دریافت کنید.

allowDifferentMeshes

bool allowDifferentMeshes();

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

allowMissingInputSharding

bool allowMissingInputSharding();

نشان می‌دهد که آیا عملیات جمعی اجازه می‌دهد ورودی هیچ تقسیم‌بندی نداشته باشد، یعنی به طور ضمنی کاملاً تکرار شود.

ShardableDataFlowOpInterface ( Sdy_ShardableDataFlowOpInterface )

یک رابط عملیاتی که به Shardy اجازه می‌دهد تا شاردینگ‌ها را از طریق لبه‌های جریان داده عملیات‌هایی که این رابط را گسترش می‌دهند، منتشر کند.

لبه جریان داده برخی از عملیات X، پلی بین مجموعه ای از منابع (هر کدام یک عملوند از X یا یک عملوند پایان دهنده بلوک X است) و مجموعه ای از اهداف (هر کدام نتیجه ای از X یا آرگومان بلوکی X هستند) را تعریف می کند، به طوری که همه منابع و اهداف باید به طور یکسان تقسیم شوند. یک عملیات می تواند دارای لبه های جریان داده های متعددی باشد که متعامد با یکدیگر هستند.

مالک یک هدف مشخص شده توسط کاربر از لبه جریان داده است که توسط انتشار Shardy استفاده می شود. کاربر می تواند آن را خودسرانه انتخاب کند اما باید ثابت باشد.

به عنوان مثال:

  y_1, ..., y_n = custom_op (x_1, ..., x_n)
                  ((body_arg_1,..., body_arg_n) {
                    ...
                    return return_value_1, ..., return_value_n
                  })

این custom_op دو نوع برای لبه‌های جریان داده دارد، n یال هر کدام بین return_value_i (منبع) و y_i (هدف‌ها) و n یال بین x_i (منبع) و body_arg_i (هدف‌ها). در این مورد صاحبان لبه همان اهداف هستند.

در اینجا نمونه ای از عملیات با چندین هدف آورده شده است:

  y_0, ..., y_n = while (x_0, ..., x_n)
                  ((pred_arg_0,... , pred_arg_n) { ... })
                  ((body_arg_0,..., body_arg_n) {
                    ...
                    return return_value_0, ..., return_value_n
                  })

در حالی که op دارای n لبه جریان داده است، iمین لبه جریان داده بین منابع x_i ، return_value_i و اهداف y_i ، pred_arg_i ، body_arg_i است.

روش ها:

getBlockArgumentEdgeOwnerShardings

mlir::SmallVector<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();

اشتراک گذاری های همه صاحبان لبه جریان داده آرگومان بلوکی را برمی گرداند.

setBlockArgumentEdgeOwnerShardings

void setBlockArgumentEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

shardings همه صاحبان لبه آرگومان بلوک را تنظیم می کند.

getOpResultEdgeOwnerShardings

mlir::SmallVector<mlir::sdy::TensorShardingAttr> getOpResultEdgeOwnerShardings();

اشتراک گذاری همه صاحبان لبه جریان داده نتیجه عملیات را برمی گرداند.

setOpResultEdgeOwnerShardings

void setOpResultEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);

shardings همه صاحبان لبه نتیجه عملیات را تنظیم می کند.

transformTargetSharding

mlir::sdy::TensorShardingAttr transformTargetSharding(mlir::Value target, mlir::sdy::TensorShardingAttr sharding, mlir::sdy::DataFlowShardingTransformType transformType);

sharding هدف را بسته به transformType تغییر می دهد

برای اطلاعات بیشتر به DataFlowShardingTransformType مراجعه کنید.

getBlockArgumentEdgeOwners

mlir::ArrayRef<mlir::BlockArgument> getBlockArgumentEdgeOwners();

همه صاحبان لبه آرگومان بلوک را دریافت می کند.

getOpResultEdgeOwners

mlir::ResultRange getOpResultEdgeOwners();

همه صاحبان لبه نتیجه عملیات را دریافت می کند.

getEdgeSources

mlir::SmallVector<mlir::OpOperand*> getEdgeSources(mlir::Value owner);

منابع لبه جریان داده را با توجه به owner لبه دریافت می کند.

getEdgeOwnerFromTarget

mlir::Value getEdgeOwnerFromTarget(mlir::Value target);

با توجه به target که ممکن است مالک باشد یا نباشد، target مالک لبه جریان داده را دریافت می کند.

getEdgeOwnerFromSource

mlir::Value getEdgeOwnerFromSource(mlir::OpOperand&source);

هدف مالک لبه جریان داده را با یک source دریافت می کند.

getNonEdgeOwnerTargets

mlir::SmallVector<mlir::Value> getNonEdgeOwnerTargets(mlir::Value owner);

با توجه به owner لبه، اهداف غیر مالک لبه جریان داده را دریافت می کند.

shouldKeepEdgeOwnerShardingsDivisible

bool shouldKeepEdgeOwnerShardingsDivisible();

اگر تقسیم بندی صاحبان لبه، اندازه ابعاد را تقسیم کند، درست برمی گردد تا نیازی به بالشتک نباشد.

ShardingRuleOpInterface ( Sdy_ShardingRuleOpInterface )

یک رابط op که به op اجازه می دهد تا قانون اشتراک گذاری خود را تعریف کند. یک قانون تقسیم بندی مشخص می کند که چگونه یک عملیات را می توان بر اساس ویژگی های مختلف در عملیات تقسیم بندی کرد - هر ویژگی، شکل عملوندها، شکل نتایج و غیره. برای جزئیات بیشتر به OpShardingRuleAttr مراجعه کنید.

روش ها:

getShardingRule

mlir::sdy::OpShardingRuleAttr getShardingRule();

قانون اشتراک گذاری عملیات را برمی گرداند.

shouldKeepOutputShardingsDivisible

bool shouldKeepOutputShardingsDivisible();

اگر شاردینگ خروجی اندازه ابعاد را تقسیم کند، مقدار true را برمی‌گرداند تا نیازی به بالشتک نباشد.