-chlo-legalize-to-stablehlo

إضفاء الطابع القانوني بدءًا من تدفّق عمليات CHLO إلى StableHLO وShpe ops

-shape-legalize-to-stablehlo

إضفاء الطابع القانوني على العمليات ذات الصلة بالشكل على StableHLO.

يشير ذلك المصطلح إلى بطاقة تجريبية تضطلع على العمليات ذات الصلة بالأشكال في عمليات StableHLO.

سيؤدي جمع عمليات حساب الأشكال والبيانات معًا من خلال بطاقة اختيارية إمكانية الاستفادة من نظام StableHLO الشامل التجميعات التي تستخدم عمليات StableHLO لوضع نموذج ديناميكي.

-stablehlo-aggressive-folder

طي عمليات StableHLO

الخيارات

-fold-float : Allow for potentially lossy computations using float type.

-stablehlo-aggressive-simplification

تحديد عنوان URL الأساسي لعمليات StableHLO

-stablehlo-canonicalize-dynamism

تحويل عمليات StableHLO الديناميكية إلى عمليات ثابتة:

لاستبدال عمليات StableHLO الديناميكية مثل DynamicReshapeOp بالعناصر المقابلة نظيراتها الثابتة مثل ReshapeOp إذا كانت جميع العناصر الديناميكية لهذه العمليات هي عناصر ثابتة في الواقع.

على سبيل المثال، إذا كان معامِل ناتج_الشكل لـ DynamicReshapeOp ثابتًا ثم يمكن تحويل العملية إلى ReshapeOp.

-stablehlo-convert-to-signless

استخدِم هذه الطريقة لتحويل الأشعة تحت الحمراء إلى أعداد صحيحة بلا إشارات.

-stablehlo-legalize-composite-to-call

استبدال العمليات المركّبة بدعوة إلى تفكيكها

لاستبدال العمليات المركّبة باستدعاء لفصلها، على سبيل المثال: ما يلي:

stablehlo.composite "my_namespace.my_op" %arg0, %arg1 {
  decomposition = @bar,
  version = 1,
  composite_attributes = {
    "my_attribute": "my_value"
  }
}

سيصبح:

func.call @bar(%arg0, %arg1)

ويمكن استثناء مجموعة فرعية من المركّبات من هذا التحويل باستخدام "باستثناء" مثل:

stablehlo-opt --stablehlo-legalize-composite-to-call=except='foo.baz,foo.qux'

الخيارات

-except : Names of composites that should not be replaced with calls.

-stablehlo-legalize-deprecated-ops

إضفاء الطابع القانوني على العمليات المتوقّفة نهائيًا في العمليات المساندة جيدًا

يقترح RFC (رقم 2283) من StableHLO الإصدار 1.0 من Opset إزالة العديد من العمليات المتكررة. تساعد هذه البطاقة في تقييم تأثير هذه العمليات وعمليات الإزالة في مسارات تجميع مختلفة من خلال إضفاء الطابع القانوني عليها نظيراتها المتوافقة على المدى الطويل

الخيارات

-fail-on-unused : Fail on (mostly) unused ops that are deprecated without any fallback.

-stablehlo-legalize-qdq-to-quantized-op

دمج النمط (إلغاء تحديد كمّية وتشغيل النقطة العائمة وتحديد كمي) في عملية StableHLO الكمي

دمج النمط (إلغاء القياس وعملية النقطة العائمة وتحديد كمي) في عملية StableHLO الكمي ملاحظة: لا تؤدي البطاقة إلى حذف أي عملية موجودة مسبقًا. على سبيل المثال، يستخدم البرنامج التالي

