-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

  1. สําหรับการแยกข้อมูลขาเข้า/ขาออกที่ไม่ได้ระบุแกนด้วยตนเอง ให้เพิ่มแกนด้วยตนเองนั้นลงใน replicated_axes วิธีนี้ช่วยให้มั่นใจว่าระบุแกนด้วยตนเองอย่างครบถ้วนเสมอ
  2. จัดเรียงแกนที่กำหนดเองตามลําดับการประกาศแกนเมช

-sdy-sharding-group-import

ผ่านการตรวจสอบและการจัดระเบียบตามรูปแบบสําหรับกลุ่มการแยกข้อมูล

ใช้การจัดทําให้เป็นมาตรฐานและการตรวจสอบกับกลุ่มการแยกข้อมูลเมื่อนําเข้า ได้แก่

  1. การรวมกลุ่มการแยกกลุ่ม

    รวมกลุ่มการแยกกลุ่มโดยใช้พร็อพเพอร์ตี้การเปลี่ยนรูปแบบของการเป็นสมาชิกกลุ่ม เมื่อใดก็ตามที่ Tensor T อยู่ในกลุ่มการแยกกลุ่ม G1 และกลุ่มการแยกกลุ่ม G2 เราอนุมานได้ว่าสมาชิกทั้งหมดใน G1 และ G2 ควรได้รับการแยกกลุ่มในลักษณะเดียวกัน ดังนั้นเราจึงรวม G1 และ G2 เข้าเป็นกลุ่มเดียวได้ ชุดรหัสกลุ่มตามแบบฉบับหลังการผสานจะเป็น 0,1,...N-1 สําหรับชุดกลุ่มขั้นต่ำ

  2. การตรวจสอบกลุ่มการแยกข้อมูล

    ตรวจสอบว่ากลุ่มการแยกข้อมูลอยู่ในรูปแบบที่ถูกต้องและเป็นไปตามสมมติฐานในการใช้งาน ปัจจุบันการทดสอบนี้ระบุว่าหากกลุ่มการแยกข้อมูลมี Value ที่กําหนดไว้ภายในบล็อกของ ManualComputationOp ค่าอื่นๆ ทั้งหมดในกลุ่มนั้นต้องอยู่ในบล็อกเดียวกัน