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

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

แสดงกฎการแยกกลุ่มของการดำเนินการ