-sdy-add-data-flow-edges

Inserisce DataFlowEdgeOp per ogni bordo del flusso di dati.

Inserisce DataFlowEdgeOp per ogni valore che è proprietario di un angolo del flusso di dati, ovvero tutti i valori restituiti da getDataFlowEdgeOwners in ogni op nel modulo.

Il valore DataFlowEdgeOp inserito assumerà lo sharding esistente del proprietario target, se esistente.

-sdy-apply-sharding-constraints

Applica vincoli che determinano lo sharding dei dati in input.

Copia lo sharding di un ShardingConstraintOp al suo input se soddisfa tutte le seguenti condizioni:

  • L'input non ha uno sharding esistente.
  • La suddivisione in parti di ShardingConstraintOp è completamente chiusa.
  • L'input non ha altri utenti di tipo ShardingConstraintOp o ManualComputationOp con un'organizzazione in partizioni diversa.

Queste condizioni indicano che ShardingConstraintOp determina lo sharding del suo input.

Se l'input è prodotto da un DataFlowEdgeOp, anziché impostare lo sharding dell'operazione, sostituiamo tutti gli utilizzi di input con ShardingConstraintOp per evitare di limitare lo sharding di tutti i target dell'edge.

Tieni presente che lo sharding di un ShardingConstraintOp verrà propagato ai relativi input o utenti durante la propagazione, indipendentemente da questo passaggio, ma poiché la proprietà chiusa di una dimensione non si propaga, è importante copiare lo sharding per rispettare completamente il vincolo nei casi precedenti.

Inoltre, se un tensore viene utilizzato da una catena di ShardingConstraintOp chesoddisfano tutte le seguenti condizioni:

  • Il tensore non è prodotto da un ShardingConstraintOp e non ha altri utenti di tipo ShardingConstraintOp o ManualComputationOp.
  • Nessuno dei ShardingConstraintOp della catena ha più di un utilizzo tranne l'ultimo.
  • L'ultimo ShardingConstraintOp della catena non ha utenti di tipo ShardingConstraintOp o ManualComputationOp (altrimenti non è l'ultimo della catena);

in questo caso, questo passaggio sostituisce tutti gli altri utilizzi dell'input della catena, definiti dopo l'ultimo ShardingConstraintOp della catena (e all'interno dello stesso blocco), con il risultato della catena, in quanto dovrebbe dettare lo sharding di questi utilizzi.

-sdy-constant-splitter

Suddivide i sottocalcoli costanti in modo che ciascuno abbia un solo utilizzo.

Suddivide i sottocalcoli costanti in modo che abbiano un unico utente.

In questo modo, lo sharding non viene propagato tra usi diversi di un calcolo parziale costante, in quanto si tratta di una falsa dipendenza (gli utilizzi di una costante non devono essere suddivisi nello stesso modo solo perché utilizzano la stessa costante). In effetti, ogni utilizzo può avere un'organizzazione in parti diverse che può propagarsi in modo isolato alla propria copia del sottocalcolo costante.

Un sottocalcolo costante è:

  • un operatore costante o iota (senza operandi)
  • un'operazione di trasmissione, di taglio o puramente elemento per elemento, i cui operandi sono tutti definiti da sottocalcoli costanti (in modo ricorsivo), insieme a tutti i sottocalcoli che definiscono i suoi operandi.

Tieni presente che all'interno di un sottocalcolo costante, un valore può avere più utilizzi all'interno di quel sottocalcolo.

-sdy-lift-inlined-meshes

Eleva i MeshAttr in linea nei sharding come simboli MeshOp.

Sostituisce qualsiasi MeshAttr in linea in un TensorShardingAttr con un nome del simbolo della maglia, facendo riferimento a un MeshOp esistente o nuovo nel modulo, in modo che nessun MeshOp abbia un MeshAttr identico (anche i MeshOp esistenti vengono deduplicati).

Il nome di ogni nuovo MeshOp sarà:

  • maximal_mesh_{device-id} per una mesh massima (ad es. un elenco di assi vuoto e un singolo ID dispositivo) oppure
  • Il primo nome disponibile in [mesh, mesh_0, mesh_1, ...].

-sdy-manual-axes-cleanup

Elimina l'utilizzo degli assi manuali nei ManualComputationOp

  1. Per qualsiasi suddivisione in/out per cui non è stato specificato un asse manuale, aggiungi questo asse manuale a replicated_axes. In questo modo, gli assi manuali sono sempre completamente specificati.
  2. Ordina gli assi manuali nell'ordine di dichiarazione dell'asse del mesh.

-sdy-sharding-group-import

Passaggio di convalida e canonizzazione per i gruppi di sharding.

Applica la canonizzazione e la convalida ai gruppi di sharding al momento dell'importazione. ovvero:

  1. Unificazione dei gruppi di shard

    Combina i gruppi di sharding utilizzando la proprietà transitiva dell'appartenenza al gruppo. Ogni volta che un tensore T si trova in un gruppo di suddivisione G1 e in un gruppo di suddivisione G2, possiamo dedurre che tutti i membri di G1 e G2 devono essere suddivisi nello stesso modo. Pertanto, possiamo combinare G1 e G2 in un unico gruppo. L'insieme di ID gruppo canonici dopo l'unione sarà 0,1,...N-1 per l'insieme minimo di gruppi.

  2. Convalida del gruppo di suddivisione

    Verifica che i gruppi di sharding siano ben formattati e conformi alle ipotesi all'interno dell'implementazione. Al momento, viene affermato che se un gruppo di suddivisione contiene un Value definito all'interno del blocco di un ManualComputationOp, tutti gli altri valori del gruppo devono trovarsi nello stesso blocco.