-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á el fragmentación existente del objetivo del propietario si existe.

-sdy-apply-sharding-constraints

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

Copia el fragmentación de un ShardingConstraintOp a su entrada si cumple con todos los siguientes requisitos:

  • La entrada no tiene un fragmento existente.
  • La fragmentación de ShardingConstraintOp está completamente cerrada.
  • La entrada no tiene otros usuarios de tipo ShardingConstraintOp o ManualComputationOp con un fragmento diferente.

Estas condiciones indican que ShardingConstraintOp dicta el fragmento de su entrada.

Si una DataFlowEdgeOp produce la entrada, en lugar de establecer el fragmento de la operación, reemplazamos todos los usos de input por ShardingConstraintOp para evitar restringir el fragmento de todos los destinos del borde.

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 usa un tensor que cumple con todos los siguientes requisitos:

  • 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).

entonces 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 debe dictar la fragmentación de esos usos.

-sdy-constant-splitter

Divide las subcomparaciones constantes para que cada una tenga un solo uso.

Divide las subcomputacións 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 un fragmento diferente que se puede propagar de forma independiente a su propia copia del subcálculo 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 por un nombre de símbolo de malla que hace referencia a un MeshOp existente o nuevo en el módulo, de modo que no haya dos MeshOp con un MeshAttr idéntico (los MeshOp existentes también se eliminan).

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, …].

-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 garantiza que los ejes manuales siempre se especifiquen por completo.
  2. Ordena los ejes manuales en el orden de declaración de ejes 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 grupos de fragmentación con la propiedad transitiva de membresía del grupo. Cada vez que un tensor T está en un grupo de fragmentación G1 y en un grupo de fragmentación G2, podemos inferir que todos los miembros de 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

    Valida que los grupos de fragmentación estén bien formados y cumplan con las suposiciones dentro 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.