-mpmd-copy-topology-from-main
Copie la topologie de la fonction principale vers les fonctions référencées par mpmd.call.
Copie l'attribut de topologie de la fonction principale vers toute fonction référencée par un mpmd.call. Définit également le destinataire mpmd.call sur une visibilité privée, afin d'éviter toute confusion avec une fonction de point d'entrée.
-mpmd-enforce-input-output-equisharding
Applique les contraintes d'équilibrage pour les fonctions MPMD.
Applique les contraintes d'équilibrage d'entrée/sortie pour les fonctions MPMD en introduisant TransferOps si nécessaire.
Options
-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
Génère des maillages fragmentés en fonction de la topologie MPMD.
Cette passe génère des opérations de maillage fragmenté et les remplace par des opérations basées sur la topologie MPMD. Elle met également à jour les segmentations de tenseur pour faire référence aux nouvelles opérations de réseau maillé.
-mpmd-infer-mesh-assign-mesh-func-leaves
_Attribue un maillage à chaque calcul, sortie de fonction et entrée de fonction inutilisés à l'aide des analyses use_set et srcset analysis.
Cette passe attribue des maillages aux feuilles de corps de fonction (c'est-à-dire les résultats des calculs inutilisés, les arguments de fonction inutilisés et les sorties de fonction) en créant des AssignOps ou en modifiant le type, à l'aide des informations use_set et src_set.
Nous traitons également certaines valeurs intermédiaires comme des feuilles, à des fins d'analyse. À savoir : les opérandes d'un mpmd.reduce et d'un mpmd.broadcast sont traités comme des feuilles, et une paire d'attribution/suppression d'attribution est créée sur ces derniers.
Cette attribution efface le use_set de toutes les opérations non feuilles, car les utilisations précédemment annotées seront obsolètes, car l'inférence des opérations de réduction modifiera le use_set de certaines valeurs : la propagation initiale du use_set n'est pas consciente des opérations de réduction, mais maintenant que nous avons inféré les opérations de réduction, la propagation sera différente.
Cette passe échouera et générera des erreurs si les ensembles d'utilisation et de source ne sont pas correctement renseignés pour les opérations de feuille.
Condition préalable : chaque opération doit avoir un ensemble de sources non vide, ou nous inférons les transferts.
Options
-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
Attribue un maillage aux entrées et aux sorties en fonction des contraintes d'attribution d'entrée/sortie.
Cette passe utilise les contraintes d'attribution équivalente d'entrée/sortie pour attribuer à la fois l'entrée et la sortie au même maillage.
Notez que cela garantit que l'entrée se trouve sur le même maillage, qu'elle soit ensuite transférée ou non vers d'autres maillages. Cela signifie que nous ne devons pas exécuter populate-src-set après cette passe.
Obligatoire :
- pour toute entrée
ide la fonction de point d'entrée pouvant faire partie d'une contrainte d'attribution équivalente :ipossède un MeshTensorType OU un ensemble d'utilisation bien défini. - pour toute sortie
ode la fonction de point d'entrée pouvant faire partie d'une contrainte d'attribution équivalente :opossède un type MeshTensorType OU des ensembles de sources et d'utilisation bien définis.
Lorsqu'un ensemble d'utilisation bien défini d'une valeur inclut tous les maillages auxquels la valeur est attribuée (de manière transitive), via des opérations mpmd.assign et aucun autre maillage. Un ensemble de sources bien défini inclut tous les maillages où le Tensor est autorisé à résider et aucun autre maillage.
Bien que cela ne s'exécute que sur les fonctions de point d'entrée, nous en faisons une passe d'opération de module, car cela nécessite que toutes les passes sur les fonctions existantes soient terminées avant son exécution. Par exemple, si nous en faisons un EntryPointFunctionPass, le gestionnaire de passes peut exécuter cette passe avant que la validation ne soit terminée sur les fonctions de point d'entrée.
Options
-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
Convertit les opérations de réduction annotées en opérations mpmd.reduce et aplatit les chaînes d'opérations de réduction.
Convertit les opérations de réduction annotées en opérations mpmd.reduce et aplatit également les chaînes de ces opérations de réduction.
Dans les symboles :
x = add(w0, w1) {mpmd.reduce = #mpmd.reduce
Options
-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.
-mpmd-infer-mesh-finalize
Applique le nettoyage final après l'inférence de maillage de modèles.
Options
-infer-transfers : Whether to create transfers when needed, instead of erroring.
-mpmd-infer-mesh-populate-src-set
_Initialise le src_set pour UnassignOps et les arguments de fonction, et propage le srcset.
Cette passe initialise le src_set et le propage, en remplissant le graphique avec les informations src_set.
Condition préalable : pour que les arguments de fonction aient des src_sets, le use_set doit être renseigné.
Initialisation : le src_set d'un UnassignOp est défini sur le maillage auquel il est attribué. Le src_set d'un argument de fonction est défini sur son use_set.
Propagation : les src_sets se propagent vers l'avant des opérandes vers l'opération elle-même, en prenant l'intersection des opérandes. Pour en savoir plus, consultez PropagateSrcSet.
-mpmd-infer-mesh-populate-use-set
_Initialise le use_set pour AssignOps et propage le useset.
Cette passe initialise le use_set et le propage vers l'arrière, en remplissant le graphique avec les informations use_set.
Initialisation : le use_set d'un AssignOp est défini sur le maillage auquel il est attribué.
Propagation : les use_sets se propagent vers l'arrière des utilisateurs vers l'opération elle-même, en prenant l'union des utilisateurs. Le use_set d'une opération est l'union des use_sets de ses utilisateurs par définition, car le use_set est l'ensemble des utilisations transitives.
-mpmd-infer-mesh-rewrite-using-analysis
_Réécrit les opérations en fonction du useset.
Cette passe attribue des opérations sans maillage en les encapsulant dans des fragments, à l'aide des analyses use_set et src_set.
Elle supprime également les attributs use_set et src_set dans le cadre du nettoyage, car les analyses ne sont plus nécessaires après cela.
Condition préalable : chaque opération doit avoir un use_set, c'est-à-dire que l'analyse est terminée. Condition préalable : chaque argument d'une fonction de point d'entrée est utilisé au moins par une opération non terminatrice.
À FAIRE : jupvfranco : envisagez de renommer cette passe, car elle ne dépend plus autant de l'analyse.
Options
-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
Valide qu'aucun transfert supplémentaire n'est nécessaire pour l'attribution de maillage.
Cette passe valide que l'attribution de maillage est possible pour toutes les opérations sans maillage sans introduire de transferts supplémentaires.
Pour les opérations sans maillage qui ne sont pas des opérations de fonction, une erreur se produit lorsque :
- le use_set n'est pas contenu dans le src_set pour une opération donnée, c'est-à-dire qu'un transfert est nécessaire.
Pour les opérations de fonction, il suffit de vérifier les conditions ci-dessus pour les arguments de fonction, car la fonction renvoie des opérations sans maillage ou des arguments de bloc.
Options
-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
_Valide que chaque opération sans maillage possède un srcset.
Cette passe valide toutes les opérations sans maillage, en vérifiant que l'opération peut être attribuée quelque part. Autrement dit, pour les opérations sans maillage qui ne sont pas des opérations de fonction, une erreur se produit lorsque le src_set est vide sur une opération ou s'il a été inféré comme étant une réduction entre maillages, mais qu'il n'est pas converti. Il s'agit d'une condition préalable à l'attribution de feuilles de fonction.
Pour les opérations de fonction, il suffit de vérifier les conditions ci-dessus pour les arguments de fonction, car la fonction renvoie des opérations sans maillage ou des arguments de bloc.
Il doit s'agir d'une passe au niveau du module, car en cas d'erreur sur le destinataire, nous voulons imprimer les appelants.
Condition préalable : les réductions entre maillages doivent être converties en opérations de réduction avant l'exécution de cette passe.
Options
-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.
-mpmd-inline-nested-user-exposed-ops
_Intègre toute opération mpmd exposée à l'utilisateur et imbriquée dans un calcul nommé.
Intègre toute opération named_computation, named_tensor, broadcast et reduce imbriquée dans un named_computation, en vérifiant que son attribution de maillage (lorsqu'elle est définie) correspond à celle du parent.
Options
-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
Clone les opérations négligeables en dehors des calculs nommés.
Clone les opérations négligeables, c'est-à-dire les opérations à résultat unique et à zéro opérande, en dehors des calculs nommés chaque fois qu'elles sont utilisées par l'opération de retour du calcul, en remplaçant le résultat du named_computation par le clone. Cela est nécessaire, car si ces résultats sont utilisés par des calculs nommés attribués à différents maillages, cela peut entraîner un conflit d'inférence de maillage. En appliquant cette passe, nous autorisons l'inférence de maillage à cloner ces opérations négligeables.
Cette passe ne modifie PAS le calcul nommé.
-mpmd-introduce-transfers
Crée des transferts de données en fonction des attributions de maillage de l'utilisateur.
Crée une passe qui introduit des opérations de transfert en fonction des attributions de maillage de l'utilisateur. Par exemple :
- Envoie UnassignOp aux appels mpmd si le résultat d'UnassignOp est attribué ultérieurement dans le destinataire.
- Remplace l'AssignOp d'un UnassignOp par un TransferOp.
- Attribue l'ajout au maillage consommateur et introduit un transfert s'il existe un ajout sans maillage entre les fragments.
-mpmd-map-input-output-to-mesh
Attribue des maillages aux entrées et aux sorties de fonction.
Crée une passe qui mappe les entrées/sorties de fonction aux maillages en fonction d'une attribution de maillage définie par l'utilisateur.
Pour les arguments d'entrée, cette passe :
- Caste les Tensors d'entrée qui doivent être placés sur un maillage vers un Tensor de maillage.
- Met à jour la signature de la fonction.
- Ajoute mpmd.unassign avant l'utilisation du Tensor.
Pour les arguments de sortie, cette passe ajoute mpmd.assign avant le renvoi du Tensor et met à jour la signature de la fonction.
Obligatoire : chaque index d'entrée/sortie est valide et chaque maillage mappé est un maillage valide dans la topologie.
Options
-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
Attribue des maillages aux opérations définies par l'utilisateur.
Crée une passe attribuant éventuellement mpmd.named_tensor à Assign(Unassign(%v)) (selon qu'il existe une entrée dans assignment) et mappe chaque named_computation à un maillage, à l'aide d'un mappage défini par l'utilisateur entre les named_computations et les noms de maillage. Cela signifie remplacer chaque named_computation par un Fragment et créer des AssignOps pour les opérandes et des UnassignOps pour les résultats de ces Fragments. Le modèle désormais introduit Assign(Unassign(%v)) est réécrit dans un Transfer(%v).
Aucune opération named_computation/named_tensor n'existera après cette passe.
Obligatoire : toutes les named_computations et tous les named_tensors doivent résider au niveau supérieur de la fonction.
Options
-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
Simplifie les entrées et les sorties des opérations de calcul nommées.
Simplifie chaque calcul nommé indépendamment. En particulier :
- supprime les doublons des résultats et de leurs valeurs de retour correspondantes ;
- supprime les doublons des opérandes et de leurs arguments de bloc correspondants ;
- supprime les résultats dont l'opérande de retour correspondant est un argument de bloc de l'opération ;
- supprime les opérandes dont l'argument de bloc correspondant n'a plus d'utilisations (ou n'en avait pas au début) ; et
- supprime les résultats inutilisés.
- remplace le modèle
arg -> stablehlo.optimization_barrier -> returndans un calcul nommé par le modèlearg -> return, ce qui permet une simplification supplémentaire.
-mpmd-validate-named-ops-in-mpmd-func
Valide que les opérations nommées ne sont imbriquées que dans les fonctions mpmd.
Valide que NamedComputationOp et NamedTensorOp ne sont imbriqués que dans les fonctions mpmd, c'est-à-dire les fonctions avec un attribut de topologie.