คําจํากัดความของ OpInterface

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

แสดงกฎชาร์ดดิ้งของการดำเนินการ