OpInterface সংজ্ঞা

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();

অপের শার্ডিং নিয়ম ফেরত দেয়।