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 นี้มีขอบการไหลของข้อมูล 2 ประเภท ได้แก่ ขอบ 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
ของเจ้าของ Edge การบล็อกทั้งหมด
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);
รับเป้าหมายของเจ้าของของ Edge โฟลว์ข้อมูลที่ระบุ source
getNonEdgeOwnerTargets
mlir::SmallVector<mlir::Value> getNonEdgeOwnerTargets(mlir::Value owner);
รับเป้าหมายที่ไม่ใช่เจ้าของของขอบการไหลของข้อมูลโดยระบุขอบ owner
ShardingRuleOpInterface (ShardingRuleOpInterface
)
อินเทอร์เฟซการดำเนินการที่อนุญาตให้การดำเนินการกำหนดกฎการแยกข้อมูลของตนเองได้
กฎการแยกข้อมูลระบุวิธีแบ่งพาร์ติชันการดำเนินการตามพร็อพเพอร์ตี้ต่างๆ ในการดำเนินการ เช่น แอตทริบิวต์ รูปร่างของโอเปอเรนด รูปร่างของผลลัพธ์ ฯลฯ ดูรายละเอียดเพิ่มเติมได้ที่ OpShardingRuleAttr
วิธีการ
getShardingRule
mlir::sdy::OpShardingRuleAttr getShardingRule();
แสดงกฎชาร์ดดิ้งของการดำเนินการ