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

TODO(b/330339693): aggiorna questo documento quando getDataFlowEdgeOwners viene rimosso.

-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.
  • L'input non è prodotto da un DataFlowEdgeOp, che gestisce lo sharding di tutti i target dell'edge.
  • La suddivisione in parti del ShardingConstraintOp è completamente chiusa.
  • L'input non ha altri utenti di tipo ShardingConstraintOp o ManualComputationOp con uno sharding diverso.

Il che indica che ShardingConstraintOp determina lo sharding del suo input.

Tieni presente che lo sharding di un ShardingConstraintOp verrà propagato ai suoi 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 che soddisfa tutte le seguenti caratteristiche:

  • 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 deve dettare lo sharding di questi utilizzi.

-sdy-constant-splitter

Ripartisce i calcoli secondari costanti in modo che ognuno abbia un singolo 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 broadcast, sezione o pura a livello di 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 il nome di un simbolo della maglia, facendo riferimento a un MeshOp esistente o nuovo nel modulo, in modo che non esistano due MeshOp con un MeshAttr identico (anche i MeshOp esistenti vengono deduplicati).

Il nome di ogni nuovo MeshOp sarà:

  • maximal_mesh_{device-id} per una mesh massima (ovvero un elenco di assi vuoto e un singolo ID dispositivo).
  • Il primo nome disponibile in [mesh, mesh_0, mesh_1, ...], altrimenti. ### -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. Questo serve a garantire che gli assi manuali siano 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 shard utilizzando la proprietà transitiva dell'appartenenza al gruppo. Ogni volta che un tensore T si trova in un gruppo di shard G1 e in un gruppo di shard 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 dei gruppi di sharding convalida che i gruppi di sharding siano formati correttamente e siano 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.