-mpmd-copy-topology-from-main
Copia la topología de la función principal a las funciones a las que se hace referencia en mpmd.call.
Copia el atributo de topología de la función principal a cualquier función a la que se haga referencia con un mpmd.call. Esto también establece el destinatario de la llamada de mpmd.call en visibilidad privada para evitar que se confunda con una función de punto de entrada.
-mpmd-enforce-input-output-equisharding
Aplica restricciones de distribución equitativa para las funciones de MPMD.
Aplica restricciones de equisharding de entrada y salida para las funciones de MPMD introduciendo TransferOps cuando sea necesario.
Opciones
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-generate-sdy-meshes-from-topology
Genera mallas fragmentadas basadas en la topología de MPMD.
Este paso genera y quita cualquier operación de malla fragmentada existente y las reemplaza por operaciones basadas en la topología de MPMD. También actualiza la fragmentación de tensores para hacer referencia a las nuevas operaciones de malla.
-mpmd-infer-mesh-assign-mesh-func-leaves
_Asigna una malla a cada cálculo, salida de función y entrada de función no utilizados con el análisis de use_set y srcset.
Este pase asigna mallas a las hojas del cuerpo de la función (es decir, los resultados de los cálculos no utilizados, los argumentos de la función no utilizados y los resultados de la función) creando AssignOps o cambiando el tipo, utilizando la información de use_set y src_set.
También tratamos ciertos valores intermedios como hojas para facilitar el análisis. Es decir, los operandos de un mpmd.reduce y un mpmd.broadcast se tratan como hojas, y se creará un par de asignación y anulación de asignación en ellos.
Esta asignación borrará el use_set de todas las operaciones que no sean hojas, ya que los usos anotados anteriormente estarán desactualizados, dado que la inferencia de las operaciones de reducción cambiará el use_set de algunos valores: la propagación inicial de use_set no conoce las operaciones de reducción, pero ahora que inferimos las operaciones de reducción, la propagación será diferente.
Este paso fallará y emitirá errores si los conjuntos de uso y de origen no se completan correctamente para las operaciones de hoja.
Condición previa: Cada operación tiene un conjunto de fuentes no vacío, o bien inferimos transferencias.
Opciones
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-assign-using-input-output-constraints
Asigna una malla a las entradas y salidas según las restricciones de asignación de entrada-salida.
Este paso usa las restricciones de equi-asignación de entrada y salida para asignar la entrada y la salida a la misma malla.
Ten en cuenta que esto garantiza que la entrada esté en la misma malla, independientemente de si se transfiere posteriormente a otras mallas. Pero esto significa que no deberíamos ejecutar populate-src-set después de este pase.
Requisitos:
- Para cualquier entrada
ide la función de punto de entrada que pueda formar parte de una restricción de asignación equitativa,itiene un MeshTensorType O un conjunto de uso bien definido. - Para cualquier salida
ode la función de punto de entrada que pueda formar parte de una restricción de asignación equitativa,otiene el tipo MeshTensorType O conjuntos de uso y src bien definidos.
Aquí, un conjunto de uso bien definido de un valor incluye todas las mallas a las que se asigna (de forma transitiva) el valor, a través de las operaciones mpmd.assign y ninguna otra malla. Un conjunto src bien definido incluye todas las mallas en las que se permite que resida el tensor y ninguna otra malla.
Aunque esto solo se ejecuta en las funciones de punto de entrada, lo convertimos en un paso de operación del módulo porque requiere que se completen todos los pasos en las funciones existentes antes de ejecutarse. Por ejemplo, si hacemos que esto sea un EntryPointFunctionPass, el administrador de pases podría ejecutar este pase antes de que se complete la validación en las funciones que no son de punto de entrada.
Opciones
-verbose-logging : Whether to enable verbose logging
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-infer-mesh-convert-reduce-ops
Convierte las operaciones de reducción anotadas en operaciones de reducción de mpmd y aplana las cadenas de operaciones de reducción.
Convierte las operaciones de reducción anotadas en operaciones de reducción de mpmd y también aplana las cadenas de estas operaciones de reducción.
En símbolos:
x = add(w0, w1) {mpmd.reduce = #mpmd.reduce
Opciones
-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.
-mpmd-infer-mesh-finalize
Aplica la limpieza final después de la inferencia de la malla de patrones.
Opciones
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-mpmd-infer-mesh-populate-src-set
_Inicializa el src_set para UnassignOps y los argumentos de func, y propaga el srcset.
Este paso inicializa el src_set y lo propaga, y completa el gráfico con la información de src_set.
Condición previa: Para que los argumentos de la función tengan src_sets, se debe completar use_set.
Inicialización: El src_set de un UnassignOp se establece en la malla a la que se asigna. El src_set de un arg de func se establece en su use_set.
Propagación: Los src_sets se propagan hacia adelante desde los operandos hasta la operación en sí, tomando la intersección de los operandos. Consulta PropagateSrcSet para obtener información.
-mpmd-infer-mesh-populate-use-set
_Inicializa el use_set para AssignOps y propaga el useset.
Este paso inicializa el use_set y lo propaga hacia atrás, lo que propaga el gráfico con la información de use_set.
Inicialización: El use_set de un AssignOp se establece en la malla a la que se asigna.
Propagación: Los use_sets se propagan hacia atrás, desde los usuarios hasta la operación en sí, y se toma la unión de los usuarios. Por definición, el use_set de un op es la unión de los use_sets de sus usuarios, ya que el use_set es el conjunto de usos transitivos.
-mpmd-infer-mesh-rewrite-using-analysis
_Reescribe las operaciones según el conjunto de uso.
Este paso asigna operaciones sin malla envolviéndolas en fragmentos, con los análisis use_set y src_set.
También quita los atributos use_set y src_set como parte de la limpieza, ya que los análisis ya no son necesarios después de esto.
Condición previa: Cada operación tiene un conjunto de uso, es decir, el análisis está completo. Condición previa: Cada argumento de una función que no es un punto de entrada se usa al menos en una operación que no es un terminador.
TODO: jupvfranco - consider renaming this pass given that it doesn't depend on the analysis so much anymore.
Opciones
-max-clones : How many copies of a meshless operation we allow. Setting it to 1 means we never clone the op.
-mpmd-infer-mesh-validate-no-additional-transfers-needed
Valida que no se necesiten transferencias adicionales para la asignación de malla.
Este paso valida que la asignación de malla sea posible para todas las operaciones sin malla sin introducir transferencias adicionales.
En el caso de las operaciones sin malla que no son operaciones de función, se produce un error en los siguientes casos:
- use_set no se incluye en src_set para una operación determinada, es decir, se necesita una transferencia.
En el caso de las operaciones de funciones, basta con verificar las condiciones anteriores para los argumentos de funciones, ya que la función devuelve operaciones sin malla o argumentos de bloque.
Opciones
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-validate-src-set-not-empty
_Valida que cada operación sin malla tenga un conjunto src no vacío.
Este pase valida todas las operaciones sin malla y verifica que la operación se pueda asignar en algún lugar. Es decir, para las operaciones sin malla que no son operaciones de función, se produce un error cuando src_set está vacío en una operación o si se infirió que era una reducción entre mallas, pero no se convirtió. Este es un requisito previo para la asignación de hojas de función.
En el caso de las operaciones de funciones, basta con verificar las condiciones anteriores para los argumentos de funciones, ya que la función devuelve operaciones sin malla o argumentos de bloque.
Esta debe ser una aprobación a nivel del módulo, ya que, en el caso de un error en el llamador, queremos imprimir los llamadores.
Condición previa: Las reducciones entre mallas deben convertirse en operaciones de reducción antes de que se ejecute este paso.
Opciones
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
_Inserta en línea cualquier operación de mpmd expuesta al usuario que esté anidada en unacomputación con nombre.
Inserta en línea cualquier named_computation, named_tensor, broadcast y reduce op que esté anidado en un named_computation, y verifica que su asignación de malla (cuando se define) coincida con la del elemento superior.
Opciones
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-insert-nameless-clone-of-negligible-ops
Clona operaciones insignificantes fuera de los cálculos con nombre.
Clona operaciones insignificantes, es decir, operaciones de un solo resultado y cero operandos, fuera de los cálculos con nombre siempre que los use la operación de devolución del cálculo, y reemplaza el resultado de named_computation por el clon. Esto es necesario porque, si los cálculos con nombre asignados a diferentes mallas usan esos resultados, podría producirse un conflicto de inferencia de malla. Al aplicar este paso, permitimos que la inferencia de la malla clone estas operaciones insignificantes.
Este paso NO cambia en absoluto el cálculo con nombre.
-mpmd-introduce-transfers
Crea transferencias de datos según las asignaciones de malla del usuario.
Crea un pase que introduce operaciones de transferencia basadas en las asignaciones de malla del usuario. Esto incluye lo siguiente:
- Envía UnassignOp a las llamadas de mpmd si el resultado de UnassignOp se asigna más adelante en el destinatario de la llamada.
- Reemplaza el AssignOp de un UnassignOp por un TransferOp.
- Asigna la adición a la malla de consumo y presenta una transferencia si hay una adición sin malla entre fragmentos.
-mpmd-map-input-output-to-mesh
Asigna mallas a las entradas y salidas de la función.
Crea un pase que asigna entradas y salidas de funciones a mallas, dada una asignación de mallas definida por el usuario.
Para los argumentos de entrada, este paso hace lo siguiente:
- Convierte los tensores de entrada que se deben colocar en una malla en un tensor de malla.
- Actualiza la firma de la función.
- Agrega mpmd.unassign antes de que se use el tensor.
Para los argumentos de salida, este paso agrega mpmd.assign antes de que se muestre el tensor y actualiza la firma de la función.
Requisitos: Cada índice de entrada o salida es válido, y cada malla asignada es una malla válida en la topología.
Opciones
-input-assignment : Mapping between function input indices and assigned mesh names.E.g., '0@m0,1@m1' defines that input with index 0 will be assigned to mesh m0 and input with index 1 will be assigned to mesh m1.
-output-assignment : Mapping between function output indices and assigned mesh names.E.g., '0@m0,1@m1' defines that output with index 0 will be assigned to mesh m0 and output with index 1 will be assigned to mesh m1.
-mpmd-map-named-ops-to-mpmd-ops
Asigna mallas a operaciones definidas por el usuario.
Crea un pase y, de forma opcional, asigna mpmd.named_tensor a Assign(Unassign(%v)) (depende de si hay una entrada en assignment) y asigna cada named_computation a una malla, con una asignación definida por el usuario entre named_computations y nombres de malla. Esto significa reemplazar cada named_computation por un Fragment y crear AssignOps para los operandos y UnassignOps para los resultados de estos Fragments. El patrón Assign(Unassign(%v)) que se acaba de introducir se reescribe como Transfer(%v).
Después de este paso, no habrá operaciones de named_computation ni de named_tensor.
Requiere que todos los named_computations y named_tensors se encuentren en el nivel superior de la función.
Opciones
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-simplify-named-computations
Simplifica las entradas y salidas de las operaciones de procesamiento con nombre.
Simplifica cada cálculo con nombre de forma independiente. En particular, hace lo siguiente:
- Elimina los resultados duplicados y sus valores de devolución correspondientes.
- Elimina los operandos duplicados y sus argumentos de bloque correspondientes.
- Quita los resultados cuyo operando de devolución correspondiente es un argumento de bloque de la operación.
- Quita los operandos cuyo argumento de bloque correspondiente ya no se usa (o no se usó desde el principio).
- Quita los resultados que no se usan.
- Reemplaza el patrón
arg -> stablehlo.optimization_barrier -> returndentro de un cálculo con nombre por el patrónarg -> return, lo que permite una mayor simplificación.
-mpmd-validate-named-ops-in-mpmd-func
Valida que las operaciones con nombre solo estén anidadas en funciones de mpmd.
Valida que NamedComputationOp y NamedTensorOp solo estén anidados en funciones de mpmd, es decir, funciones con un atributo de topología.