-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 ค่าอื่นๆ ทั้งหมดในกลุ่มนั้นต้องอยู่ในบล็อกเดียวกัน