-sdy-add-data-flow-edges
แทรก DataFlowEdgeOp
สำหรับขอบการไหลของข้อมูลทุกรายการ
แทรก DataFlowEdgeOp
สำหรับทุกค่าที่เป็นเจ้าของขอบเขตการไหลของข้อมูล เช่น ค่าทั้งหมดที่ getDataFlowEdgeOwners
แสดงผลในการดำเนินการทุกรายการในโมดูล
DataFlowEdgeOp
ที่แทรกจะใช้การแยกกลุ่มที่มีอยู่ของเป้าหมายเจ้าของ หากมี
-sdy-apply-sharding-constraints
ใช้ข้อจำกัดที่กำหนดการแยกข้อมูลของอินพุต
คัดลอกการแยกส่วน ShardingConstraintOp
ไปยังอินพุตหากเป็นไปตามข้อกำหนดต่อไปนี้ทั้งหมด
- อินพุตไม่มีการแยกข้อมูลที่มีอยู่
- การแยกข้อมูลของ
ShardingConstraintOp
เสร็จสมบูรณ์แล้ว - อินพุตไม่มีผู้ใช้ประเภท
ShardingConstraintOp
หรือManualComputationOp
คนอื่นที่มีการจัดสรรข้อมูลแบบอื่น
เงื่อนไขเหล่านี้บ่งชี้ว่า ShardingConstraintOp
เป็นผู้กำหนดการแยกข้อมูลของอินพุต
หากอินพุตมาจาก DataFlowEdgeOp
เราจะแทนที่การใช้ input
ทั้งหมดด้วย ShardingConstraintOp
แทนการตั้งค่าการแยกกลุ่มของ op เพื่อหลีกเลี่ยงการจํากัดการแยกกลุ่มของเป้าหมายทั้งหมดของขอบ
โปรดทราบว่าการแยกส่วน ShardingConstraintOp
จะนำไปใช้กับอินพุตหรือผู้ใช้ในระหว่างการนำไปใช้ ไม่ว่าจะผ่านขั้นตอนนี้หรือไม่ก็ตาม แต่เนื่องจากพร็อพเพอร์ตี้แบบปิดของมิติข้อมูลจะไม่นำไปใช้ จึงต้องคัดลอกการแยกส่วนเพื่อให้เป็นไปตามข้อจำกัดอย่างเต็มที่ในกรณีข้างต้น
นอกจากนี้ หากมีการใช้ Tensor โดยเชน ShardingConstraintOp
ที่มีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้ทั้งหมด
- เทนเซอร์ไม่ได้สร้างโดย
ShardingConstraintOp
และไม่มีผู้ใช้ประเภทShardingConstraintOp
หรือManualComputationOp
คนอื่นๆ ShardingConstraintOp
ทั้งหมดในเชนมีการใช้งานไม่เกิน 1 ครั้งยกเว้นรายการสุดท้ายShardingConstraintOp
สุดท้ายในเชนไม่มีผู้ใช้ประเภทShardingConstraintOp
หรือManualComputationOp
(ไม่เช่นนั้นจะไม่ได้เป็นShardingConstraintOp
สุดท้ายในเชน)
จากนั้นพาสนี้จะแทนที่การใช้อินพุตอื่นๆ ทั้งหมดของเชนที่กําหนดไว้หลัง ShardingConstraintOp
สุดท้ายในเชน (และภายในบล็อกเดียวกัน) ด้วยผลลัพธ์ของเชน เนื่องจากควรเป็นตัวกําหนดการแยกข้อมูลของการใช้เหล่านั้น
-sdy-constant-splitter
แยกการคํานวณย่อยแบบคงที่เพื่อให้แต่ละรายการมีการใช้งานเพียงครั้งเดียว
แยกการคํานวณย่อยแบบคงที่เพื่อให้มีผู้ใช้เพียงรายเดียว
วิธีนี้ช่วยให้มั่นใจว่าระบบจะไม่เผยแพร่การแยกกลุ่มระหว่างการใช้การคํานวณย่อยแบบคงที่ที่แตกต่างกัน เนื่องจากถือว่าเป็นการพึ่งพาที่ไม่ถูกต้อง (การใช้ค่าคงที่ไม่ควรมีการแยกกลุ่มในลักษณะเดียวกันเพียงเพราะใช้ค่าคงที่เดียวกัน) ผลที่ได้คือการใช้งานแต่ละครั้งอาจมีการจัดสรรที่แตกต่างกันซึ่งสามารถนำไปใช้กับสำเนาของการคำนวณย่อยแบบคงที่ของตนเองได้
การคํานวณย่อยแบบคงที่อาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- โอเปอเรเตอร์คงที่หรือ iota (ไม่มีตัวถูกดำเนินการ)
- การแพร่กระจาย การตัด หรือการดำเนินการแบบองค์ประกอบล้วน ซึ่งโอเปอเรนด์ทั้งหมดจะกำหนดโดยการคํานวณย่อยแบบคงที่ (แบบเรียกซ้ำ) พร้อมกับการคํานวณย่อยทั้งหมดที่กําหนดโอเปอเรนด์
โปรดทราบว่าภายในการคํานวณย่อยแบบคงที่ ค่าหนึ่งๆ อาจมีการใช้งานหลายครั้งภายในการคํานวณย่อยนั้น
-sdy-lift-inlined-meshes
ยกระดับ MeshAttr
ที่ฝังอยู่ในการแยกเป็นสัญลักษณ์ MeshOp
แทนที่ MeshAttr
ใน TensorShardingAttr
ด้วยชื่อสัญลักษณ์ตาข่าย ซึ่งอ้างอิง MeshOp
ที่มีอยู่หรือใหม่ในโมดูล เพื่อให้ไม่มี MeshOp
2 รายการที่มี MeshAttr
เหมือนกัน (ระบบจะกรอง MeshOp
ที่มีอยู่ออกด้วย)
ชื่อของ MeshOp
ใหม่แต่ละรายการจะเป็นอย่างใดอย่างหนึ่งต่อไปนี้
maximal_mesh_{device-id}
สำหรับเมชสูงสุด (เช่น รายการแกนว่างและรหัสอุปกรณ์เดียว) หรือ- ชื่อแรกที่ใช้ได้ใน [
mesh
,mesh_0
,mesh_1
, ...]
-sdy-manual-axes-cleanup
ล้างการใช้แกนที่กำหนดเองใน ManualComputationOp
- สําหรับการแยกข้อมูลขาเข้า/ขาออกที่ไม่ได้ระบุแกนด้วยตนเอง ให้เพิ่มแกนด้วยตนเองนั้นลงใน replicated_axes วิธีนี้ช่วยให้มั่นใจว่าระบุแกนด้วยตนเองอย่างครบถ้วนเสมอ
- จัดเรียงแกนที่กำหนดเองตามลําดับการประกาศแกนเมช
-sdy-sharding-group-import
ผ่านการตรวจสอบและการจัดระเบียบตามรูปแบบสําหรับกลุ่มการแยกข้อมูล
ใช้การจัดทําให้เป็นมาตรฐานและการตรวจสอบกับกลุ่มการแยกข้อมูลเมื่อนําเข้า ได้แก่
การรวมกลุ่มการแยกกลุ่ม
รวมกลุ่มการแยกกลุ่มโดยใช้พร็อพเพอร์ตี้การเปลี่ยนรูปแบบของการเป็นสมาชิกกลุ่ม เมื่อใดก็ตามที่ Tensor T อยู่ในกลุ่มการแยกกลุ่ม G1 และกลุ่มการแยกกลุ่ม G2 เราอนุมานได้ว่าสมาชิกทั้งหมดใน G1 และ G2 ควรได้รับการแยกกลุ่มในลักษณะเดียวกัน ดังนั้นเราจึงรวม G1 และ G2 เข้าเป็นกลุ่มเดียวได้ ชุดรหัสกลุ่มตามแบบฉบับหลังการผสานจะเป็น 0,1,...N-1 สําหรับชุดกลุ่มขั้นต่ำ
การตรวจสอบกลุ่มการแยกข้อมูล
ตรวจสอบว่ากลุ่มการแยกข้อมูลอยู่ในรูปแบบที่ถูกต้องและเป็นไปตามสมมติฐานในการใช้งาน ปัจจุบันการทดสอบนี้ระบุว่าหากกลุ่มการแยกข้อมูลมี
Value
ที่กําหนดไว้ภายในบล็อกของManualComputationOp
ค่าอื่นๆ ทั้งหมดในกลุ่มนั้นต้องอยู่ในบล็อกเดียวกัน