-chlo-legalize-to-stablehlo
Legaliza el flujo de operaciones de CHLO a StableHLO y las operaciones Shape.
-shape-legalize-to-stablehlo
Legaliza las operaciones relacionadas con formas en StableHLO.
Pase experimental que legaliza las operaciones relacionadas con formas para las operaciones de StableHLO
Unir cálculos de forma y datos a través de un pase opcional permitir que el ecosistema StableHLO aproveche canalizaciones de compilación que usan operaciones StableHLO para modelar el dinamismo.
-stablehlo-aggressive-folder
Operaciones de StableHLO de Fold
Opciones
-fold-float : Allow for potentially lossy computations using float type.
-stablehlo-aggressive-simplification
Canonicaliza las operaciones de StableHLO
-stablehlo-canonicalize-dynamism
Canonicaliza las operaciones dinámicas de StableHLO en operaciones estáticas.
Reemplaza las operaciones dinámicas de StableHLO, como DynamicReshapeOp, por las operaciones equivalentes estáticos como ReshapeOp si todos los elementos dinámicos de estas operaciones son en realidad constantes.
Por ejemplo, si el operando output_shape de DynamicReshapeOp es una constante valor, la operación se puede transformar en ReshapeOp.
-stablehlo-convert-to-signless
Pasa a la transformación del IR para que esté en números enteros sin signo.
-stablehlo-legalize-composite-to-call
Reemplaza las operaciones compuestas con una llamada a su descomposición.
Reemplaza las operaciones compuestas con una llamada a su descomposición, p.ej., lo siguiente:
stablehlo.composite "my_namespace.my_op" %arg0, %arg1 {
decomposition = @bar,
version = 1,
composite_attributes = {
"my_attribute": "my_value"
}
}
Será:
func.call @bar(%arg0, %arg1)
Se puede excluir un subconjunto de compuestos de esta transformación mediante la "excepto" marca, p.ej.:
stablehlo-opt --stablehlo-legalize-composite-to-call=except='foo.baz,foo.qux'
Opciones
-except : Names of composites that should not be replaced with calls.
-stablehlo-legalize-deprecated-ops
Legaliza las operaciones obsoletas en operaciones con mayor compatibilidad.
El RFC de bajas de conjunto de operaciones de StableHLO v1.0 (#2283) propone quitar varias operaciones redundantes. Este pase ayuda a evaluar el impacto de las operaciones de datos en varias canalizaciones de compilación a través de su legalización con el apoyo a largo plazo.
Opciones
-fail-on-unused : Fail on (mostly) unused ops that are deprecated without any fallback.
-stablehlo-legalize-qdq-to-quantized-op
Fusiona (descuantizar, operación de punto flotante y cuantización) en una operación cuantizada StableHLO
Fusiona (descuantización, operación de punto flotante y cuantización) en operación cuantizada StableHLO Nota: El pase no borra ninguna operación preexistente. Por ejemplo, el siguiente programa
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>>
}
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
Convierte operaciones cuantizadas de StableHLO en operaciones matemáticas primitivas de StableHLO.
Convertir programas StableHLO con tipos UniformQuantized a semánticamente operaciones matemáticas con números enteros 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>>
}
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
Desglosar la operación StableHLO cuantificada según el patrón (descuantizar, operación de punto flotante y cuantización).
Desglosar programas cuantificados de StableHLO mediante cuantización/decuantización uniforme las operaciones. Por ejemplo, el siguiente programa
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>>
}
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
Legaliza StableHLO a VHLO
-stablehlo-refine-arguments
Define mejor las formas de argumentos de la función principal.
Modifica los argumentos de la función principal con la firma de tipo de entrada. Une argumentos en custom_call @stablehlo.shape_refinement_operand_wrapper para que el IR sea válido antes de ejecutar el refinamiento de la forma.
Se puede usar refinedTypesOption
para especificar una lista de tipos mejor definidos.
Esto se puede especificar en MLIR con --types='tensor<...>,tensor<...>'
, o
y se pasan al método de creación de pases. La lista de tipos de perfeccionamiento debe especificar
tipo de cada argumento para el método main
que se definirá mejor.
Opciones
-types : The new types to be used for the main function's arguments, specified as an MLIR TypeRange 'tensor<1x2xf32>, ...'
-stablehlo-refine-shapes
Define mejor las formas en el programa StableHLO.
Se explica un programa de StableHLO que define mejor las formas en las operaciones.
El caso de uso insignia de este pase se especializa en diseñar dinámicamente programas a formas estáticas. Si un programa StableHLO de forma dinámica tiene la la estructura correcta y, luego, actualiza los tipos de argumentos de formas dinámicas a formas estáticas y, al ejecutar este pase, se propagarán las formas estáticas en el programa.
-vhlo-legalize-to-stablehlo
Legaliza VHLO a StableHLO
-vhlo-to-version
Convierte entre versiones de VHLO.
Opciones
-target : The target version. Must be a version of the form #.#.# or 'current'.