-sdy-close-shardings

ปิดการแบ่งส่วนเทนเซอร์และนำแกนที่จำลองออก

-sdy-constant-or-scalar-merger

ผสานค่าคงที่และการขยายสเกลาร์ที่เหมือนกันกับการแบ่งส่วนที่ตรงกัน

ดำเนินการ CSE แบบเบาในค่าคงที่ที่มีการแบ่งส่วนเหมือนกัน

ไปป์ไลน์การนำเข้าจะแยกและทำซ้ำค่าคงที่และการขยายสเกลาร์เพื่อให้ไม่มีการเผยแพร่การแบ่งส่วนระหว่างการใช้งานที่แตกต่างกันของการคำนวณย่อยแบบค่าคงที่ หากค่าคงที่มีการแบ่งส่วนเหมือนกันหลังจากการเผยแพร่ การส่งผ่านนี้จะผสานค่าคงที่เพื่อประหยัดเวลาในการคอมไพล์ ดูข้อมูลเพิ่มเติมได้ที่ -sdy-constant-or-scalar-splitter

-sdy-convert-global-to-local

แปลงโปรแกรม SDY จากรูปร่างส่วนกลางเป็นรูปร่างภายใน

แปลงโปรแกรม SDY จากรูปร่างส่วนกลางเป็นรูปร่างภายในโดยการแบ่งพาร์ติชันมิติข้อมูลเชิงตรรกะตามแอตทริบิวต์การแบ่งส่วน

การส่งผ่านนี้ใช้ตัวแปลงประเภทเพื่อแมป RankedTensorType จากรูปร่างเชิงตรรกะส่วนกลางเป็นรูปร่างทางกายภาพเฉพาะอุปกรณ์

-sdy-drop-sharding-rules

นำ OpShardingRuleAttr ออกจาก Op ที่ลงทะเบียนทั้งหมด

-sdy-insert-explicit-reshards

แทรกการแบ่งส่วนใหม่ที่ชัดเจนเพื่อให้การดำเนินการทั้งหมดมีการแบ่งส่วนที่เข้ากันได้

การแบ่งส่วนที่เข้ากันได้หมายความว่าการดำเนินการสามารถยอมรับตัวถูกดำเนินการที่แบ่งส่วนและสร้างผลลัพธ์ที่แบ่งส่วนได้โดยไม่จำเป็นต้องมีการสื่อสารการแบ่งส่วนใหม่ (โปรดทราบว่าการดำเนินการอาจยังคงต้องมีการสื่อสาร เช่น การลดทั้งหมดหรือการสลับรัศมี)

หลังจากการเผยแพร่ การดำเนินการบางอย่างอาจยังคงมีการแบ่งส่วนที่ไม่เข้ากัน

โปรดทราบว่าเมื่อใช้แกน (หรือแกนย่อย) เพื่อแบ่งส่วนมิติข้อมูลที่ไม่เกี่ยวข้อง (เช่น มิติข้อมูลที่ไม่หดตัวใน matmul) ในเทนเซอร์หลายรายการ หรือเมื่อแกนแบ่งส่วนมิติข้อมูลในเทนเซอร์หนึ่งแต่ไม่ได้แบ่งส่วนมิติข้อมูลที่เกี่ยวข้องในเทนเซอร์อื่น เราจะกล่าวว่าการดำเนินการมีการขัดแย้งในการแบ่งส่วน ดังนั้น หลังจากการส่งผ่านนี้ การดำเนินการจะไม่มีการขัดแย้ง

การส่งผ่านนี้จะแทรกการดำเนินการแบ่งส่วนใหม่อย่างชัดเจนเพื่อให้มิติข้อมูลที่เกี่ยวข้องมีการแบ่งส่วนในลักษณะเดียวกันในตัวถูกดำเนินการและผลลัพธ์ทั้งหมด และแกน (หรือแกนย่อย) แต่ละแกนจะใช้เพื่อแบ่งส่วนมิติข้อมูลประเภทเดียวเท่านั้น

ตัวอย่าง

อินพุต

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

เอาต์พุต

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

ในตัวอย่างด้านบน lhs และ rhs มีการแบ่งส่วนทั้งคู่ในแกน "x" ในมิติข้อมูลที่ไม่หดตัว ซึ่งไม่เข้ากัน การส่งผ่านจะแทรกการแบ่งส่วนใหม่ที่ชัดเจนใน rhs ก่อนการดำเนินการจุด เพื่อให้การดำเนินการจุดมีการแบ่งส่วนที่เข้ากันได้

ตัวเลือก

-enable-full-version                  : Enable full version.
-avoid-reshards-on-named-computations : Avoid explicit reshards/collectives on named computations.

-sdy-remove-all-gather-reduce-scatter-for-cmv1

นำ sdy.all_gather และ sdy.reducescatter ออกสำหรับ CMV1

