-chlo-legalize-to-stablehlo

Legalizza dal flusso delle operazioni CHLO alle operazioni StableHLO e Shape

-shape-legalize-to-stablehlo

Legalizza le operazioni relative alla forma in StableHLO.

Un pass sperimentale che legalizza le operazioni correlate alla forma alle operazioni StableHLO.

L'unione dei calcoli di forme e dati tramite una tessera facoltativa rendere possibile all'ecosistema StableHLO di sfruttare potenzialmente pipeline di compilazione che usano operazioni StableHLO per modellare il dinamismo.

-stablehlo-aggressive-folder

Piega le operazioni StableHLO

Opzioni

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

-stablehlo-aggressive-simplification

Canonizza le operazioni StableHLO

-stablehlo-canonicalize-dynamism

Canonizza le operazioni StableHLO dinamiche in operazioni statiche.

Sostituisce le operazioni dinamiche StableHLO come DynamicReshapeOp con le controparti statiche, come ReshapeOp, se tutti gli elementi dinamici di queste operazioni sono in realtà costanti.

Ad esempio, se l'operando output_shape di DynamicReshapeOp è una costante , l'operazione può essere trasformata in ReshapeOp.

-stablehlo-convert-to-signless

Passa per trasformare l'IR in modo che sia su numeri interi senza segno.

-stablehlo-legalize-composite-to-call

Sostituisce le operazioni composte con una chiamata alla loro decomposizione

Sostituisce le operazioni composte con una chiamata alla loro decomposizione, ad esempio di seguito:

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

Diventerà:

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

Un sottoinsieme di elementi compositi può essere escluso da questa trasformazione utilizzando il metodo "tranne" flag, ad es.

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

Opzioni

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

-stablehlo-legalize-deprecated-ops

Legalizza le operazioni deprecate in operazioni ben supportate.

Il documento RFC (#2283) relativo ai deprecazioni di Opset StableHLO v1.0 propone di rimuovere diverse operazioni ridondanti. Questa tessera consente di valutare l'impatto di queste operazioni in varie pipeline di compilazione, rendendole legali supportati a lungo termine.

Opzioni

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

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

Fondi il pattern (dequantizzazione, operazione in virgola mobile e quantizzazione) nell'operazione quantizzata StableHLO

Fondi il pattern (dequantizzazione, operazione in virgola mobile e quantizzazione) nell'operazione quantizzata StableHLO Nota: la tessera non elimina alcuna operazione preesistente. Ad esempio, il seguente programma

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

Diventerà:

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

Converti le operazioni quantizzate StableHLO in operazioni matematiche primitive StableHLO.

Converti i programmi StableHLO utilizzando i tipi UniformQuantized in semanticamente operazioni matematiche di numeri interi equivalenti.

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

Diventerà:

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

Scomporre l'operazione StableHLO quantizzata in un pattern (dequantizzazione, operazione in virgola mobile e quantizzazione).

Scomporre i programmi quantizzati StableHLO utilizzando quantità/dequantizzazione uniformi operazioni. Ad esempio, il seguente programma

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

Diventerà:

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

Rendi legale il progetto StableHLO a VHLO.

-stablehlo-refine-arguments

Perfeziona le forme di argomento della funzione principale.

Modifica gli argomenti della funzione principale utilizzando la firma del tipo di input. Aggrega gli argomenti in custom_call @stablehlo.shape_refinement_operand_wrapper per mantenere valido IR prima dell'esecuzione del perfezionamento della forma.

refinedTypesOption può essere utilizzato per specificare un elenco di tipi perfezionati. Può essere specificato in MLIR con --types='tensor<...>,tensor<...>', oppure passato al metodo pass create. L'elenco dei tipi di perfezionamento deve specificare tipo di ogni argomento al metodo main che viene perfezionato.

Opzioni

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

-stablehlo-refine-shapes

Perfeziona le forme in un programma StableHLO.

Cammina nel programma StableHLO perfezionando le forme all'interno delle operazioni.

Il caso d'uso principale di questa tessera è lo sviluppo di modelli di programmazione a forme statiche. Se un programma StableHLO dalla forma dinamica ha la struttura corretta, aggiornandone i tipi di argomento dalle forme dinamiche forme statiche; l'esecuzione di questa tessera propagherà forme statiche su del programma.

-vhlo-legalize-to-stablehlo

Rendi legale VHLO in StableHLO.

-vhlo-to-version

Converti versioni di VHLO.

Opzioni

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