-sdy-close-shardings
يتم إغلاق تجزئة الموتر وإزالة المحاور المكرّرة.
-sdy-constant-or-scalar-merger
يتم دمج الثوابت المتطابقة وعمليات توسيع المقياس مع التجزئة المطابقة.
يتم إجراء عملية إزالة التعبيرات الفرعية الشائعة (CSE) خفيفة الوزن على الثوابت التي تتضمّن تجزئة متطابقة.
يقسّم خط أنابيب الاستيراد الثوابت وعمليات توسيع المقياس ويكرّرها بحيث لا يتم نشر التجزئة بين الاستخدامات المختلفة لعملية حسابية فرعية ثابتة. إذا كانت الثوابت تتضمّن التجزئة نفسها بعد النشر، يتم دمجها لتوفير وقت التجميع. راجِع -sdy-constant-or-scalar-splitter لمزيد من المعلومات.
-sdy-convert-global-to-local
يتم تحويل برنامج SDY من الأشكال العامة إلى الأشكال المحلية.
يتم تحويل برنامج SDY من الأشكال العامة إلى الأشكال المحلية من خلال تقسيم الأبعاد المنطقية استنادًا إلى سمات التجزئة.
تستفيد هذه العملية من محوّل أنواع لربط RankedTensorType من الأشكال المنطقية العامة بالأشكال المادية المحلية للجهاز.
الخيارات
-per-dim-all-gather : Keep per-dimension all-gather without combining them into a single all-gather.
-combine-multi-dimension-reduce-scatter : Combine multi-dimension reduce-scatter into a single reduce-scatter.
-enable-rgv3 : Use StableHLO ReplicaGroupV3 (mesh-axes based) for collectives.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-sdy-drop-sharding-and-mesh
تتم إزالة عملية الشبكة المتداخلة وتقسيم البيانات من البرنامج.
-sdy-drop-sharding-rules
تتم إزالة OpShardingRuleAttr من جميع العمليات المسجّلة.
-sdy-export-named-computations
يتم تحديد المكالمات من NamedComputationOp.
يتم إنشاء عملية تحوّل NamedComputationOp إلى CallOp باستخدام دالة خاصة جديدة تُسمّى name في NamedComputationOp. تتضمّن كل من FuncOp وCallOp التجزئة نفسها التي تتضمّنها المعامِلات/النتائج في NamedComputationOp الأصلية.
إذا كانت هناك دالة تحمل الاسم نفسه الذي يحمله NamedComputationOp في الوحدة، سيغيّر جدول رموز MLIR اسمها إلى {name}_#.
-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.
-sdy-insert-func-call-reshards
يتم إدراج عمليات إعادة التجزئة لحلّ تعارضات تجزئة الدوال والمكالمات.
يتم إدراج عمليات إعادة التجزئة لحلّ تعارضات تجزئة الدوال والمكالمات على مستوى النتائج.
-sdy-optimize-collectives
يتم تحسين عمليات التواصل الجماعي.
يتم إزالة عمليات التبديل الجماعي الزائدة التي تسبق سلاسل عمليات "الكل إلى الكل" من خلال تقسيم الأبعاد المقسّمة ودمجها في عملية "الكل إلى الكل" مجمّعة.
-sdy-pad-for-divisibility
يتم توسيع الموترات التي تتضمّن تجزئة غير قابلة للقسمة إلى أشكال قابلة للقسمة.
-sdy-per-instruction-partitioning
_يتم بشكل انتقائي استخراج التعليمات المستهدَفة وتشغيل خط أنابيب أداة التقسيم عليها لإنشاء رمز برمجي محلي للجهاز وتغليفها في sdy.manualcomputation.
لأغراض تصحيح الأخطاء والتقسيم الثنائي، يتم بشكل انتقائي تقسيم التعليمات الفردية باستخدام خط أنابيب أداة التقسيم المستقلة Shardy (resolve-permutation-factors وreshard-to-collectives وpad-for-divisibility وconvert-global-to-local)، ويتم تغليف الرمز البرمجي المحلي للجهاز الناتج داخل sdy.manual_computation. يؤدي ذلك إلى الحفاظ على بقية البرنامج العام بدون تغيير، لذا لا تقسم XLA SPMD إلا التعليمات العامة غير المغلّفة.
الخيارات
-filter : Filter string for selective partitioning. Can be empty (all sharded ops), comma-separated op name substrings (e.g. 'dot, pad'), or key-values like 'selectLow=0, selectHigh=10'.
-enable-halo-exchange : Implement halo exchange logic for windowed operations inside the sub-pipeline.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-sdy-propagate-to-func-results
يتم نشر التجزئة من أداة إنهاء الدالة إلى نتائج الدالة.
يتم نسخ التجزئة الخاصة بقيم أداة إنهاء الدالة إلى نتائج func.func المقابلة، مع الحفاظ على التجزئة الحالية في الدالة الرئيسية.
-sdy-remove-all-gather-reduce-scatter-for-cmv1
_تتم إزالة sdy.all_gather وsdy.reducescatter من CMV1.
تتم إزالة عملية التجميع الكلي في النمط التجميع الكلي + النقطة. تتم إزالة عملية "تقليل التوزيع" في النمط "النقطة" + "تقليل التوزيع". تتوافق هذه العملية مع عملية ضرب المصفوفات الجماعية 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 إلى عمليات 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-resolve-permutation-factors
يتم حلّ التجزئة على مستوى الأبعاد المرتبطة بعوامل kPermutation.
قد تتطلب أبعاد التجزئة التي تتضمّن عوامل kPermutation عمليات تواصل تعمل من خلال جهاز آخر (مثل تبادل الهالة للنوافذ أو عمليات التبديل الجماعي للعمليات العكسية).
إذا كانت enableHaloExchange صحيحة، ستستخدم العملية منطق تواصل محسّنًا متاحًا لحلّ عوامل التبديل. بخلاف ذلك، ستُدرِج العملية ببساطة عمليات sdy.reshard لتكرار هذه الأبعاد. القيمة التلقائية لـ enableHaloExchange هي "صحيحة".
الخيارات
-enable-halo-exchange : Implement halo exchange logic for windowed operations.
-replica-count : Number of replicas (data parallelism).
-partition-count : Number of partitions (model parallelism).
-sdy-resolve-single-device-sharding
يتم خفض عمليات الجهاز الفردي إلى stablehlo.if المحمية برقم تعريف الجهاز المستهدَف.
الخيارات
-replica-count : Number of replicas per partition.
-partition-count : Number of partitions per replica.
-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-sink-func-data-flow-edges
يتم نقل جميع FuncDataFlowEdgeOp إلى الإدخال.
يتم نقل تجزئة كل FuncDataFlowEdgeOp إلى الإدخال ويتم استبدال العملية بالإدخال.
-sdy-unflatten-call-graph
يتم إلغاء تسطيح الرسم البياني للمكالمات.
يتم إلغاء تسطيح الرسم البياني. يتم إزالة الدوال المكرّرة التي تتضمّن تجزئة الإدخال/الإخراج نفسها والأصل نفسه كما هو موضح في سمة 'original_func_name' المرفقة بالدوال.
الخيارات
-dedup-functions-fully : If true, regardless of the input and output shardings of functions, it keeps one callee function for each caller function. The default is false, meaning it will deduplicate only if the input and output shardings are the same.
-sdy-update-non-divisible-input-output-shardings
يتم تجزئة مدخلات/مخرجات FuncOp بالتساوي، ما يزيل أي حاجة إلى التوسيع بسبب التجزئة غير القابلة للقسمة.
يتوقع مستخدمو Shardy أن تكون مدخلات/مخرجات الدالة قابلة للقسمة/التجزئة بالتساوي لتجنُّب الحاجة إلى توسيع الموترات. قد يؤدي النشر إلى أن تتضمّن المدخلات/المخرجات تجزئة غير قابلة للقسمة، لذا تُعدِّل هذه العملية التجزئة إلى أكبر بادئة تجزئة للأبعاد في التجزئة الأصلية التي يتم تجزئتها بالتساوي.
-sdy-verify-unreduced-axes
يتم التحقّق من اتساق استخدام المحاور غير المخفّضة.
يتم التحقّق من أنّه بالنسبة إلى كل عملية، إذا كانت المعامِلات تتضمّن محاور غير مخفّضة، فإنّ العملية إما تخفّضها بشكل صريح (مثل من خلال sdy.reshard) أو تمرّرها إلى نتائجها (أو تكون عملية تحديد نطاق، مثل func.call).