-sdy-close-shardings

Cierra las fragmentaciones de tensores y quita los ejes replicados.

-sdy-constant-or-scalar-merger

Combina constantes idénticas y expansiones escalares con fragmentaciones coincidentes.

Realiza una CSE ligera en constantes con fragmentaciones idénticas.

La canalización de importación divide y duplica las constantes y las expansiones escalares de modo que la fragmentación no se propague entre los diferentes usos de una subcomputación constante. Si las constantes tienen las mismas fragmentaciones después de la propagación, este paso las combina para ahorrar tiempo de compilación. Consulta -sdy-constant-or-scalar-splitter para obtener más información.

-sdy-convert-global-to-local

Convierte un programa SDY de formas globales a formas locales.

Convierte un programa SDY de formas globales a formas locales mediante la partición de dimensiones lógicas en función de los atributos de fragmentación.

Este paso aprovecha un convertidor de tipos para asignar RankedTensorType de formas lógicas globales a formas físicas locales del dispositivo.

Opciones

-per-dim-all-gather                     : Keep per-dimension all-gather without combining them into a single all-gather.
-combine-multi-dimension-reduce-scatter : Combine multi-dimension reduce-scatter into a single reduce-scatter.
-enable-rgv3                            : Use StableHLO ReplicaGroupV3 (mesh-axes based) for collectives.
-replica-count                          : Number of replicas (data parallelism).
-partition-count                        : Number of partitions (model parallelism).

-sdy-drop-sharding-and-mesh

Quita la operación de malla y la notación de fragmentación del programa.

-sdy-drop-sharding-rules

Quita OpShardingRuleAttr de todas las operaciones registradas.

-sdy-export-named-computations

Describe las llamadas de NamedComputationOp.

Crea un paso que convierte un NamedComputationOp en un CallOp con una nueva función privada llamada name de NamedComputationOp. El nuevo FuncOp y CallOp tienen las mismas fragmentaciones que los operandos o resultados originales de NamedComputationOp.

Si hay una función con el mismo nombre que NamedComputationOp en el módulo, la tabla de símbolos MLIR la cambiará a {name}_#.

-sdy-insert-explicit-reshards

Inserta fragmentaciones explícitas para que todas las operaciones tengan fragmentaciones compatibles.

Una fragmentación compatible significa que la operación puede aceptar los operandos fragmentados y producir un resultado fragmentado sin requerir ninguna comunicación de refragmentación (ten en cuenta que la operación aún puede requerir comunicación, como all-reduce o halo-swaps).

Después de la propagación, es posible que algunas operaciones aún tengan fragmentaciones incompatibles.

Ten en cuenta que, cuando se usa un eje (o subeje) para fragmentar dimensiones no correspondientes (p.ej., dimensiones no contractivas en matmul) en varios tensores, o cuando un eje fragmenta una dimensión en un tensor, pero no la dimensión correspondiente en el otro tensor, se dice que la operación tiene un conflicto de fragmentación. Por lo tanto, después de este paso, las operaciones ya no tienen conflictos.

Este paso inserta operaciones de refragmentación de forma explícita para que, en cada operación, las dimensiones correspondientes se fragmenten de la misma manera en todos los operandos y resultados, y cada eje (o subeje) solo se pueda usar para fragmentar un solo tipo de dimensión.

Ejemplo:

Entrada:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

Resultado:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

En el ejemplo anterior, lhs y rhs se fragmentan en el eje "x" en sus dimensiones no contractivas, lo que es incompatible. El paso inserta una refragmentación explícita en rhs antes de la operación de punto, de modo que la operación de punto tenga fragmentaciones compatibles.

Opciones

-enable-full-version : Enable full version.

-sdy-insert-func-call-reshards

Inserta fragmentaciones para conflictos de fragmentación de funciones y llamadas.

Inserta fragmentaciones para conflictos de fragmentación de funciones y llamadas en los resultados.

-sdy-optimize-collectives

Optimiza las operaciones de comunicación colectiva.

Elimina las operaciones colectivas-permute redundantes que preceden a las cadenas all-to-all mediante la descomposición de las dimensiones divididas y la fusión en un all-to-all combinado.

-sdy-pad-for-divisibility

Rellena tensores con fragmentaciones no divisibles a formas divisibles.

-sdy-per-instruction-partitioning

Extrae de forma selectiva las instrucciones de destino, ejecuta la canalización de particionador en ellas para generar código local del dispositivo y las encapsula en sdy.manualcomputation.

Para fines de depuración y bisección, particiona de forma selectiva instrucciones individuales con la canalización de particionador Shardy independiente (resolve-permutation-factors, reshard-to-collectives, pad-for-divisibility, convert-global-to-local) y encapsula el código local del dispositivo resultante dentro de sdy.manual_computation. Esto mantiene intacto el resto del programa global, por lo que XLA SPMD solo particiona las instrucciones globales no encapsuladas.

Opciones

-filter               : Filter string for selective partitioning. Can be empty (all sharded ops), comma-separated op name substrings (e.g. 'dot, pad'), or key-values like 'selectLow=0, selectHigh=10'.
-enable-halo-exchange : Implement halo exchange logic for windowed operations inside the sub-pipeline.
-replica-count        : Number of replicas (data parallelism).
-partition-count      : Number of partitions (model parallelism).

-sdy-propagate-to-func-results

Propaga las fragmentaciones del terminador de funciones a los resultados de las funciones.

