-sdy-close-shardings
إغلاق عمليات تقسيم مصفوفة متجاوبة وإلغاء المحاور المكرّرة
-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, \[{"y"},{"x"}\]>}
%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
قبل عملية النقط، وذلك لتتم إعادة تقسيمها على السمة الأولى فقط وعلى محور "x". بهذه الطريقة، تصبح عملية
النقطة متوافقة.
-sdy-remove-sharding-groups
تزيل ShardingGroupOps بعد النشر.
-sdy-sharding-constraint-to-reshard
تحوِّل ShardingConstraintOp إلى ReshardOp.
-sdy-sink-data-flow-edges
تُدمج جميع DataFlowEdgeOp
في الإدخال
تنقل هذه العملية تقسيم كل DataFlowEdgeOp
إلى إدخالها (الهدف الجذر
للحدود)، وتستبدل العملية بإدخالها.
TODO(tomnatan): consider moving the sharding to all targets that can have a sharding attached.
-sdy-update-non-divisible-input-output-shardings
تقسيم مدخلات/مخرجات FuncOp بشكلٍ متساوٍ، ما يزيل الحاجة إلى الحشو بسبب عمليات التقسيم غير القابلة للتقسيم
يتوقّع مستخدمو Shardy أن تكون مدخلات/مخرجات الدالة متساوية قابلة للقسمة/التقسيم لتجنُّب الحاجة إلى إضافة عناصر إلى مصفوفاتهم. قد تؤدي عملية النشر إلى أن تحتوي المدخلات/المخرَجات على أقسام غير قابلة للتقسيم، لذا تعمل هذه الخطوة على تعديل هذه الأقسام إلى البادئة الأكبر لتقسيم السمات من التقسيم الأصلي الذي يتم تقسيمه بالتساوي.