นำการรวบรวมทั้งหมดในรูปแบบการรวบรวมทั้งหมด + จุดออก นำการลดการกระจายในรูปแบบจุด + การลดการกระจายออก การส่งผ่านนี้มีไว้เพื่อความเข้ากันได้กับ Collective Matmul V1 (CMV1) ซึ่งเป็นโซลูชันชั่วคราวสำหรับ b/432019089

-sdy-remove-propagation-debug-info

นำข้อมูลการแก้ไขข้อบกพร่องของการเผยแพร่ (ขอบการเผยแพร่และการแบ่งส่วนต้นทาง) ออกระหว่างการส่งออก

-sdy-remove-sharding-groups

นำ ShardingGroupOps ออกหลังจากการเผยแพร่

-sdy-remove-sub-axes-in-input-output-shardings

นำแกนย่อยในการแบ่งส่วนอินพุต/เอาต์พุตออก

ผู้ใช้ Shardy บางรายคาดหวังว่าอินพุต/เอาต์พุตของฟังก์ชันจะมีการแบ่งส่วนโดยไม่มีแกนย่อย การส่งผ่านนี้จะนำแกนย่อยและแกนต่อท้ายออกจากส่วนการแบ่งส่วนอินพุต/เอาต์พุต โดยปกติการส่งผ่านนี้จะเกิดขึ้นหลังจากการส่งผ่าน sdy-update-non-divisible-input-output-shardings เพื่อให้แน่ใจว่าการนำแกนย่อยออกจะไม่ทำให้เกิดการแบ่งส่วนที่ไม่สามารถหารได้

-sdy-reshard-to-collectives

แปลง ReshardOp เป็น Op แบบรวมต่างๆ ของ Shardy

จับคู่ Op การแบ่งส่วนใหม่และเขียน Op เหล่านั้นใหม่เป็น Op แบบรวมต่างๆ ของ Shardy หลังจากการส่งผ่านนี้ จะไม่มี Op การแบ่งส่วนใหม่เหลืออยู่ในโมดูล

หาก keepRedundantReshards เป็นจริง Op การแบ่งส่วนใหม่ที่เหลืออยู่จะเป็น Op ที่ซ้ำซ้อนเท่านั้น โดยค่าเริ่มต้น ระบบจะถือว่ามีการแทรกการแบ่งส่วนใหม่ที่ชัดเจนแล้ว (sdy-insert-explicit-reshards) และจะไม่เก็บการแบ่งส่วนใหม่ที่ซ้ำซ้อน ระบบควรเก็บการแบ่งส่วนใหม่ที่ซ้ำซ้อนไว้หากยังไม่ได้แทรกการแบ่งส่วนใหม่ที่ชัดเจน

ตัวอย่าง

อินพุต

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

เอาต์พุต

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

ในตัวอย่างด้านบน เทนเซอร์ %0 : tensor<16x2xf32> มีการแบ่งส่วนเป็น \[{"x", "y", "z"}, {}\] จากนั้นจะมี Op reshard ที่แบ่งส่วนใหม่เป็น \[{"x"}, {}\] ในแกนแรก เนื่องจากมีการนำคำต่อท้าย {"y", "z"} ออก หลังจากการแบ่งส่วนใหม่ เราจึงอนุมานได้ว่าเราได้รวบรวม {"y", "z"} ทั้งหมด มิติข้อมูลที่ 2 ไม่มีการเปลี่ยนแปลง

ตัวเลือก

-keep-redundant-reshards : Whether it keeps redundant reshards or removes.

-sdy-sharding-constraint-to-reshard

แปลง ShardingConstraintOp เป็น ReshardOp

-sdy-sink-data-flow-edges

รวม DataFlowEdgeOp ทั้งหมดไว้ในอินพุต

ย้ายการแบ่งส่วนของ DataFlowEdgeOp แต่ละรายการไปยังอินพุต (เป้าหมายรากของขอบ) และแทนที่ Op ด้วยอินพุต

ตัวเลือก

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-update-non-divisible-input-output-shardings

ทำให้ FuncOp อินพุต/เอาต์พุตมีการแบ่งส่วนอย่างเท่าเทียมกัน โดยไม่จำเป็นต้องมีการเพิ่มระยะขอบเนื่องจากการแบ่งส่วนที่ไม่สามารถหารได้

ผู้ใช้ Shardy คาดหวังว่าอินพุต/เอาต์พุตของฟังก์ชันจะสามารถหาร/แบ่งส่วนได้อย่างเท่าเทียมกันเพื่อหลีกเลี่ยงการต้องเพิ่มระยะขอบเทนเซอร์ การเผยแพร่จะทำให้อินพุต/เอาต์พุตมีการแบ่งส่วนที่ไม่สามารถหารได้ ดังนั้นการส่งผ่านนี้จะอัปเดตอินพุต/เอาต์พุตเป็นคำนำหน้าการแบ่งส่วนมิติข้อมูลที่ใหญ่ที่สุดของการแบ่งส่วนเดิมที่มีการแบ่งส่วนอย่างเท่าเทียมกัน