func.func @add(%arg0: tensor<16x16x!quant.uniform<ui8:f32, 34.0:16>>) -> tensor<16x16x!quant.uniform<ui8:f32, 34.0:16>> {
  %0 = stablehlo.uniform_dequantize %arg0 : (tensor<16x16x!quant.uniform<ui8:f32, 34.0:16>>) -> tensor<16x16xf32>
  %1 = stablehlo.abs %0 : tensor<16x16xf32>
  %2 = stablehlo.uniform_quantize %1 : (tensor<16x16xf32>) -> tensor<16x16x!quant.uniform<ui8:f32, 34.0:16>>
  func.return %2 : tensor<16x16x!quant.uniform<ui8:f32, 34.0:16>>
}

سيصبح:

func.func @add(%arg0: tensor<16x16x!quant.uniform<u8:f32, 3.400000e+01:16>>) -> tensor<16x16x!quant.uniform<u8:f32, 3.400000e+01:16>> {
  %0 = stablehlo.uniform_dequantize %arg0 : (tensor<16x16x!quant.uniform<u8:f32, 3.400000e+01:16>>) -> tensor<16x16xf32>
  %1 = stablehlo.abs %0 : tensor<16x16xf32>
  %2 = stablehlo.abs %arg0 : tensor<16x16x!quant.uniform<u8:f32, 3.400000e+01:16>>
  %3 = stablehlo.uniform_quantize %1 : (tensor<16x16xf32>) -> tensor<16x16x!quant.uniform<u8:f32, 3.400000e+01:16>>
  return %2 : tensor<16x16x!quant.uniform<u8:f32, 3.400000e+01:16>>
}

-stablehlo-legalize-quant-to-math

تحويل العمليات الكَمية من StableHLO إلى عمليات الرياضيات الأساسية في StableHLO

تحويل برامج StableHLO باستخدام أنواع UniformQuantized إلى دلالات العمليات الحسابية للأعداد الصحيحة المكافئة.

func.func @add(%arg0: tensor<!quant.uniform<i8:f32,1.0:0>>, %arg1: tensor<!quant.uniform<i8:f32,2.0:1>>) ->  tensor<!quant.uniform<i8:f32,3.0:2>> {
  %0 = "stablehlo.add"(%arg0, %arg1) : (tensor<!quant.uniform<i8:f32,1.0:0>>, tensor<!quant.uniform<i8:f32,2.0:1>>) -> tensor<!quant.uniform<i8:f32,3.0:2>>
  func.return %0 : tensor<!quant.uniform<i8:f32,3.0:2>>
}

سيصبح:

func.func @add(%arg0: tensor<i8>, %arg1: tensor<i8>) -> tensor<i8> {
  %0 = stablehlo.convert %arg0 : (tensor<i8>) -> tensor<f32>
  %cst = stablehlo.constant dense<0.333333343> : tensor<f32>
  %1 = chlo.broadcast_multiply %0, %cst : (tensor<f32>, tensor<f32>) -> tensor<f32>
  %cst_0 = stablehlo.constant dense<2.000000e+00> : tensor<f32>
  %2 = chlo.broadcast_add %1, %cst_0 : (tensor<f32>, tensor<f32>) -> tensor<f32>
  %3 = stablehlo.round_nearest_even %2 : tensor<f32>
  %4 = stablehlo.convert %3 : (tensor<f32>) -> tensor<i32>
  %5 = stablehlo.convert %arg1 : (tensor<i8>) -> tensor<f32>
  %cst_1 = stablehlo.constant dense<0.666666686> : tensor<f32>
  %6 = chlo.broadcast_multiply %5, %cst_1 : (tensor<f32>, tensor<f32>) -> tensor<f32>
  %cst_2 = stablehlo.constant dense<1.33333337> : tensor<f32>
  %7 = chlo.broadcast_add %6, %cst_2 : (tensor<f32>, tensor<f32>) -> tensor<f32>
  %8 = stablehlo.round_nearest_even %7 : tensor<f32>
  %9 = stablehlo.convert %8 : (tensor<f32>) -> tensor<i32>
  %c = stablehlo.constant dense<2> : tensor<i32>
  %10 = chlo.broadcast_add %4, %9 : (tensor<i32>, tensor<i32>) -> tensor<i32>
  %11 = chlo.broadcast_subtract %10, %c : (tensor<i32>, tensor<i32>) -> tensor<i32>
  %c_3 = stablehlo.constant dense<-128> : tensor<i32>
  %c_4 = stablehlo.constant dense<127> : tensor<i32>
  %12 = stablehlo.clamp %c_3, %11, %c_4 : tensor<i32>
  %13 = stablehlo.convert %12 : (tensor<i32>) -> tensor<i8>
  return %13 : tensor<i8>
}

