ShardableDataFlowOpInterface (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
})
يحتوي هذا الإجراء الذي يستخدِم حلقة while على n من حواف تدفق البيانات، وتكون حواف تدفق البيانات i بين
المصادر 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);
تُستخدَم لضبط sharding
لمالك الحافة الخاصة بوسيطة الحظر باستخدام
index
المحدَّد.
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);
تُستخدَم لضبط sharding
لمالك الحافة الخاصة بنتيجة العملية باستخدام index
المحدّد.
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();
تعرِض هذه السمة قاعدة التجزئة لعملية التنفيذ.