-mpmd-copy-topology-from-main

Copia a topologia da função principal para as funções referenciadas por mpmd.call.

Copia o atributo de topologia da função principal para qualquer função referenciada por um mpmd.call. Isso também define o recebedor da chamada mpmd.call como visibilidade privada para evitar ser confundido com uma função de ponto de entrada.

-mpmd-enforce-input-output-equisharding

Aplica restrições de equisharding para funções MPMD.

Aplica restrições de equisharding de entrada/saída para funções MPMD ao introduzir TransferOps quando necessário.

Opções

-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

Gera malhas fragmentadas com base na topologia MPMD.

Essa transmissão gera e remove todas as operações de malha fragmentadas atuais e as substitui por operações baseadas na topologia MPMD. Ele também atualiza os fragmentos de tensor para se referirem às novas operações de malha.

-mpmd-infer-mesh-assign-mesh-func-leaves

_Atribui uma malha a cada computação, saída e entrada de função não utilizadas usando a análise de conjunto de uso e srcset.

Essa transmissão atribui malhas às folhas do corpo da função (ou seja, os resultados de cálculos não usados, argumentos de função não usados e saídas de função) criando AssignOps ou mudando o tipo, usando as informações use_set e src_set.

Também tratamos alguns valores intermediários como folhas para fins de análise. Ou seja, os operandos de um mpmd.reduce e mpmd.broadcast são tratados como folhas, e um par de atribuição/remoção de atribuição é criado neles.

Essa atribuição vai limpar o use_set de todas as operações não folha, já que os usos anotados anteriormente vão ficar desatualizados. Isso acontece porque a inferência de operações de redução muda o use_set de alguns valores. A propagação inicial do use_set não conhece as operações de redução, mas agora que inferimos essas operações, a propagação será diferente.

Essa transmissão vai falhar e emitir erros se os conjuntos use e src não forem preenchidos corretamente para operações de folha.

Pré-condição: cada operação tem um src-set não vazio ou inferimos transferências.

Opções

-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

Atribui uma malha às entradas e saídas de acordo com as restrições de atribuição de entrada-saída.

Essa transmissão usa as restrições de atribuição equitativa de entrada/saída para atribuir a entrada e a saída à mesma malha.

Isso garante que a entrada esteja na mesma malha, independente de ser transferida para outras malhas posteriormente. Mas isso significa que não devemos executar populate-src-set após essa transmissão.

Requisitos:

  • para qualquer entrada i da função de ponto de entrada que possa fazer parte de uma restrição de atribuição igualitária: i tem um MeshTensorType OU um conjunto de uso bem definido.
  • para qualquer saída o da função de ponto de entrada que possa fazer parte de uma restrição de atribuição igualitária: o tem o tipo MeshTensorType OU conjuntos de origem e uso bem definidos.

Em que um conjunto de uso bem definido de um valor inclui todas as malhas a que o valor é atribuído (transitivamente) por operações mpmd.assign e nenhuma outra malha. Um src-set bem definido inclui todas as malhas em que o tensor pode ficar e nenhuma outra malha.

Embora isso seja executado apenas em funções de ponto de entrada, fazemos isso em uma transmissão de operação de módulo porque exige que todas as transmissões em funções atuais sejam concluídas antes da execução. Por exemplo, se fizermos isso um EntryPointFunctionPass, o gerenciador de transmissões poderá executar essa transmissão antes que a validação seja concluída nas funções de ponto não inicial.

Opções

-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 operações de redução anotadas em operações de redução mpmd e simplifica cadeias de operações de redução.

Converte as operações de redução anotadas em operações mpmd.reduce e também achata cadeias dessas operações de redução.

Em símbolos:

