-mpmd-copy-topology-from-main
Copia la topologia dalla funzione principale alle funzioni a cui fa riferimento mpmd.call.
Copia l'attributo di topologia dalla funzione principale a qualsiasi funzione a cui fa riferimento un mpmd.call. Inoltre, imposta il destinatario di mpmd.call sulla visibilità privata per evitare che venga scambiato per una funzione di punto di ingresso.
-mpmd-enforce-input-output-equisharding
Applica i vincoli di equisharding per le funzioni MPMD.
Applica i vincoli di equisharding input-output per le funzioni MPMD introducendo TransferOps quando necessario.
Opzioni
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-generate-sdy-meshes-from-topology
Genera mesh frammentate in base alla topologia MPMD.
Questa passata genera e rimuove tutte le operazioni di mesh frammentate esistenti e le sostituisce con operazioni basate sulla topologia MPMD. Aggiorna anche le suddivisioni dei tensori in modo che facciano riferimento alle nuove operazioni mesh.
-mpmd-infer-mesh-assign-mesh-func-leaves
_Assegna una mesh a ogni calcolo, output della funzione e input della funzione inutilizzati utilizzando l'analisi di use_set e srcset.
Questa pass assegna mesh alle foglie del corpo della funzione (ovvero i risultati di calcoli inutilizzati, argomenti di funzione inutilizzati e output di funzione) creando AssignOp o modificando il tipo, utilizzando le informazioni use_set e src_set.
Inoltre, trattiamo determinati valori intermedi come foglie ai fini dell'analisi. Ovvero: gli operandi di mpmd.reduce e mpmd.broadcast sono considerati foglie e su di essi verrà creata una coppia di assegnazione/annullamento dell'assegnazione.
Questa assegnazione cancellerà l'insieme di utilizzi di tutte le operazioni non foglia, poiché gli utilizzi annotati in precedenza non saranno più aggiornati in quanto l'inferenza delle operazioni di riduzione cambierà l'insieme di utilizzi di alcuni valori: la propagazione iniziale dell'insieme di utilizzi non tiene conto delle operazioni di riduzione, ma ora che abbiamo dedotto le operazioni di riduzione, la propagazione sarà diversa.
Questo passaggio non andrà a buon fine e genererà errori se gli insiemi use e src non vengono compilati correttamente per le operazioni foglia.
Precondizione: ogni operazione ha un insieme di origini non vuoto oppure deduciamo i trasferimenti.
Opzioni
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-assign-using-input-output-constraints
Assegna una mesh agli input e agli output in base ai vincoli di assegnazione input-output.
Questa passata utilizza i vincoli di assegnazione equivalente input-output per assegnare sia l'input che l'output alla stessa mesh.
Tieni presente che questo garantisce che l'input si trovi sulla stessa mesh, indipendentemente dal fatto che venga successivamente trasferito ad altre mesh. Ciò significa che
non dobbiamo eseguire populate-src-set dopo questo passaggio.
Richiede:
- per qualsiasi input
idella funzione entry point che potrebbe far parte di un vincolo di assegnazione equa:iha un MeshTensorType OPPURE un insieme di utilizzo ben definito. - per qualsiasi output
odella funzione del punto di ingresso che potrebbe far parte di un vincolo di assegnazione equa:oha il tipo MeshTensorType OPPURE insiemi src e use ben definiti.
Dove un insieme di utilizzo ben definito di un valore include tutte le mesh a cui il valore è assegnato (in modo transitivo) tramite le operazioni mpmd.assign e nessun'altra mesh. Un insieme src-set ben definito include tutte le mesh in cui il tensore può risiedere e nessun'altra mesh.
Anche se viene eseguito solo sulle funzioni del punto di ingresso, lo consideriamo un'operazione del modulo
perché richiede il completamento di tutte le operazioni sulle funzioni esistenti
prima di essere eseguito. Ad esempio, se lo impostiamo su EntryPointFunctionPass, il
gestore delle password potrebbe eseguire questa password prima del completamento della convalida delle funzioni
non di punto di ingresso.
Opzioni
-verbose-logging : Whether to enable verbose logging
-constraints : A list of constraint, each enforcing that an input and output should be assigned to the same mesh.
-mpmd-infer-mesh-convert-reduce-ops
Converte le operazioni di riduzione annotate in operazioni di riduzione mpmd e appiattisce le catene di operazioni di riduzione.
Converte le operazioni di riduzione annotate in operazioni di riduzione mpmd e appiattisce anche le catene di queste operazioni di riduzione.
In simboli:
x = add(w0, w1) {mpmd.reduce = #mpmd.reduce
Opzioni
-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.
-mpmd-infer-mesh-finalize
Applica la pulizia finale dopo l'inferenza della mesh dei pattern.
Opzioni
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-mpmd-infer-mesh-populate-src-set
_Initializes the src_set for UnassignOps and func args and propagates the srcset.
Questo passaggio inizializza src_set e lo propaga, compilando il grafico con le informazioni di src_set.
Precondizione: affinché gli argomenti della funzione abbiano src_sets, use_set deve essere compilato.
Inizializzazione: src_set di un'operazione UnassignOp è impostato sul mesh a cui viene assegnato. src_set di un argomento func è impostato su use_set.
Propagazione: src_sets si propagano in avanti dagli operandi all'operazione stessa,
prendendo l'intersezione degli operandi. Per ulteriori dettagli, consulta PropagateSrcSet.
-mpmd-infer-mesh-populate-use-set
_Initializes the use_set for AssignOps and propagates the useset.
Questa passata inizializza use_set e lo propaga all'indietro, compilando il grafico con le informazioni di use_set.
Inizializzazione: use_set di un AssignOp è impostato sulla mesh a cui viene assegnato.
Propagazione: use_sets si propaga all'indietro dagli utenti all'operazione stessa, prendendo l'unione degli utenti. L'insieme di utilizzi di un'operazione è l'unione degli insiemi di utilizzi dei suoi utenti per definizione, poiché l'insieme di utilizzi è l'insieme degli utilizzi transitivi.
-mpmd-infer-mesh-rewrite-using-analysis
_Rewrites ops according to the useset.
Questa pass assegna le operazioni senza mesh racchiudendole in frammenti, utilizzando le analisi use_set e src_set.
Inoltre, rimuove gli attributi use_set e src_set nell'ambito della pulizia, poiché le analisi non sono più necessarie dopo questa operazione.
Precondizione: ogni operazione ha un use_set, ovvero l'analisi è completa. Precondizione: ogni argomento di una funzione non punto di ingresso viene utilizzato almeno da un'operazione non terminatore.
TODO: jupvfranco - consider renaming this pass given that it doesn't depend on the analysis so much anymore.
Opzioni
-max-clones : How many copies of a meshless operation we allow. Setting it to 1 means we never clone the op.
-mpmd-infer-mesh-validate-no-additional-transfers-needed
Verifica che non siano necessari trasferimenti aggiuntivi per l'assegnazione della mesh.
Questo passaggio convalida che l'assegnazione della mesh sia possibile per tutte le operazioni senza mesh senza introdurre ulteriori trasferimenti.
Per le operazioni senza mesh che non sono operazioni funzionali, si verifica un errore quando:
- use_set non è contenuto in src_set per una determinata operazione, ovvero è necessario un trasferimento.
Per le operazioni funzionali, è sufficiente controllare le condizioni sopra indicate per gli argomenti funzionali, poiché la funzione restituisce operazioni senza mesh o argomenti di blocco.
Opzioni
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-infer-mesh-validate-src-set-not-empty
_Verifica che ogni operazione senza mesh abbia un elemento srcnon vuoto.
Questo passaggio convalida tutte le operazioni senza mesh, verificando che l'operazione possa essere assegnata da qualche parte. ovvero per le operazioni senza mesh che non sono operazioni di funzione, si verifica un errore quando src_set è vuoto in un'operazione o se è stato dedotto che si tratta di una riduzione cross-mesh ma non viene convertito. Questo è un prerequisito per l'assegnazione delle ferie funzionali.
Per le operazioni funzionali, è sufficiente controllare le condizioni sopra indicate per gli argomenti funzionali, poiché la funzione restituisce operazioni senza mesh o argomenti di blocco.
Deve essere un passaggio a livello di modulo, poiché in caso di errore sul chiamante, vogliamo stampare i chiamanti.
Precondizione: le riduzioni cross-mesh devono essere convertite per ridurre le operazioni prima dell'esecuzione di questa passata.
Opzioni
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
_Incorpora qualsiasi operazione mpmd visibile all'utente nidificata in un'elaborazione denominata.
Incorpora qualsiasi operazione named_computation, named_tensor, broadcast e reduce nidificata in una named_computation, verificando che l'assegnazione della mesh (se definita) corrisponda a quella del genitore.
Opzioni
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-insert-nameless-clone-of-negligible-ops
Cloni di operazioni trascurabili al di fuori dei calcoli denominati.
Clona operazioni trascurabili, ovvero operazioni con un solo risultato e zero operandi, al di fuori dei calcoli denominati ogni volta che vengono utilizzati dall'operazione di ritorno del calcolo, sostituendo il risultato del calcolo denominato con il clone. Questo è necessario perché se questi risultati vengono utilizzati da calcoli denominati assegnati a mesh diverse, potrebbe verificarsi un conflitto di inferenza della mesh. Applicando questo passaggio, consentiamo all'inferenza mesh di clonare queste operazioni trascurabili.
Questa passata NON modifica in alcun modo il calcolo denominato.
-mpmd-introduce-transfers
Crea trasferimenti di dati in base alle assegnazioni della mesh utente.
Crea un pass che introduce le operazioni di trasferimento in base alle assegnazioni della mesh dell'utente. È incluso quanto segue:
- Inserisci UnassignOp nelle chiamate mpmd se il risultato di UnassignOp viene assegnato in un secondo momento al destinatario della chiamata.
- Sostituisce l'AssignOp di un UnassignOp con un TransferOp.
- Assegna l'aggiunta alla mesh di consumo e introduci un trasferimento se è presente un'aggiunta senza mesh tra i frammenti.
-mpmd-map-input-output-to-mesh
Assegna mesh agli input e all'output della funzione.
Crea una passata che mappa gli input/output della funzione alle mesh in base a un'assegnazione di mesh definita dall'utente.
Per gli argomenti di input, questo passaggio:
- Esegue il cast dei tensori di input che devono essere inseriti in una mesh in un tensore mesh.
- Aggiorna la firma della funzione.
- Aggiunge mpmd.unassign prima dell'utilizzo del tensore.
Per gli argomenti di output, questo passaggio aggiunge mpmd.assign prima che il tensore venga restituito e aggiorna la firma della funzione.
Requisiti: ogni indice di input/output è valido e ogni mesh mappata è una mesh valida nella topologia.
Opzioni
-input-assignment : Mapping between function input indices and assigned mesh names.E.g., '0@m0,1@m1' defines that input with index 0 will be assigned to mesh m0 and input with index 1 will be assigned to mesh m1.
-output-assignment : Mapping between function output indices and assigned mesh names.E.g., '0@m0,1@m1' defines that output with index 0 will be assigned to mesh m0 and output with index 1 will be assigned to mesh m1.
-mpmd-map-named-ops-to-mpmd-ops
Assegna mesh a operazioni definite dall'utente.
Crea un pass assegnando facoltativamente mpmd.named_tensor a
Assign(Unassign(%v)) (a seconda che esista una voce in assignment) e per
mappare ogni named_computation a una mesh, utilizzando una mappatura definita dall'utente tra
named_computations e nomi di mesh. Ciò significa sostituire ogni
named_computation con un Fragment e creare AssignOps per gli operandi
e UnassignOps per i risultati di questi Fragment. Il pattern Assign(Unassign(%v)) ora introdotto viene riscritto in Transfer(%v).
Dopo questo passaggio non esisteranno operazioni named_computation/named_tensor.
Requisiti: tutte le named_computations e i named_tensors devono trovarsi al livello superiore della funzione.
Opzioni
-assignment : Mapping between names (of computations and tensors) and mesh names, and optionally stage ids. E.g., 'n0@m0,n1@m1' defines that names n0 and n1 will be assigned to meshes m0 and m1, respectively. Alternatively 'n0@m0/0,n1@m1/1' means that these names are also assigned to the stages 0 and 1.
-mpmd-simplify-named-computations
Semplifica gli input e gli output delle operazioni di calcolo denominate.
Semplifica ogni calcolo denominato in modo indipendente. In particolare:
- rimuove i duplicati dai risultati e dai relativi valori restituiti;
- rimuove i duplicati degli operandi e dei relativi argomenti del blocco;
- rimuove i risultati il cui operando di ritorno corrispondente è un argomento di blocco dell'operazione;
- rimuove gli operandi il cui argomento di blocco corrispondente non ha più utilizzi (o non ne aveva nessuno fin dall'inizio); e
- rimuove i risultati inutilizzati.
- sostituisce il pattern
arg -> stablehlo.optimization_barrier -> returnall'interno di un calcolo denominato con il patternarg -> return, consentendo un'ulteriore semplificazione.
-mpmd-validate-named-ops-in-mpmd-func
Verifica che le operazioni con nome siano nidificate solo nelle funzioni mpmd.
Verifica che NamedComputationOp e NamedTensorOp siano nidificati solo in funzioni mpmd, ovvero funzioni con un attributo di topologia.