-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
oManualComputationOp
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 tipoShardingConstraintOp
oManualComputationOp
. - 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 tipoShardingConstraintOp
oManualComputationOp
(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
- 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.
- 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:
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.
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 unManualComputationOp
, todos los demás valores de ese grupo deben residir en el mismo bloque.