x = add(w0, w1) {mpmd.reduce = #mpmd.reduce} y = add(x, w2) {mpmd.reduce = #mpmd.reduce} ~~> r = mpmd.reduce(w0,w1,w2)

Opções

-infer-cross-mesh-reductions : Whether to infer cross-mesh reductions. Will be enabled by default once stable.

-mpmd-infer-mesh-finalize

Aplica a limpeza final após a inferência de malha de padrões.

Opções

-infer-transfers : Whether to create transfers when needed, instead of erroring.

-mpmd-infer-mesh-populate-src-set

_Inicializa o src_set para UnassignOps e argumentos de função e propaga o srcset.

Essa transmissão inicializa e propaga o src_set, preenchendo o gráfico com as informações dele.

Pré-condição: para que os argumentos de função tenham src_sets, o use_set precisa ser preenchido.

Inicialização: o src_set de um UnassignOp é definido como a malha a que ele atribui. O src_set de um argumento de função é definido como o use_set dele.

Propagação: src_sets são propagados para frente dos operandos para a própria operação, usando a interseção dos operandos. Consulte PropagateSrcSet para ver detalhes.

-mpmd-infer-mesh-populate-use-set

_Inicializa o use_set para AssignOps e propaga o useset.

Essa transmissão inicializa o use_set e o propaga para trás, preenchendo o gráfico com as informações do use_set.

Inicialização: o use_set de um AssignOp é definido como a malha a que ele atribui.

Propagação: "use_sets" se propaga de volta dos usuários para a própria operação, usando a união dos usuários. O use_set de uma operação é a união dos use_sets dos usuários por definição, já que o use_set é o conjunto de usos transitivos.

-mpmd-infer-mesh-rewrite-using-analysis

_Reescreve operações de acordo com o conjunto de uso.

Essa transmissão atribui operações sem malha envolvendo-as em fragmentos, usando as análises use_set e src_set.

Ele também remove os atributos use_set e src_set como parte da limpeza, já que as análises não são mais necessárias depois disso.

Pré-condição: cada operação tem um use_set, ou seja, a análise está concluída. Pré-condição: todos os argumentos de uma função que não seja de ponto de entrada são usados pelo menos por uma operação não terminadora.

TODO: jupvfranco - consider renaming this pass given that it doesn't depend on the analysis so much anymore.

Opções

-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

Valida se não são necessárias outras transferências para a atribuição de malha.

Essa transmissão valida se a atribuição de malha é possível para todas as operações sem malha sem introduzir outras transferências.

Para operações sem malha que não são operações de função, há um erro quando:

  1. use_set não está contido no src_set para uma determinada operação, ou seja, é necessária uma transferência.

Para operações de função, basta verificar as condições acima para os argumentos de função, já que a função retorna operações sem malha ou argumentos de bloco.

Opções

-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

_Valida se cada operação sem malha tem um conjunto src não vazio.

Essa transmissão valida todas as operações sem malha, verificando se a operação pode ser atribuída em algum lugar. Ou seja, para operações sem malha que não são operações de função, ele gera um erro quando o src_set está vazio em uma operação ou se foi inferido como uma redução entre malhas mas não foi convertido. Esse é um pré-requisito para a atribuição de variáveis funcionais.

Para operações de função, basta verificar as condições acima para os argumentos de função, já que a função retorna operações sem malha ou argumentos de bloco.

Isso precisa ser uma transmissão no nível do módulo, já que, no caso de um erro no destinatário da chamada, queremos imprimir os chamadores.

Pré-condição: as reduções entre malhas precisam ser convertidas em operações de redução antes da execução dessa transmissão.

Opções

-error-limit : The number of errors to emit. Set to -1 to emit all errors. Cannot be 0.

-mpmd-inline-nested-user-exposed-ops

_Adiciona inline qualquer operação mpmd exposta ao usuário aninhada em uma computação nomeada.

Insere qualquer named_computation, named_tensor, broadcast e reduce op aninhado em uma named_computation, verificando se a atribuição de malha (quando definida) corresponde à do pai.

Opções

-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

Clona operações insignificantes fora dos cálculos nomeados.

Clona operações insignificantes, ou seja, operações de resultado único, operando zero, fora de computações nomeadas sempre que são usadas pela operação de retorno da computação, substituindo o resultado da named_computation pelo clone. Isso é necessário porque, se esses resultados forem usados por cálculos nomeados atribuídos a malhas diferentes, poderá ocorrer um conflito de inferência de malha. Ao aplicar essa transmissão, permitimos que a inferência de malha clone essas operações insignificantes.

Essa transmissão NÃO muda a computação nomeada.

-mpmd-introduce-transfers

Cria transferências de dados com base nas atribuições de malha do usuário.

Cria uma transmissão que apresenta operações de transferência com base nas atribuições de malha do usuário. Isso inclui:

  1. Envie UnassignOp para chamadas mpmd se o resultado de UnassignOp for atribuído posteriormente no recebedor da chamada.
  2. Substitui o AssignOp de um UnassignOp por um TransferOp.
  3. Atribua a adição à malha de consumo e introduza uma transferência se houver uma adição sem malha entre fragmentos.

-mpmd-map-input-output-to-mesh

Atribui malhas a entradas e saídas de funções.

Cria uma transmissão que mapeia entradas/saídas de função para malhas, considerando uma atribuição de malha definida pelo usuário.

Para os argumentos de entrada, essa transmissão:

  1. Converte os tensores de entrada que devem ser colocados em uma malha para um tensor de malha.
  2. Atualiza a assinatura da função.
  3. Adiciona mpmd.unassign antes que o tensor seja usado.

Para os argumentos de saída, essa transmissão adiciona mpmd.assign antes que o tensor seja retornado e atualiza a assinatura da função.

Requer: cada índice de entrada/saída é válido e cada malha mapeada é uma malha válida na topologia.

Opções

-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

Atribui malhas a operações definidas pelo usuário.

Cria uma transmissão, atribuindo opcionalmente mpmd.named_tensor a Assign(Unassign(%v)) (depende se há uma entrada em assignment) e para mapear cada named_computation a uma malha, usando um mapeamento definido pelo usuário entre named_computations e nomes de malha. Isso significa substituir cada named_computation por um Fragment e criar AssignOps para os operandos e UnassignOps para os resultados desses Fragments. O padrão Assign(Unassign(%v)) agora introduzido é reescrito como um Transfer(%v). Nenhuma operação named_computation/named_tensor vai existir após essa transmissão.

Requer que todas as named_computations e named_tensors estejam no nível superior da função.

Opções

-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

Simplifica as entradas e saídas de operações de computação nomeadas.

Simplifica cada cálculo nomeado de forma independente. Em especial, ele:

  • remove resultados duplicados e os valores de retorno correspondentes;
  • remove operandos duplicados e os argumentos de bloco correspondentes;
  • remove resultados cujo operando de retorno correspondente é um argumento de bloco da operação;
  • remove operandos cujo argumento de bloco correspondente não tem mais usos (ou não tinha nenhum para começar); e
  • remove resultados que não são usados.
  • substitui o padrão arg -> stablehlo.optimization_barrier -> return em um cálculo nomeado pelo padrão arg -> return, permitindo mais simplificação.

-mpmd-validate-named-ops-in-mpmd-func

Valida se as operações nomeadas estão aninhadas apenas em funções mpmd.

Valida que NamedComputationOp e NamedTensorOp só estão aninhados em funções mpmd, ou seja, funções com um atributo de topologia.