CollectiveOpInterface (Sdy_CollectiveOpInterface
)
อินเทอร์เฟซสําหรับการดำเนินการแบบรวมทั้งหมด รวบรวม get/set ทั่วไปสําหรับแอตทริบิวต์ outSharding
ข้อจำกัด:
- ออบเจ็กต์ต้องมีการแยกข้อมูลหรือ
allowMissingInputSharding()
แสดงผลเป็น "จริง" out_sharding
ถูกต้องสำหรับประเภทที่เกี่ยวข้อง- การแยกกลุ่มการดำเนินการและผลลัพธ์ต้องมีเมชเดียวกันหาก
allowDifferentMeshes()
แสดงผลเป็นเท็จ - ลําดับชั้นเดียวกันสําหรับการแยกกลุ่มผลลัพธ์และตัวดำเนินการ
วิธีการ
getOutSharding
::mlir::sdy::TensorShardingAttr getOutSharding();
แสดงผลการแยกกลุ่มของเทมพอร์ลเอาต์พุตของการดำเนินการแบบรวม
setOutShardingAttr
void setOutShardingAttr(::mlir::sdy::TensorShardingAttr sharding);
กำหนดการแยกกลุ่มเทนเซอร์เอาต์พุตของการดำเนินการแบบรวม
getTensor
::mlir::TypedValue<::mlir::TensorType> getTensor();
รับออบเจ็กต์ Tensor ของการดำเนินการแบบรวม
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 นี้มีขอบการไหลของข้อมูล 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::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
ShardingRuleOpInterface (Sdy_ShardingRuleOpInterface
)
อินเทอร์เฟซการดำเนินการที่อนุญาตให้การดำเนินการกำหนดกฎการแยกข้อมูลของตนเองได้
กฎการแยกข้อมูลระบุวิธีแบ่งพาร์ติชันการดำเนินการตามพร็อพเพอร์ตี้ต่างๆ ในการดำเนินการ เช่น แอตทริบิวต์ รูปร่างของโอเปอเรนด์ รูปร่างของผลลัพธ์ ฯลฯ ดูรายละเอียดเพิ่มเติมได้ที่ OpShardingRuleAttr
วิธีการ
getShardingRule
mlir::sdy::OpShardingRuleAttr getShardingRule();
แสดงกฎการแยกกลุ่มของการดำเนินการ