Copia las fragmentaciones de los valores del terminador de funciones a los resultados func.func correspondientes, lo que conserva las fragmentaciones existentes en la función principal.

-sdy-remove-all-gather-reduce-scatter-for-cmv1

_Quita sdy.all_gather y sdy.reducescatter para CMV1.

Quita all-gather en el patrón all-gather + punto. Quita reduce-scatter en el patrón punto + reduce-scatter. Este paso es para la compatibilidad con matmul colectivo V1 (CMV1). Es una solución temporal para b/432019089.

-sdy-remove-propagation-debug-info

Quita la información de depuración de propagación (bordes de propagación y fragmentaciones de origen) durante la exportación.

-sdy-remove-sharding-groups

Quita ShardingGroupOps después de la propagación.

-sdy-remove-sub-axes-in-input-output-shardings

Quita los subejes en las fragmentaciones de entrada/salida.

Algunos usuarios de Shardy esperan que las entradas y salidas de la función tengan fragmentaciones sin subejes. Este paso quita los subejes y sus ejes finales de las fragmentaciones de dimensión abierta de entrada/salida. Por lo general, este paso se realiza después de sdy-update-non-divisible-input-output-shardings para garantizar que la eliminación de subejes no introduzca fragmentaciones no divisibles.

-sdy-reshard-to-collectives

Convierte ReshardOp en varias operaciones colectivas de Shardy.

Hace coincidir las operaciones de refragmentación y las reescribe en varias operaciones colectivas de Shardy. Después de este paso, no quedan operaciones de refragmentación en el módulo.

De manera opcional, si keepRedundantReshards es verdadero, las únicas operaciones de refragmentación que quedan son las redundantes. De forma predeterminada, se supone que ya se insertaron fragmentaciones explícitas (sdy-insert-explicit-reshards) y no conserva las fragmentaciones redundantes. Debe conservar las fragmentaciones redundantes si es posible que aún no se hayan insertado fragmentaciones explícitas.

Ejemplo:

Entrada:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

Resultado:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

En el ejemplo anterior, el tensor %0 : tensor<16x2xf32> se fragmenta como \[{"x", "y", "z"}, {}\]. Luego, hay una operación reshard que la refragmenta como \[{"x"}, {}\]. En los primeros ejes, como el sufijo {"y", "z"} se quita después de la refragmentación, inferimos que hemos recopilado {"y", "z"}. La segunda dimensión no se cambia.

Opciones

-keep-redundant-reshards : Whether it keeps redundant reshards or removes.

-sdy-resolve-permutation-factors

Resuelve la fragmentación en dimensiones asignadas a factores kPermutation.

Las dimensiones de fragmentación con factores kPermutation pueden requerir comunicación multidispositivo (p.ej., intercambio de halo para ventanas o permutaciones colectivas para reversas).

Si enableHaloExchange es verdadero, el paso usaría una lógica de comunicación optimizada disponible para resolver los factores de permutación. De lo contrario, el paso simplemente insertaría operaciones sdy.reshard para replicar esas dimensiones. El valor predeterminado de enableHaloExchange es verdadero.

Opciones

-enable-halo-exchange : Implement halo exchange logic for windowed operations.
-replica-count        : Number of replicas (data parallelism).
-partition-count      : Number of partitions (model parallelism).

-sdy-resolve-single-device-sharding

Reduce las operaciones de un solo dispositivo a stablehlo.if protegidas por el ID del dispositivo de destino.

Opciones

-replica-count   : Number of replicas per partition.
-partition-count : Number of partitions per replica.

-sdy-sharding-constraint-to-reshard

Convierte ShardingConstraintOp en ReshardOp.

-sdy-sink-data-flow-edges

Sincroniza todos los DataFlowEdgeOp en su entrada.

Mueve la fragmentación de cada DataFlowEdgeOp a su entrada (el destino raíz del borde) y reemplaza la operación con su entrada.

Opciones

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-sink-func-data-flow-edges

Sincroniza todos los FuncDataFlowEdgeOp en su entrada.

Mueve la fragmentación de cada FuncDataFlowEdgeOp a su entrada y reemplaza la operación con su entrada.

-sdy-unflatten-call-graph

Desacopla el gráfico de llamadas.

Desacopla el gráfico. Deduplica las funciones con las mismas fragmentaciones de entrada/salida y el mismo origen, como se describe en el atributo "original_func_name" adjunto a las funciones.

Opciones

-dedup-functions-fully : If true, regardless of the input and output shardings of functions, it keeps one callee function for each caller function. The default is false, meaning it will deduplicate only if the input and output shardings are the same.

-sdy-update-non-divisible-input-output-shardings

Hace que las entradas y salidas de FuncOp se fragmenten de manera uniforme, lo que elimina la necesidad de relleno debido a fragmentaciones no divisibles.

Los usuarios de Shardy esperan que las entradas y salidas de la función sean divisibles o fragmentables de manera uniforme para evitar tener que rellenar sus tensores. La propagación puede hacer que las entradas y salidas tengan fragmentaciones no divisibles, por lo que este paso las actualiza al prefijo de fragmentación de dimensión más grande de la fragmentación original que se fragmenta de manera uniforme.

-sdy-verify-unreduced-axes

Verifica la coherencia del uso de ejes no reducidos.

Verifica que, para cada operación, si sus operandos tienen ejes no reducidos, la operación los reduce de forma explícita (p.ej., a través de sdy.reshard) o los pasa a sus resultados (o es una operación de límite como func.call).