-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
oManualComputationOp
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 tipoShardingConstraintOp
oManualComputationOp
. - Nessuno dei
ShardingConstraintOp
della catena ha più di un utilizzo, tranne l'ultimo. - L'ultimo
ShardingConstraintOp
della catena non ha utenti di tipoShardingConstraintOp
oManualComputationOp
(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.