-sdy-add-data-flow-edges
แทรก DataFlowEdgeOp
สำหรับทุก Edge ของโฟลว์ข้อมูล
แทรก DataFlowEdgeOp
สำหรับทุกค่าที่เป็นเจ้าของขอบโฟลว์ข้อมูล กล่าวคือ ค่าทั้งหมดที่ getDataFlowEdgeOwners
แสดงผลในทุกการดำเนินการในโมดูล
DataFlowEdgeOp
ที่แทรกจะใช้การแยกกลุ่มที่มีอยู่ของเป้าหมายเจ้าของ หากมี
TODO(b/330339693): update this doc when getDataFlowEdgeOwners
is removed.
-sdy-apply-sharding-constraints
ใช้ข้อจำกัดที่กำหนดชาร์ดดิ้งอินพุต
คัดลอกการแยกส่วน ShardingConstraintOp
ไปยังอินพุตหากเป็นไปตามข้อกำหนดต่อไปนี้ทั้งหมด
- อินพุตไม่มีการแยกข้อมูลที่มีอยู่
- อินพุตไม่ได้สร้างโดย
DataFlowEdgeOp
ซึ่งมีชาร์ดเป้าหมายทั้งหมดของ Edge - การแยกข้อมูลของ
ShardingConstraintOp
เสร็จสมบูรณ์แล้ว - อินพุตไม่มีผู้ใช้ประเภท
ShardingConstraintOp
หรือManualComputationOp
อื่นที่มีการจัดสรรข้อมูลแบบอื่น
ซึ่งบ่งชี้ว่า ShardingConstraintOp
เป็นผู้กำหนดการแยกข้อมูลของอินพุต
โปรดทราบว่าการแยกส่วน ShardingConstraintOp
จะนำไปใช้กับอินพุตหรือผู้ใช้ในระหว่างการนำไปใช้งาน ไม่ว่าจะผ่านขั้นตอนนี้หรือไม่ก็ตาม แต่เนื่องจากพร็อพเพอร์ตี้แบบปิดของมิติข้อมูลจะไม่นำไปใช้งาน คุณจึงต้องคัดลอกการแยกส่วนเพื่อให้เป็นไปตามข้อจำกัดอย่างเต็มที่ในกรณีข้างต้น
นอกจากนี้ หากเชน ShardingConstraintOp
ใช้ tensor ที่เป็นไปตามข้อกำหนดทั้งหมดต่อไปนี้
- Tensor ไม่ได้สร้างขึ้นโดย
ShardingConstraintOp
และไม่มีผู้ใช้ประเภทอื่นของประเภทShardingConstraintOp
หรือManualComputationOp
ShardingConstraintOp
ในเชนไม่มีการใช้งานมากกว่า 1 รายการ ยกเว้นการใช้งานครั้งล่าสุดShardingConstraintOp
สุดท้ายในเชนไม่มีผู้ใช้ประเภทShardingConstraintOp
หรือManualComputationOp
(ไม่เช่นนั้นจะไม่ได้เป็นShardingConstraintOp
สุดท้ายในเชน)
จากนั้นพาสนี้จะแทนที่การใช้อินพุตอื่นๆ ทั้งหมดของเชนที่กำหนดไว้หลัง ShardingConstraintOp
สุดท้ายในเชน (และภายในบล็อกเดียวกัน) ด้วยผลลัพธ์ของเชน เนื่องจากควรกำหนดการแยกส่วนการใช้เหล่านั้น
-sdy-constant-splitter
แยกการคํานวณย่อยแบบคงที่เพื่อให้แต่ละรายการมีการใช้งานเพียงครั้งเดียว
แยกการคํานวณย่อยแบบคงที่เพื่อให้มีผู้ใช้เพียงรายเดียว
วิธีนี้ทำให้มั่นใจได้ว่าจะไม่มีการเผยแพร่ชาร์ดดิ้งระหว่างการใช้งานการคำนวณย่อยคงที่ที่แตกต่างกัน เนื่องจากถือว่าเป็นการขึ้นต่อกันที่ผิดพลาด (การใช้ค่าคงที่ไม่ควรมีการชาร์ดในลักษณะเดียวกันเพียงเพราะใช้ค่าคงที่เดียวกัน) ผลที่ได้คือแต่ละการใช้งานอาจมีการจัดสรรที่แตกต่างกันซึ่งสามารถนำไปใช้กับสำเนาของการคำนวณย่อยแบบคงที่ของตัวเองได้
การคํานวณย่อยแบบคงที่อาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้
- โอเปอเรเตอร์คงที่หรือ iota (ไม่มีตัวถูกดำเนินการ)
- Broadcast, Slice หรือ op Element-wise op ซึ่งตัวถูกกำหนดทั้งหมด ด้วยการคำนวณย่อยคงที่ (ซ้ำ) ควบคู่กับการคำนวณย่อยทั้งหมดที่กำหนดตัวถูกดำเนินการ
โปรดทราบว่าภายในการคำนวณย่อยคงที่ ค่าหนึ่งๆ อาจมีประโยชน์หลายอย่างภายในการคำนวณย่อยนั้น
-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
1) สําหรับการแยกข้อมูลขาเข้า/ขาออกที่ไม่ได้ระบุแกนด้วยตนเอง ให้เพิ่มแกนด้วยตนเองนั้นลงใน replicated_axes วิธีนี้ช่วยให้มั่นใจว่าระบุแกนด้วยตนเองอย่างครบถ้วนเสมอ
2) จัดเรียงแกนที่กำหนดเองตามลําดับการประกาศแกนตาข่าย
-sdy-sharding-group-import
การแปลงให้เป็นรูปแบบมาตรฐานและการตรวจสอบผ่านสําหรับกลุ่มการแยกข้อมูล
ใช้การจัดทําให้เป็นมาตรฐานและการตรวจสอบกับกลุ่มการแยกข้อมูลเมื่อนําเข้า ได้แก่
1) การรวมกลุ่มชาร์ดดิ้ง - รวมกลุ่มชาร์ดดิ้งโดยใช้พร็อพเพอร์ตี้ทรานซิทีฟของการเป็นสมาชิกกลุ่ม เมื่อใดก็ตามที่ Tensor T อยู่ในกลุ่มการแยกกลุ่ม G1 และกลุ่มการแยกกลุ่ม G2 เราอนุมานได้ว่าสมาชิกทั้งหมดใน G1 และ G2 ควรมีการแยกกลุ่มในลักษณะเดียวกัน ดังนั้นเราจึงรวม G1 และ G2 เข้าเป็นกลุ่มเดียวได้ ชุดของรหัสกลุ่มตามรูปแบบบัญญัติหลังจากรวมแล้วจะเป็น 0,1,...N-1 สำหรับชุดกลุ่มขั้นต่ำ
2) การตรวจสอบกลุ่มการแยกข้อมูล
ตรวจสอบว่ากลุ่มการแยกข้อมูลอยู่ในรูปแบบที่ถูกต้องและเป็นไปตามสมมติฐานภายในการใช้งาน ปัจจุบันการทดสอบนี้ระบุว่าหากกลุ่มการแยกข้อมูลมี Value
ที่กําหนดไว้ภายในบล็อกของ ManualComputationOp
ค่าอื่นๆ ทั้งหมดในกลุ่มนั้นต้องอยู่ในบล็อกเดียวกัน