-chlo-legalize-to-stablehlo

Melegalkan alur operasi CHLO ke StableHLO dan Shape ops

-shape-legalize-to-stablehlo

legalkan operasi terkait bentuk ke StableHLO.

Tiket eksperimental yang melegalkan operasi terkait bentuk untuk operasi StableHLO.

Menyatukan perhitungan bentuk dan data melalui penerusan opsional akan memungkinkan ekosistem StableHLO untuk berpotensi memanfaatkan pipeline kompilasi yang menggunakan operasi StableHLO untuk membuat model dinamisme.

-stablehlo-aggressive-folder

Melipat operasi StableHLO

Opsi

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

-stablehlo-aggressive-simplification

Mengkanonikalisasi operasi StabilHLO

-stablehlo-canonicalize-dynamism

Melakukan kanonikalisasi operasi StabilHLO dinamis ke dalam operasi statis.

Mengganti operasi StableHLO dinamis seperti DynamicReshapeOp dengan statis seperti ReshapeOp jika semua elemen dinamis dari operasi ini sebenarnya konstan.

Misalnya, jika operand output_shape dari DynamicReshapeOp adalah konstanta , operasinya bisa diubah menjadi ReshapeOp.

-stablehlo-convert-to-signless

Teruskan untuk mengubah IR menjadi bilangan bulat yang tidak bertanda tangan.

-stablehlo-legalize-composite-to-call

Mengganti operasi gabungan dengan panggilan ke dekomposisinya

Mengganti operasi gabungan dengan panggilan ke dekomposisinya, misalnya di bawah ini:

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

Akan menjadi:

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

Subset komposit dapat dikecualikan dari transformasi ini menggunakan "kecuali" penanda, misalnya:

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

Opsi

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

-stablehlo-legalize-deprecated-ops

legalkan operasi yang tidak digunakan lagi ke operasi yang didukung dengan baik.

StabilHLO v1.0 Opset Penghentian RFC (#2283) mengusulkan untuk menghapus beberapa operasi redundan. Tahap ini membantu mengevaluasi dampak operasi ini penghapusan di berbagai pipeline kompilasi dengan melegalkannya di partner yang didukung dalam jangka panjang.

Opsi

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

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

Pola sekering (de-kuantisasi, operasi floating point, dan kuantisasi) menjadi operasi terkuantisasi StableHLO

Pola fuse (de-kuantisasi, operasi floating point, dan kuantisasi) menjadi operasi terkuantisasi StableHLO Catatan: Kartu tidak menghapus operasi yang sudah ada. Misalnya, program berikut

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>>
}

Akan menjadi:

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

Mengonversi dari operasi terkuantisasi StableHLO ke operasi matematika primitif StableHLO.

Mengonversi program StableHLO menggunakan jenis UniformQuantized ke secara semantik operasi matematika bilangan bulat yang setara.

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>>
}

Akan menjadi:

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

Menguraikan operasi StabilHLO terkuantisasi menjadi pola (mendekuantisasi, operasi floating point, dan kuantisasi).

Menguraikan program terkuantisasi StableHLO menggunakan kuantisasi/dekuantisasi seragam operasional bisnis. Misalnya, program berikut

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>>
}

Akan menjadi:

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

legalkan StableHLO ke VHLO.

-stablehlo-refine-arguments

Menyempurnakan bentuk argumen fungsi utama.

Memodifikasi argumen fungsi utama menggunakan tanda tangan jenis input. Menggabungkan argumen dalam custom_call @stablehlo.shape_refinement_operand_wrapper untuk menjaga agar IR tetap valid sebelum penyempurnaan bentuk dijalankan.

refinedTypesOption dapat digunakan untuk menentukan daftar jenis yang ditingkatkan. Ini dapat ditentukan dalam MLIR dengan --types='tensor<...>,tensor<...>', atau diteruskan ke metode pembuatan kartu. Daftar jenis penyempurnaan harus menentukan jenis setiap argumen ke metode main yang sedang disempurnakan.

Opsi

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

-stablehlo-refine-shapes

Menyempurnakan bentuk di seluruh program StableHLO.

Mengikuti program StableHLO yang meningkatkan kualitas bentuk dalam operasi.

Kasus penggunaan utama untuk kartu ini adalah spesialisasi yang berbentuk dinamis program ke bentuk statis. Jika program StableHLO yang berbentuk dinamis memiliki atribut struktur yang tepat, lalu memperbarui jenis argumennya dari bentuk dinamis menjadi bentuk statis dan menjalankan penerusan ini akan menyebarkan bentuk statis dalam program ini.

-vhlo-legalize-to-stablehlo

legalkan VHLO ke StableHLO.

-vhlo-to-version

Lakukan konversi antar-versi VHLO.

Opsi

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