-stablehlo-legalize-quantized-op-to-qdq

حلِّل عملية StableHLO الكَمية إلى (إلغاء قياسها، وعملية النقطة العائمة، وتحديد كمي).

تحليل البرامج الكمية StableHLO باستخدام طريقة موحَّدة/تحديد كمّية العمليات التجارية. على سبيل المثال، يستخدم البرنامج التالي

func.func @add(%arg0: tensor<!quant.uniform<i8:f32,1.0:0>>, %arg1: tensor<!quant.uniform<i8:f32,2.0:1>>) ->  tensor<!quant.uniform<i8:f32,3.0:2>> {
  %0 = "stablehlo.add"(%arg0, %arg1) : (tensor<!quant.uniform<i8:f32,1.0:0>>, tensor<!quant.uniform<i8:f32,2.0:1>>) -> tensor<!quant.uniform<i8:f32,3.0:2>>
  func.return %0 : tensor<!quant.uniform<i8:f32,3.0:2>>
}

سيصبح:

func.func @add(%arg0: tensor<!quant.uniform<i8:f32, 1.000000e+00>>, %arg1: tensor<!quant.uniform<i8:f32, 2.000000e+00:1>>) -> tensor<!quant.uniform<i8:f32, 3.000000e+00:2>> {
  %0 = stablehlo.uniform_dequantize %arg0 : (tensor<!quant.uniform<i8:f32, 1.000000e+00>>) -> tensor<f32>
  %1 = stablehlo.uniform_dequantize %arg1 : (tensor<!quant.uniform<i8:f32, 2.000000e+00:1>>) -> tensor<f32>
  %2 = stablehlo.add %0, %1 : tensor<f32>
  %3 = stablehlo.uniform_quantize %2 : (tensor<f32>) -> tensor<!quant.uniform<i8:f32, 3.000000e+00:2>>
  return %3 : tensor<!quant.uniform<i8:f32, 3.000000e+00:2>>
}

-stablehlo-legalize-to-vhlo

إضفاء صفة قانونية على StableHLO إلى VHLO

-stablehlo-refine-arguments

تحسين أشكال الوسيطات للدالة الرئيسية:

لتعديل وسيطات الدالة الرئيسية باستخدام توقيع نوع الإدخال. التفاف الوسيطات في custom_call @stablehlo.shape_refinement_operand_wrapper للحفاظ على صلاحية الأشعة تحت الحمراء قبل تشغيل تنقيح الشكل.

ويمكن استخدام refinedTypesOption لتحديد قائمة بالأنواع المحسَّنة. يمكن تحديد ذلك في MLIR مع --types='tensor<...>,tensor<...>'. تمريره إلى طريقة إنشاء البطاقة. يجب أن تحدد قائمة نوع التصفية نوع كل وسيطة إلى طريقة main التي يتم تحسينها.

الخيارات

-types : The new types to be used for the main function's arguments, specified as an MLIR TypeRange 'tensor<1x2xf32>, ...'

-stablehlo-refine-shapes

تحسين الأشكال في برنامج StableHLO

التجوّل خلال برنامج StableHLO لتحسين الأشكال داخل العمليات.

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

-vhlo-legalize-to-stablehlo

إضفاء الطابع القانوني على VHLO إلى StableHLO

-vhlo-to-version

التحويل بين إصدارات VHLO:

الخيارات

-target : The target version. Must be a version of the form #.#.# or 'current'.