ShardableDataFlowOpInterface ( ShardableDataFlowOpInterface
)
একটি অপ ইন্টারফেস যা শার্ডিকে এই ইন্টারফেসটি প্রসারিত করে এমন অপসের ডেটা ফ্লো প্রান্তের মাধ্যমে শার্ডিংগুলি প্রচার করতে দেয়।
কিছু অপ X-এর ডেটা ফ্লো প্রান্ত উৎসগুলির একটি সেটের মধ্যে একটি সেতু সংজ্ঞায়িত করে (প্রত্যেকটি হয় X-এর একটি অপারেন্ড বা X-এর ব্লক টার্মিনেটরের একটি অপারেন্ড) এবং লক্ষ্যগুলির একটি সেট (প্রত্যেকটি হয় X-এর ফলাফল বা ব্লক আর্গুমেন্ট। X), যাতে সমস্ত উত্স এবং লক্ষ্য একইভাবে শার্ড করা উচিত। একটি অপের একাধিক ডেটা প্রবাহ প্রান্ত থাকতে পারে যা একে অপরের সাথে অর্থোগোনাল।
একজন মালিক হল শার্ডির প্রচারের মাধ্যমে ব্যবহৃত ডেটা ফ্লো প্রান্তের ব্যবহারকারীর নির্দিষ্ট লক্ষ্য। ব্যবহারকারী এটি নির্বিচারে চয়ন করতে পারেন তবে এটি স্থির হওয়া দরকার।
যেমন:
y_1, ..., y_n = custom_op (x_1, ..., x_n)
((body_arg_1,..., body_arg_n) {
...
return return_value_1, ..., return_value_n
})
এই কাস্টম_অপের ডেটা ফ্লো প্রান্তের জন্য দুটি প্রকার রয়েছে, 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-th ডেটা প্রবাহ প্রান্তগুলি উত্স x_i
, return_value_i
এবং লক্ষ্য y_i
, pred_arg_i
, body_arg_i
মধ্যে রয়েছে।
পদ্ধতি:
getBlockArgumentEdgeOwnerShardings
mlir::ArrayRef<mlir::sdy::TensorShardingAttr> getBlockArgumentEdgeOwnerShardings();
সমস্ত ব্লক আর্গুমেন্ট ডেটা ফ্লো এজ মালিকদের শার্ডিং প্রদান করে।
setBlockArgumentEdgeOwnerSharding
void setBlockArgumentEdgeOwnerSharding(unsigned index, mlir::sdy::TensorShardingAttr sharding);
প্রদত্ত index
সাথে ব্লক আর্গুমেন্ট এজ মালিকের sharding
সেট করে।
setBlockArgumentEdgeOwnerShardings
void setBlockArgumentEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);
সমস্ত ব্লক আর্গুমেন্ট এজ মালিকদের shardings
সেট করে।
getOpResultEdgeOwnerShardings
mlir::ArrayRef<mlir::sdy::TensorShardingAttr> getOpResultEdgeOwnerShardings();
সমস্ত অপ ফলাফল ডেটা ফ্লো প্রান্ত মালিকদের শার্ডিং প্রদান করে।
setOpResultEdgeOwnerSharding
void setOpResultEdgeOwnerSharding(unsigned index, mlir::sdy::TensorShardingAttr sharding);
প্রদত্ত index
সাথে op ফলাফল প্রান্তের মালিকের sharding
সেট করে।
setOpResultEdgeOwnerShardings
void setOpResultEdgeOwnerShardings(mlir::ArrayRef<mlir::sdy::TensorShardingAttr> shardings);
সমস্ত অপ ফলাফল প্রান্ত মালিকদের shardings
সেট করে.
getBlockArgumentEdgeOwners
mlir::ArrayRef<mlir::BlockArgument> getBlockArgumentEdgeOwners();
সমস্ত ব্লক আর্গুমেন্ট প্রান্ত মালিকদের পায়.
getOpResultEdgeOwners
mlir::ResultRange getOpResultEdgeOwners();
সমস্ত অপ ফলাফল প্রান্ত মালিকদের পায়.
getEdgeSources
mlir::SmallVector<mlir::Value> getEdgeSources(mlir::Value target);
একটি target
মান দেওয়া ডেটা ফ্লো প্রান্তের উত্সগুলি পায়৷
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
দেওয়া ডেটা ফ্লো প্রান্তের অ-মালিক লক্ষ্যগুলি পায়৷
ShardingRuleOpInterface ( ShardingRuleOpInterface
)
একটি অপ ইন্টারফেস যা অপকে তার নিজস্ব শার্ডিং নিয়ম সংজ্ঞায়িত করতে দেয়। একটি শার্ডিং নিয়ম নির্দিষ্ট করে যে কিভাবে অপারেশনের বিভিন্ন বৈশিষ্ট্য অনুযায়ী বিভাজন করা যেতে পারে - যেকোনো বৈশিষ্ট্য, অপারেন্ডের আকৃতি, ফলাফলের আকৃতি ইত্যাদি। আরও বিস্তারিত জানার জন্য OpShardingRuleAttr
দেখুন।
পদ্ধতি:
getShardingRule
mlir::sdy::OpShardingRuleAttr getShardingRule();
অপের শার্ডিং নিয়ম ফেরত দেয়।