-chlo-legalize-to-stablehlo

از جریان عملیات CHLO به عملیات StableHLO و Shape قانونی می شود

-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

عملیات StableHLO را متعارف می کند

-stablehlo-canonicalize-dynamism

عملیات های پویا StableHLO را به عملیات ایستا متعارف می کند.

اگر همه عناصر پویا این عملیات ها واقعا ثابت باشند، عملیات های پویا StableHLO مانند DynamicReshapeOp را با همتاهای استاتیک مربوطه مانند ReshapeOp جایگزین می کند.

به عنوان مثال، اگر عملوند output_shape DynamicReshapeOp یک مقدار ثابت باشد، می توان عملیات را به ReshapeOp تبدیل کرد.

-stablehlo-convert-to-signless

پاس برای تبدیل IR به اعداد صحیح بدون علامت.

-stablehlo-create-compatibility-expander

توسعه دهنده سازگاری برای عملیات StableHLO ایجاد کنید.

StableHLO ops به روز رسانی می شود یا عملیات جدید در آخرین نسخه ها معرفی می شود. این مجوز انتخاب، سازگاری با نسخه‌های قدیمی‌تر StableHLO را با تجزیه عملیات StableHLO جدیدتر به عملیات‌های معادل که توسط آن نسخه‌های قدیمی‌تر پشتیبانی می‌شوند، گسترش می‌دهد.

چرا این یک مجوز انتخاب است؟

گاهی اوقات، بهبودهای عملیاتی StableHLO برای ساده‌تر کردن کنترل الگوهای رایج خاص در اکوسیستم OpenXLA استفاده می‌شود. این شامل مواردی مانند TanOp می‌شود که از چارچوب و کامپایلر بالایی پشتیبانی می‌کند، و همچنین ابعاد جمع‌آوری/پراکنده دسته‌بندی، که می‌تواند با استفاده از برش‌ها نمایش داده شود، اما اشتراک‌گذاری را بسیار دشوارتر می‌کند. برای این دسته از ویژگی‌های جدید، ما تنزل خودکار را پیشنهاد نمی‌کنیم، زیرا ممکن است اطلاعات مهم مورد استفاده در بهینه‌سازی‌های بعدی را دور بریزد. این پاس می‌تواند برای گسترش این عملیات‌ها بر اساس نسخه هدف استفاده شود تا سازگاری را با هزینه کامپایل‌سازی کمتر بهینه به حداکثر برساند.

func.func @tan_op_non_complex(%arg0: tensor<4xf64>) -> tensor<4xf64> {
  %1 = stablehlo.tan %arg0 : tensor<4xf64>
  func.return %1 : tensor<4xf64>
}

تبدیل خواهد شد:

func.func @tan_op_non_complex(%arg0: tensor<4xf64>) -> tensor<4xf64> {
  %0 = stablehlo.sine %arg0 : tensor<4xf64>
  %1 = stablehlo.cosine %arg0 : tensor<4xf64>
  %2 = stablehlo.divide %0, %1 : tensor<4xf64>
  return %2 : tensor<4xf64>
}

گزینه ها

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

-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

عملیات منسوخ شده را به عملیاتی با پشتیبانی خوب قانونی کنید.

StableHLO v1.0 Opset Deprecations RFC (#2283) پیشنهاد حذف چندین عملیات اضافی را دارد. این پاس به ارزیابی تأثیر این حذف عملیات در خطوط لوله تلفیقی مختلف با قانونی کردن آنها برای همتایان پشتیبانی شده درازمدت آنها کمک می کند.

گزینه ها

-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 می پیچد تا قبل از اجرای اصلاح شکل، IR معتبر بماند.

از 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'.
،

-chlo-legalize-to-stablehlo

از جریان عملیات CHLO به عملیات StableHLO و Shape قانونی می شود

-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

عملیات StableHLO را متعارف می کند

-stablehlo-canonicalize-dynamism

عملیات های پویا StableHLO را به عملیات ایستا متعارف می کند.

اگر همه عناصر پویا این عملیات ها واقعا ثابت باشند، عملیات های پویا StableHLO مانند DynamicReshapeOp را با همتاهای استاتیک مربوطه مانند ReshapeOp جایگزین می کند.

به عنوان مثال، اگر عملوند output_shape DynamicReshapeOp یک مقدار ثابت باشد، می توان عملیات را به ReshapeOp تبدیل کرد.

-stablehlo-convert-to-signless

پاس برای تبدیل IR به اعداد صحیح بدون علامت.

-stablehlo-create-compatibility-expander

توسعه دهنده سازگاری برای عملیات StableHLO ایجاد کنید.

StableHLO ops به روز رسانی می شود یا عملیات جدید در آخرین نسخه ها معرفی می شود. این مجوز انتخاب، سازگاری با نسخه‌های قدیمی‌تر StableHLO را با تجزیه عملیات StableHLO جدیدتر به عملیات‌های معادل که توسط آن نسخه‌های قدیمی‌تر پشتیبانی می‌شوند، گسترش می‌دهد.

چرا این یک مجوز انتخاب است؟

گاهی اوقات، بهبودهای عملیاتی StableHLO برای ساده‌تر کردن کنترل الگوهای رایج خاص در اکوسیستم OpenXLA استفاده می‌شود. این شامل مواردی مانند TanOp می‌شود که از چارچوب و کامپایلر بالایی پشتیبانی می‌کند، و همچنین ابعاد جمع‌آوری/پراکنده دسته‌بندی، که می‌تواند با استفاده از برش‌ها نمایش داده شود، اما اشتراک‌گذاری را بسیار دشوارتر می‌کند. برای این دسته از ویژگی‌های جدید، ما تنزل خودکار را پیشنهاد نمی‌کنیم، زیرا ممکن است اطلاعات مهم مورد استفاده در بهینه‌سازی‌های بعدی را دور بریزد. این پاس می‌تواند برای گسترش این عملیات‌ها بر اساس نسخه هدف استفاده شود تا سازگاری را با هزینه کامپایل‌سازی کمتر بهینه به حداکثر برساند.

func.func @tan_op_non_complex(%arg0: tensor<4xf64>) -> tensor<4xf64> {
  %1 = stablehlo.tan %arg0 : tensor<4xf64>
  func.return %1 : tensor<4xf64>
}

تبدیل خواهد شد:

func.func @tan_op_non_complex(%arg0: tensor<4xf64>) -> tensor<4xf64> {
  %0 = stablehlo.sine %arg0 : tensor<4xf64>
  %1 = stablehlo.cosine %arg0 : tensor<4xf64>
  %2 = stablehlo.divide %0, %1 : tensor<4xf64>
  return %2 : tensor<4xf64>
}

گزینه ها

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

-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

عملیات منسوخ شده را به عملیاتی با پشتیبانی خوب قانونی کنید.

StableHLO v1.0 Opset Deprecations RFC (#2283) پیشنهاد حذف چندین عملیات اضافی را دارد. این پاس به ارزیابی تأثیر این حذف عملیات در خطوط لوله تلفیقی مختلف با قانونی کردن آنها برای همتایان پشتیبانی شده درازمدت آنها کمک می کند.

گزینه ها

-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 می پیچد تا قبل از اجرای اصلاح شکل، IR معتبر بماند.

از 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'.