-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 من جميع العمليات المسجّلة.

-sdy-insert-explicit-reshards

يتم إدراج عمليات إعادة التجزئة الصريحة لجعل جميع العمليات تتضمّن تجزئة متوافقة.

تعني التجزئة المتوافقة بشكل أساسي أنّ العملية يمكنها قبول المعامِلات المجزّأة وإنتاج نتيجة مجزّأة بدون الحاجة إلى أي عمليات نقل لإعادة التجزئة (يُرجى العِلم بأنّ العملية قد تظل تتطلّب عمليات نقل، مثل عمليات تقليل الكل أو عمليات تبديل الهالة).

بعد النشر، قد تظل بعض العمليات تتضمّن تجزئة غير متوافقة.

يُرجى العِلم أنّه عندما يتم استخدام محور (أو محور فرعي) لتجزئة الأبعاد غير المتوافقة (مثل الأبعاد غير المتعاقدة في عملية ضرب المصفوفات) على مستوى موترات متعددة، أو عندما يجزّئ محور بُعدًا في موتر واحد ولكن ليس البُعد المقابل في الموتر الآخر، يُقال إنّ العملية تتضمّن تعارضًا في التجزئة. وبالتالي، بعد هذه العملية، تصبح العمليات خالية من التعارضات.

تُدرِج هذه العملية عمليات إعادة التجزئة بشكل صريح، بحيث يتم تجزئة الأبعاد المقابلة لكل عملية بالطريقة نفسها على مستوى جميع المعامِلات والنتائج، ولا يمكن استخدام كل محور (أو محور فرعي) إلا لتجزئة نوع بُعد واحد.

مثال:

الإدخال:

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.

تتم إزالة عملية جمع الكل في النمط جمع الكل + نقطة. تتم إزالة عملية تقليل التشتيت في النمط نقطة + تقليل التشتيت. هذه العملية مخصّصة للتوافق مع عملية ضرب المصفوفات الجماعية الإصدار الأول (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 إلى عمليات Shardy الجماعية المختلفة.

تتم مطابقة عمليات إعادة التجزئة وإعادة كتابتها إلى عمليات Shardy الجماعية المختلفة. بعد هذه العملية، لن تتبقّى أي عمليات إعادة تجزئة في الوحدة.

إذا كانت قيمة keepRedundantReshards هي "صحيح"، فستكون عمليات إعادة التجزئة المتبقية هي العمليات الزائدة فقط. بشكلٍ تلقائي، يفترض أنّه تم إدراج عمليات إعادة التجزئة الصريحة (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"}, {}\]. بعد ذلك، هناك عملية reshard لإعادة تجزئته على النحو \[{"x"}, {}\]. على المحورَين الأولَين، بما أنّه تتم إزالة اللاحقة {"y", "z"} بعد إعادة التجزئة، نستنتج أنّه تم جمع {"y", "z"} بالكامل. لا يتم تغيير البُعد الثاني.

الخيارات

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

-sdy-sharding-constraint-to-reshard

يتم تحويل ShardingConstraintOp إلى ReshardOp.

-sdy-sink-data-flow-edges

يتم نقل جميع DataFlowEdgeOp إلى الإدخال الخاص بها.

يتم نقل تجزئة كل DataFlowEdgeOp إلى الإدخال الخاص بها (الهدف الأساسي للحافة)، ويتم استبدال العملية بالإدخال الخاص بها.

الخيارات

-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 أن تكون مدخلات/مخرجات الدالة قابلة للقسمة/التجزئة بالتساوي لتجنُّب الحاجة إلى إضافة مساحة متروكة إلى المتّجهات متعدّدة الأبعاد. قد يؤدي النشر إلى أن تتضمّن المدخلات/المخرجات تجزئة غير قابلة للقسمة، لذا تُعدِّلها هذه العملية إلى أكبر بادئة لتجزئة الأبعاد في التجزئة الأصلية التي يتم تجزئتها بالتساوي.