-sdy-close-shardings

إغلاق عمليات تقسيم مصفوفة متجاوبة وإلغاء المحاور المكرّرة

-sdy-constant-merger

دمج الثوابت المتطابقة مع الأجزاء المطابقة

تُجري ميزة "التشفير من جهة العميل" البسيطة عمليات على الثوابت ذات التقسيمات المتطابقة.

تقسم مسار الإدخال الثابتة وتكرّرها بحيث لا يتم نشر التجزئة بين الاستخدامات المختلفة لحساب فرعي ثابت. إذا كانت المتغيّرات الثابتة تتضمّن الأجزاء نفسها بعد النشر، تدمج هذه الخطوة تلك الأجزاء لتوفير وقت التجميع.

-sdy-drop-sharding-rules

إسقاط OpShardingRuleAttr من جميع عمليات التشغيل المسجّلة

-sdy-insert-explicit-reshards

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

ويعني التجزئة المتوافقة بشكل أساسي أنّ العملية يمكنها قبول المَعلمات المجزّأة وإنشاء نتيجة مجزّأة بدون الحاجة إلى أي اتصالات لإعادة التجزئة (يُرجى العِلم أنّ العملية قد تتطلّب مع ذلك اتصالات، مثل عمليات all-reduce أو halo-swaps).

بعد النشر، قد تظل بعض العمليات تحتوي على أقسام غير متوافقة.

يُرجى العِلم أنّه عند استخدام محور (أو محور فرعي) لتقسيم سمات غير متطابقة (مثل السمات غير المتعاقدة في 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 قبل عملية النقطة، لكي تتضمّن عملية النقطة عمليات تجزئة متوافقة.

-sdy-remove-sharding-groups

تزيل ShardingGroupOps بعد النشر.

-sdy-reshard-to-collectives

تحوِّل ReshardOp إلى عمليات جماعية مختلفة من Shardy.

تطابق عمليات إعادة التجزئة وتعيد كتابتها في عمليات جماعية مختلفة في Shardy. بعد هذا الإجراء، لن تبقى أي عمليات إعادة تقسيم في الوحدة. يفترض هذا الإجراء أنّه سبق إدراج مجموعات إعادة تقسيم صريحة (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"} بالكامل. لا يتم تغيير السمة الثانية.

-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-temp-explicit-reshards-for-optimizations

إدراج عمليات إعادة تقسيم صريحة لتحسينات معيّنة

هذا البطاقة هو حل مؤقت إلى أن نتمكّن من تفعيل البطاقة sdy-insert-explicit-reshards تلقائيًا.

ويسمح لنا بإدراج عمليات إعادة تقسيم صريحة في عمليات محدّدة لتحسينات.

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

تقسيم مدخلات/مخرجات FuncOp بشكلٍ متساوٍ، ما يزيل الحاجة إلى الحشو بسبب التقسيمات غير القابلة للتقسيم

يتوقّع مستخدمو Shardy أن تكون مدخلات/مخرجات الدالة متساوية قابلة للقسمة/التقسيم لتجنُّب الحاجة إلى إضافة عناصر إلى مصفوفاتهم. قد تؤدي عملية النشر إلى أن تحتوي المدخلات/المخرَجات على أقسام غير قابلة للتقسيم، لذا تعمل هذه الخطوة على تعديل هذه الأقسام إلى البادئة الأكبر لتقسيم السمات من التقسيم الأصلي الذي يتم تقسيمه بالتساوي.