-sdy-add-data-flow-edges

Inserta DataFlowEdgeOp para cada borde de flujo de datos.

Inserta DataFlowEdgeOp para cada valor que sea propietario de un borde de flujo de datos, es decir, todos los valores que muestra getDataFlowEdgeOwners en cada operación del módulo.

El DataFlowEdgeOp insertado tomará la fragmentación existente del destino del propietario, si existe.

TODO(b/330339693): Actualiza este documento cuando se quite getDataFlowEdgeOwners.

-sdy-apply-sharding-constraints

Aplica restricciones que dictan la fragmentación de su entrada.

Copia la fragmentación de una ShardingConstraintOp en su entrada si cumple con los siguientes requisitos:

  • La entrada no tiene una fragmentación existente.
  • Un DataFlowEdgeOp no produce la entrada, que contiene el fragmentación de todos los destinos del borde.
  • La fragmentación de ShardingConstraintOp está completamente cerrada.
  • La entrada no tiene otros usuarios de tipo ShardingConstraintOp o ManualComputationOp con un fragmento diferente.

Lo que indica que el ShardingConstraintOp dicta el fragmentación de su entrada.

Ten en cuenta que la fragmentación de un ShardingConstraintOp se propagará a su entrada o a los usuarios durante la propagación, independientemente de este pase, pero como la propiedad cerrada de una dimensión no se propaga, es importante copiar la fragmentación para respetar por completo la restricción en los casos anteriores.

Además, si una cadena de ShardingConstraintOp que cumple con todos los siguientes requisitos usa un tensor:

  • Un ShardingConstraintOp no produce el tensor y no tiene ningún otro usuario de tipo ShardingConstraintOp o ManualComputationOp.
  • Ninguno de los ShardingConstraintOp de la cadena tiene más de un uso, excepto el último.
  • El último ShardingConstraintOp de la cadena no tiene ningún usuario de tipo ShardingConstraintOp o ManualComputationOp (de lo contrario, no es el último de la cadena).

Luego, este pase reemplaza todos los demás usos de la entrada de la cadena, que se definen después del último ShardingConstraintOp de la cadena (y dentro del mismo bloque), con el resultado de la cadena, ya que debería dictar la fragmentación de esos usos.

-sdy-constant-splitter

Divide los cálculos secundarios constantes para que cada uno tenga un solo uso.

Divide los subcálculos constantes de modo que tengan un solo usuario.

Esto garantiza que no se propague un fragmento entre diferentes usos de un subcálculo constante, ya que se considera una dependencia falsa (los usos de una constante no deben fragmentarse de la misma manera solo porque usan la misma constante). De hecho, cada uso puede tener una fragmentación diferente que se puede propagar de forma aislada a su propia copia del subprocesamiento constante.

Una subcomputación constante puede ser una de las siguientes:

  • una operación iota o constante (sin operandos)
  • una operación de transmisión, división o elemento puro, cuyos operandos se definen por subcálculos constantes (de forma recursiva), junto con todas las subcálculos que definen sus operandos.

Ten en cuenta que, dentro de una subcomputación constante, un valor puede tener varios usos dentro de esa subcomputación.

-sdy-lift-inlined-meshes

Eleva los MeshAttr intercalados en los fragmentos como MeshOp de símbolos.

Reemplaza cualquier MeshAttr intercalado en un TensorShardingAttr con un nombre de símbolo de malla, que hace referencia a un MeshOp existente o nuevo del módulo, de modo que no haya dos MeshOp con un MeshAttr idéntico (también se eliminan los duplicados de los MeshOp existentes).

El nombre de cada MeshOp nuevo será uno de los siguientes:

  • maximal_mesh_{device-id}, para una malla máxima (es decir, una lista de ejes vacía y un solo ID de dispositivo)
  • El primer nombre disponible en [mesh, mesh_0, mesh_1, …], de lo contrario. ### -sdy-manual-axes-cleanup

Limpia el uso de ejes manuales en ManualComputationOp

1) Para cualquier fragmentación de entrada o salida que no haya especificado un eje manual, agrega ese eje manual a sus ejes replicados. Esto se hace para garantizar que los ejes manuales siempre se especifiquen por completo.

2) Ordena los ejes manuales en el orden de declaración del eje de malla.

-sdy-sharding-group-import

Pasa la canonización y la validación para los grupos de fragmentación.

Aplica la canonización y la validación a los grupos de fragmentación durante la importación. Estos son los siguientes:

1) Unificación de grupos de fragmentación: Combina los grupos de fragmentación con la propiedad transitiva de la membresía del grupo. Cada vez que un tensor T está en un grupo de fragmentación G1 y en el grupo de fragmentación G2, podemos inferir que todos los miembros en G1 y G2 deben fragmentarse de la misma manera. Por lo tanto, podemos combinar G1 y G2 en un solo grupo. El conjunto de IDs de grupo canónicos después de la combinación será 0,1,…,N-1 para el conjunto mínimo de grupos.

2) Validación de grupos de fragmentación: Verifica que los grupos de fragmentación estén bien formados y cumplan con las suposiciones de la implementación. Actualmente, se afirma que, si un grupo de fragmentación contiene un Value definido dentro del bloque de un ManualComputationOp, todos los demás valores de ese grupo deben residir en el mismo bloque.