-chlo-legalize-to-stablehlo
Legalização do fluxo de operações CHLO para StableHLO e Shape ops
-shape-legalize-to-stablehlo
Legalize operações relacionadas a formas para o StableHLO.
Uma passagem experimental que legaliza operações relacionadas a formas para operações StableHLO.
Unir cálculos de forma e de dados com uma passagem opcional vai possibilitam que o ecossistema StableHLO aproveite o potencial pipelines de compilação que usam operações do StableHLO para modelar o dinamismo.
-stablehlo-aggressive-folder
Dobre as operações StableHLO
Opções
-fold-float : Allow for potentially lossy computations using float type.
-stablehlo-aggressive-simplification
Canoniza as operações StableHLO
-stablehlo-canonicalize-dynamism
Canoniza operações StableHLO dinâmicas em operações estáticas.
Substitui as operações dinâmicas do StableHLO, como DynamicReshapeOp, pelo código equivalentes estáticos, como ReshapeOp, se todos os elementos dinâmicos dessas operações são constantes.
Por exemplo, se o operando output_shape de DynamicReshapeOp for uma constante valor, a operação poderá ser transformada em ReshapeOp.
-stablehlo-convert-to-signless
Passe para transformar o IR em números inteiros sem sinal.
-stablehlo-legalize-composite-to-call
Substitui operações compostas por uma chamada para a decomposição delas
Substitui operações compostas por uma chamada para sua decomposição, por exemplo, o seguinte:
stablehlo.composite "my_namespace.my_op" %arg0, %arg1 {
decomposition = @bar,
version = 1,
composite_attributes = {
"my_attribute": "my_value"
}
}
Vai ser:
func.call @bar(%arg0, %arg1)
Um subconjunto de compostos pode ser excluído dessa transformação usando o "exceto" por exemplo:
stablehlo-opt --stablehlo-legalize-composite-to-call=except='foo.baz,foo.qux'
Opções
-except : Names of composites that should not be replaced with calls.
-stablehlo-legalize-deprecated-ops
Legalize as operações descontinuadas para outras com suporte.
O RFC (#2283) das descontinuações de operações do StableHLO v1.0 propõe remover várias operações redundantes. Isso ajuda a avaliar o impacto remoções em vários pipelines de compilação legalizando-os para com suporte de longo prazo.
Opções
-fail-on-unused : Fail on (mostly) unused ops that are deprecated without any fallback.
-stablehlo-legalize-qdq-to-quantized-op
Fusir o padrão (desquantização, operação de ponto flutuante e quantização) na operação quantizada do StableHLO
Fundir (desquantizar, operação de ponto flutuante e quantizar) na operação quantizada StableHLO Observação: o cartão não exclui nenhuma operação atual. Por exemplo, o programa a seguir
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>>
}
Vai ser:
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
Converta de operações quantizadas de StableHLO em operações matemáticas primitivas de StableHLO.
Converter programas StableHLO usando tipos Uniformquantized para operações matemáticas de números inteiros equivalentes.
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>>
}
Vai ser:
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
Decompor a operação StableHLO quantizada para padrões de desquantização, operação de ponto flutuante e quantização.
Decompor programas quantizados StableHLO usando quantização/desquantização uniforme as operações. Por exemplo, o programa a seguir
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>>
}
Vai ser:
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
Legalize o StableHLO para VHLO.
-stablehlo-refine-arguments
Refina as formas do argumento da função principal.
Modifica os argumentos da função principal usando a assinatura do tipo de entrada. Encapsula argumentos em custom_call @stablehlo.shape_refinement_operando_wrapper para manter a IR válida antes que o refinamento da forma seja executado.
O refinedTypesOption
pode ser usado para especificar uma lista de tipos refinados.
Isso pode ser especificado no MLIR com --types='tensor<...>,tensor<...>'
ou
passados para o método de criação de cartão. A lista de tipos de refinamento deve especificar o
tipo de cada argumento para o método main
que está sendo refinado.
Opções
-types : The new types to be used for the main function's arguments, specified as an MLIR TypeRange 'tensor<1x2xf32>, ...'
-stablehlo-refine-shapes
Refina formas em um programa StableHLO.
Mostra um programa StableHLO refinando formas dentro das operações.
O principal caso de uso desse passe é especializado em modelos dinâmicos programas a formas estáticas. Se um programa StableHLO de forma dinâmica tiver a estrutura direita e, em seguida, atualizando seus tipos de argumento de formas dinâmicas para formas estáticas, e executar esta passagem propagará formas estáticas no programa.
-vhlo-legalize-to-stablehlo
Legalize o VHLO para o StableHLO.
-vhlo-to-version
Converta entre versões do VHLO.
Opções
-target : The target version. Must be a version of the form #.#.# or 'current'.