-sdy-close-shardings

Chiude le suddivisioni dei tensori ed elimina gli assi replicati.

-sdy-constant-or-scalar-merger

Unisce le costanti identiche e le espansioni scalari con suddivisioni corrispondenti.

Esegue una CSE leggera sulle costanti con suddivisioni identiche.

La pipeline di importazione suddivide e duplica le costanti e le espansioni scalari in modo che la suddivisione non venga propagata tra i diversi utilizzi di un sottocalcolo costante. Se le costanti hanno le stesse suddivisioni dopo la propagazione, questo passaggio le unisce per ridurre il tempo di compilazione. Per ulteriori informazioni, consulta -sdy-constant-or-scalar-splitter.

-sdy-convert-global-to-local

Converte un programma SDY da forme globali a forme locali.

Converte un programma SDY da forme globali a forme locali partizionando le dimensioni logiche in base agli attributi di suddivisione.

Questo passaggio utilizza un convertitore di tipi per mappare RankedTensorType da forme logiche globali a forme fisiche locali del dispositivo.

Opzioni

-per-dim-all-gather                     : Keep per-dimension all-gather without combining them into a single all-gather.
-combine-multi-dimension-reduce-scatter : Combine multi-dimension reduce-scatter into a single reduce-scatter.
-enable-rgv3                            : Use StableHLO ReplicaGroupV3 (mesh-axes based) for collectives.
-replica-count                          : Number of replicas (data parallelism).
-partition-count                        : Number of partitions (model parallelism).

-sdy-drop-sharding-and-mesh

Rimuove l'operazione mesh e la notazione di suddivisione dal programma.

Opzioni

-keep-module-sharding-metadata : Whether to keep module-level sharding metadata (sdy.parameters_shardings and sdy.output_shardings).

-sdy-drop-sharding-rules

Elimina OpShardingRuleAttr da tutte le operazioni registrate.

-sdy-export-named-computations

Delinea le chiamate da NamedComputationOp.

Crea un passaggio che converte un NamedComputationOp in un CallOp con una nuova funzione privata chiamata name di NamedComputationOp. Il nuovo FuncOp e CallOp hanno le stesse suddivisioni degli operandi/risultati originali di NamedComputationOp.

Se nel modulo è presente una funzione con lo stesso nome di NamedComputationOp, la tabella dei simboli MLIR la modificherà in {name}_#.

-sdy-insert-explicit-reshards

Inserisce suddivisioni esplicite per fare in modo che tutte le operazioni abbiano suddivisioni compatibili.

Una suddivisione compatibile significa essenzialmente che l'operazione può accettare gli operandi suddivisi e produrre un risultato suddiviso senza richiedere comunicazioni di suddivisione (tieni presente che l'operazione potrebbe comunque richiedere comunicazioni come all-reduce o halo-swap).

Dopo la propagazione, alcune operazioni potrebbero ancora avere suddivisioni incompatibili.

Tieni presente che quando un asse (o un sottoasse) viene utilizzato per suddividere dimensioni non corrispondenti (ad es. dimensioni non contrattuali in matmul) su più tensori o quando un asse suddivide una dimensione in un tensore ma non la dimensione corrispondente nell'altro tensore, si dice che l'operazione ha un conflitto di suddivisione. Di conseguenza, dopo questo passaggio, le operazioni diventano prive di conflitti.

Questo passaggio inserisce esplicitamente le operazioni di suddivisione in modo che, per ogni operazione, le dimensioni corrispondenti vengano suddivise nello stesso modo in tutti gli operandi e i risultati e ogni asse (o sottoasse) possa essere utilizzato solo per suddividere un singolo tipo di dimensione.

Esempio:

Input:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

Output:

sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
  : (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>

Nell'esempio precedente, lhs e rhs sono entrambi suddivisi sull'asse "x" nelle loro dimensioni non contrattuali, il che è incompatibile. Il passaggio inserisce una suddivisione esplicita su rhs prima dell'operazione dot, in modo che l'operazione dot abbia suddivisioni compatibili.

Opzioni

-enable-full-version                     : Enable full version.
-mark-partial-result-with-unreduced-axes : Whether to mark partial reduction results with unreduced axes.

-sdy-insert-func-call-reshards

Inserisce suddivisioni per i conflitti di suddivisione di funzioni e chiamate.

Inserisce suddivisioni per i conflitti di suddivisione di funzioni e chiamate sui risultati.

-sdy-optimize-collectives

Ottimizza le operazioni di comunicazione collettiva.

Elimina le operazioni collettive-permute ridondanti che precedono le catene all-to-all decomponendo le dimensioni suddivise e unendole in un'operazione all-to-all combinata.

-sdy-pad-for-divisibility

Riempie i tensori con suddivisioni non divisibili in forme divisibili.

-sdy-per-instruction-partitioning

Estrae selettivamente le istruzioni di destinazione, esegue la pipeline del partizionatore su di esse per generare codice locale del dispositivo e le racchiude in sdy.manualcomputation.

A scopo di debug e bisezione, partiziona selettivamente le singole istruzioni utilizzando la pipeline del partizionatore Shardy autonomo (resolve-permutation-factors, reshard-to-collectives, pad-for-divisibility, convert-global-to-local) e racchiude il codice locale del dispositivo risultante all'interno di sdy.manual_computation. Il resto del programma globale rimane intatto, quindi le partizioni XLA SPMD riguardano solo le istruzioni globali non racchiuse.

Opzioni

-filter                   : Filter string for selective partitioning. Can be empty (all sharded ops), comma-separated op name substrings (e.g. 'dot, pad'), or key-values like 'selectLow=0, selectHigh=10, func=subroutine'.
-enable-halo-exchange     : Implement halo exchange logic for windowed operations inside the sub-pipeline.
-replica-count            : Number of replicas (data parallelism).
-partition-count          : Number of partitions (model parallelism).
-rng-bit-generator-unsafe : Whether to allow unsafe partitioning of stablehlo.rng_bit_generator.

-sdy-propagate-to-func-results

Propaga le suddivisioni dal terminatore della funzione ai risultati della funzione.

Copia le suddivisioni dei valori del terminatore della funzione nei risultati func.func corrispondenti, mantenendo le suddivisioni esistenti nella funzione principale.

-sdy-remove-all-gather-reduce-scatter-for-cmv1

_Rimuove sdy.all_gather e sdy.reducescatter per CMV1.

Rimuove all-gather nel pattern all-gather + dot. Rimuove reduce-scatter nel pattern dot + reduce-scatter. Questo passaggio è per la compatibilità con la matmul collettiva V1 (CMV1). È una soluzione temporanea per b/432019089.

-sdy-remove-propagation-debug-info

Rimuove le informazioni di debug della propagazione (bordi di propagazione e suddivisioni di origine) durante l'esportazione.

-sdy-remove-sharding-groups

Rimuove ShardingGroupOps dopo la propagazione.

-sdy-remove-sub-axes-in-input-output-shardings

Rimuove i sottoassi nelle suddivisioni di input/output.

Alcuni utenti di Shardy si aspettano che gli input/output delle funzioni abbiano suddivisioni senza sottoassi. Questo passaggio rimuove i sottoassi e i relativi assi finali dalle suddivisioni delle dimensioni aperte di input/output. Questo passaggio viene in genere eseguito dopo sdy-update-non-divisible-input-output-shardings per garantire che la rimozione dei sottoassi non introduca suddivisioni non divisibili.

-sdy-reshard-to-collectives

Converte ReshardOp in varie operazioni collettive Shardy.

Trova le operazioni di suddivisione e le riscrive in varie operazioni collettive Shardy. Dopo questo passaggio, non rimangono operazioni di suddivisione nel modulo.

Facoltativamente, se keepRedundantReshards è true, rimangono solo le operazioni di suddivisione ridondanti. Per impostazione predefinita, si presuppone che le suddivisioni esplicite siano già state inserite (sdy-insert-explicit-reshards) e non mantiene le suddivisioni ridondanti. Dovrebbe mantenere le suddivisioni ridondanti se le suddivisioni esplicite potrebbero non essere state ancora inserite.

Esempio:

Input:

mesh = <"x"=2, &q>uot;y"=<2, ">;z"=2
%0 <: tensor16x2xf32 {sdy.sharding>@mesh, \[{"x",< "y", &quo>t;z"<}, {}\]<>/span>
%1 = sdy.reshard %arg0 @mesh, \[{"x"}, {}\] : tensor16x2xf32

Output:

mesh = <"x"=2, &q>uot;y"=<2, ">;z"=2
%0 <: tensor16x2xf32 {sdy.sharding>@mesh, \[{"x", "y", "z"}, {}\]<
%1 = sdy.all_gather> \[{&quo<t;y">;, "z"}, {}\] %arg0 out_sharding=@mesh, \[{"x"}, {}\] : tensor16x2xf32

Nell'esempio precedente, il tensore %0 : tensor<16x2xf32> è suddiviso come \[{"x", "y", "z"}, {}\]. Poi, c'è un'operazione reshard che lo suddivide come \[{"x"}, {}\]. Sul primo asse, poiché il suffisso {"y", "z"} viene rimosso dopo la suddivisione, deduciamo che abbiamo raccolto {"y", "z"}. La seconda dimensione non viene modificata.

Opzioni

-keep-redundant-reshards : Whether it keeps redundant reshards or removes.

-sdy-resolve-permutation-factors

Risolve la suddivisione delle dimensioni mappate ai fattori kPermutation.

Le dimensioni di suddivisione con fattori kPermutation potrebbero richiedere la comunicazione tra dispositivi (ad es. lo scambio di halo per le finestre o le permutazioni collettive per le inversioni).

Se enableHaloExchange è true, il passaggio utilizzerà una logica di comunicazione ottimizzata disponibile per risolvere i fattori di permutazione. In caso contrario, il passaggio inserirà semplicemente le operazioni sdy.reshard per replicare queste dimensioni. Il valore predefinito di enableHaloExchange è true.

Opzioni

-enable-halo-exchange     : Implement halo exchange logic for windowed operations.
-replica-count            : Number of replicas (data parallelism).
-partition-count          : Number of partitions (model parallelism).
-rng-bit-generator-unsafe : Whether to allow unsafe partitioning of stablehlo.rng_bit_generator.

-sdy-resolve-single-device-sharding

Riduce le operazioni su un singolo dispositivo in stablehlo.if protetto dall'ID del dispositivo di destinazione.

Opzioni

-replica-count   : Number of replicas per partition.
-partition-count : Number of partitions per replica.

-sdy-sharding-constraint-to-reshard

Converte ShardingConstraintOp in ReshardOp.

-sdy-sink-data-flow-edges

Inserisce tutti i DataFlowEdgeOp nel relativo input.

Sposta la suddivisione di ogni DataFlowEdgeOp nel relativo input (la destinazione radice del bordo) e sostituisce l'operazione con il relativo input.

Opzioni

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-sink-func-data-flow-edges

Inserisce tutti i FuncDataFlowEdgeOp nel relativo input.

Sposta la suddivisione di ogni FuncDataFlowEdgeOp nel relativo input e sostituisce l'operazione con il relativo input.

-sdy-unflatten-call-graph

Rimuove la struttura piatta del grafico delle chiamate.

Rimuove la struttura piatta del grafico. De-duplica le funzioni con le stesse suddivisioni di input/output e la stessa origine, come descritto dall'attributo 'original_func_name' collegato alle funzioni.

Opzioni

-dedup-functions-fully : If true, regardless of the input and output shardings of functions, it keeps one callee function for each caller function. The default is false, meaning it will deduplicate only if the input and output shardings are the same.

-sdy-update-non-divisible-input-output-shardings

Rende gli input/output di FuncOp suddivisi in modo uniforme, eliminando la necessità di riempimento a causa di suddivisioni non divisibili.

Gli utenti di Shardy si aspettano che gli input/output delle funzioni siano divisibili/suddivisibili in modo uniforme per evitare di dover riempire i tensori. La propagazione potrebbe rendere gli input/output con suddivisioni non divisibili, quindi questo passaggio li aggiorna al prefisso di suddivisione delle dimensioni più grande della suddivisione originale che è suddivisa in modo uniforme.

-sdy-verify-unreduced-axes

Verifica la coerenza dell'utilizzo degli assi non ridotti.

Verifica che per ogni operazione, se i relativi operandi hanno assi non ridotti, l'operazione li riduca esplicitamente (ad es. tramite sdy.reshard) o li passi ai risultati (o sia un'operazione di delimitazione come func.call).