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