Dialecto "mpmd"

Operaciones

mpmd.assign (mpmd::AssignOp)

Operación de asignación

Sintaxis:

operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)

Asigna un tensor local a una malla como completamente replicado dentro de esa malla.

Esta es una operación temporal que se introduce cuando se reducen las operaciones de JAX para pasar de tipos locales a tipos de malla. Estas operaciones se eliminarán durante la importación, cuando las entradas y los resultados de la operación func se conviertan en tensores de malla.

El nombre de la malla del tipo de resultado debe corresponder a una malla en la topología, y su tipo global debe ser idéntico al tipo de operando.

El origen de la operación de asignación es el origen de la malla, p.ej., named_computation, inferencia de malla, etcétera.

Rasgos: AlwaysSpeculatableImplTrait y HasParent<::mlir::func::FuncOp, ForOp>

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Efectos: MemoryEffects::Effect{}

Atributos:

AtributoTipo de MLIRDescripción
origin::mlir::StringAttratributo de cadena

Operandos:

Operando Descripción
tensor Tensor de cualquier valor de tipo no token

Resultados:

Resultado Descripción
result tipo de tensor de malla

mpmd.broadcast (mpmd::BroadcastOp)

Operación de transmisión

Sintaxis:

operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)

Permite que un tensor se transfiera (o replique) en cualquier malla en la que se use. Cada vez que se transfiere, el origen de la transferencia es la ubicación actual del operando.

Rasgos: AlwaysSpeculatableImplTrait y SameOperandsAndResultType

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)

Efectos: MemoryEffects::Effect{}

Operandos:

Operando Descripción
tensor Tensor de cualquier valor de tipo no token

Resultados:

Resultado Descripción
result Tensor de cualquier valor de tipo no token

mpmd.call (mpmd::CallOp)

Función de llamada específica de MPMD

Sintaxis:

operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)

Operación de llamada a función. Es útil para envolver el cuerpo de los bucles en declaraciones de funciones para reducir el tamaño del código, por ejemplo.

Interfaces: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface

Atributos:

AtributoTipo de MLIRDescripción
callee::mlir::FlatSymbolRefAttrAtributo de referencia de símbolo plano

Operandos:

Operando Descripción
tensors variádico de tensor de cualquier tipo de valor que no sea de token o tipo de tensor de malla

Resultados:

Resultado Descripción
"sin nombre" variádico de tensor de cualquier tipo de valor que no sea de token o tipo de tensor de malla

mpmd.for (mpmd::ForOp)

Para el operador

Devuelve el resultado de ejecutar una función de cuerpo para una cantidad fija de iteraciones, con el índice de iteración disponible en el cuerpo.

Se puede especificar un factor de desenrollado opcional, que debe dividir la cantidad de iteraciones, para desenrollar el cuerpo de la operación según ese factor, es decir, para un factor de desenrollado N, el cuerpo se replica para crear N copias y la cantidad de iteraciones se reduce en un factor de 1/N. Cada copia, excepto la primera, usa los resultados de la copia anterior en lugar de los argumentos del bloque, y el índice de iteración se multiplica por el factor de desenrollado y se incrementa después de cada copia.

Un operador for puede aceptar y devolver cualquier tipo, pero el TypeID de estos debe ser el mismo, p.ej., todos los tipos de tensores o todos los tipos de malla de MPMD, etc. Esto nos permite usar el operador en varios niveles, compartir la implementación y las transformaciones.

Rasgos: HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock

Interfaces: ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface y ShardableDataFlowOpInterface

Atributos:

AtributoTipo de MLIRDescripción
iterations::mlir::IntegerAttrAtributo de número entero de 32 bits sin firma
unroll_factor::mlir::IntegerAttrAtributo de número entero de 32 bits sin firma

Operandos:

Operando Descripción
tensors variádico de cualquier tipo que no sea de token

Resultados:

Resultado Descripción
results variádico de cualquier tipo que no sea de token

mpmd.fragment (mpmd::FragmentOp)

Operación de fragmento

Asigna un cálculo, es decir, un bloque de operaciones, a una malla específica en una topología de MPMD, que se ejecutará como un fragmento de programa SPMD individual.

El fragmento solo toma y devuelve tensores de malla que se asignan a la misma malla que el fragmento.

El nombre de la malla del fragmento debe corresponder a una malla en la topología.

El fragmento incluye una lista de orígenes, es decir, metadatos con información sobre las named_computations originales que formaron este fragmento, y un staged_id definido iff si es un fragmento definido por el usuario, es decir, si tiene una lista de orígenes no vacía. El argumento opcional in_shardings especifica la fragmentación de los argumentos de bloque de un fragmento, que corresponden a los operandos. El argumento opcional out_shardings especifica la fragmentación de los resultados.

La región del fragmento no debe tener variables libres, y el tipo de cada argumento de bloque y valor devuelto en la región es el tipo de tensor global del tensor de malla correspondiente.

Rasgos: HasParent<::mlir::func::FuncOp, ForOp>, IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock

Interfaces: ConditionallySpeculatable, ShardableDataFlowOpInterface

Atributos:

AtributoTipo de MLIRDescripción
origin::mlir::ArrayAttrEs un array de información de origen.
mesh_name::mlir::StringAttratributo de cadena
stage_id::mlir::IntegerAttrAtributo de número entero de 64 bits sin signo
in_shardings::mlir::sdy::TensorShardingPerValueAttrFragmentación de tensores por operando o resultado de una operación
out_shardings::mlir::sdy::TensorShardingPerValueAttrFragmentación de tensores por operando o resultado de una operación

Operandos:

Operando Descripción
inputs variádico de tipo tensor de malla o token

Resultados:

Resultado Descripción
results variádico de tipo tensor de malla o token

mpmd.fragment_call (mpmd::FragmentCallOp)

Operación de llamada de fragmento

Representa una llamada a una función que contiene un fragmento del cuerpo de MPMD, es decir, un cálculo asignado a una malla específica en una topología de MPMD, que se pretende ejecutar como un fragmento de programa SPMD individual.

El nombre de la malla del fragmento debe corresponder a una malla en la topología de la función envolvente, y esa forma de malla debe coincidir con la de la función llamada.

El origen especifica los cálculos con nombre del usuario que contribuyeron a esta llamada de fragmento, p.ej., a través de la combinación.

Los tipos de entrada y resultado de la función del destinatario deben ser los tipos de tensor locales de los tensores de malla correspondientes de los operandos y resultados de esta op, respectivamente.

Ejemplo:

%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
  (m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...

Rasgos: HasParent<::mlir::func::FuncOp> y MemRefsNormalizable

Interfaces: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface

Atributos:

AtributoTipo de MLIRDescripción
origin::mlir::ArrayAttrEs un array de información de origen.
mesh_name::mlir::StringAttratributo de cadena
callee::mlir::FlatSymbolRefAttrAtributo de referencia de símbolo plano

Operandos:

Operando Descripción
tensors variádico del tipo de tensor de malla

Resultados:

Resultado Descripción
"sin nombre" variádico del tipo de tensor de malla

mpmd.named_computation (mpmd::NamedComputationOp)

Operación de alcance con nombre

Agrupa un cálculo, es decir, un bloque de operaciones, y le asigna un nombre y un recuento de la transposición a través del atributo UserOrigin. Este NamedComputation se puede usar para asignar una malla al cálculo en MPMD o para optimizaciones.

El recuento de transposición (predeterminado=0) indica si el cálculo con nombre se produjo a partir de una cierta cantidad de transformaciones de transposición de AD de JAX.

La región de la op no debe tener variables libres, y el tipo de cada argumento de bloque y los valores devueltos en la región deben ser los mismos que el tipo de las entradas y el tipo de datos que se devuelve de la op.

Rasgos: IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock

Interfaces: ConditionallySpeculatable

Atributos:

AtributoTipo de MLIRDescripción
origin::mlir::mpmd::UserOriginAttrEs el origen del cálculo especificado por el usuario.

Operandos:

Operando Descripción
tensors Variádico de tensor clasificado de punto flotante o booleano de 4/6/8/16/32/64 bits, o bien de tipo entero o complejo de 2/4/8/16/32/64 bits con elementos de punto flotante de 32/64 bits, o bien valores cuantificados enteros por tensor o token

Resultados:

Resultado Descripción
results Variádico de tensor clasificado de punto flotante o booleano de 4/6/8/16/32/64 bits, o bien de tipo entero o complejo de 2/4/8/16/32/64 bits con elementos de punto flotante de 32/64 bits, o bien valores cuantificados enteros por tensor o token

mpmd.named_tensor (mpmd::NamedTensorOp)

Cómo asignar un tensor a una malla

Sintaxis:

operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)

Es una operación de identidad que asocia el resultado del tensor con un nombre determinado. Este NamedTensor se puede usar para asignar una malla al tensor en MPMD.

Rasgos: AlwaysSpeculatableImplTrait y SameOperandsAndResultType

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)

Efectos: MemoryEffects::Effect{}

Atributos:

AtributoTipo de MLIRDescripción
name::mlir::StringAttratributo de cadena

Operandos:

Operando Descripción
tensor Tensor de cualquier valor de tipo no token

Resultados:

Resultado Descripción
result Tensor de cualquier valor de tipo no token

mpmd.reduce (mpmd::ReduceOp)

Operación de reducción entre mallas

Sintaxis:

operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)

Permite reducir un tensor en diferentes mallas y, luego, transmitirlo a donde sea necesario usarlo.

Rasgos: AlwaysSpeculatableImplTrait y SameOperandsAndResultType

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Efectos: MemoryEffects::Effect{}

Atributos:

AtributoTipo de MLIRDescripción
reduction::mlir::mpmd::ReductionAttrDenota una reducción.

Operandos:

Operando Descripción
tensors variádico de tensor de cualquier valor de tipo no token

Resultados:

Resultado Descripción
result Tensor de cualquier valor de tipo no token

mpmd.return (mpmd::ReturnOp)

La operación mpmd.return finaliza las regiones adjuntas a las operaciones basadas en regiones de mpmd. Es variádica: toma como argumentos una lista de valores cuyos tipos pueden ser cualquiera (pero del mismo tipo, p.ej., AnyTensor) y, por lo tanto, se puede reutilizar en varios niveles de la pila de RI de MPMD.

Sintaxis:

operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?

Rasgos: AlwaysSpeculatableImplTrait y Terminator

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Efectos: MemoryEffects::Effect{}

Operandos:

Operando Descripción
results variádico de cualquier tipo que no sea de token

mpmd.transfer (mpmd::TransferOp)

Operación de transferencia

Sintaxis:

operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)

Transfiere un tensor distribuido de una malla a otra.

Los nombres de malla de los tipos de operando y resultado deben corresponder a mallas en la topología, y sus tipos globales deben ser idénticos.

Rasgos: AlwaysSpeculatableImplTrait y HasParent<::mlir::func::FuncOp>

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface

Efectos: MemoryEffects::Effect{}

Operandos:

Operando Descripción
tensor tipo de tensor de malla

Resultados:

Resultado Descripción
result tipo de tensor de malla

mpmd.unassign (mpmd::UnassignOp)

Operación de anulación de asignación

Sintaxis:

operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)

Anula la asignación de un tensor replicado por completo de una malla.

Esta es una operación temporal que se introduce cuando se reducen las operaciones de JAX para pasar de tipos locales a tipos de malla. Estas operaciones se eliminarán durante la importación, cuando las entradas y los resultados de la operación func se conviertan en tensores de malla.

El nombre de la malla del tipo de operando debe corresponder a una malla en la topología, y su tipo global debe ser idéntico al tipo de resultado.

Rasgos: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType

Interfaces: ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface y NoMemoryEffect (MemoryEffectOpInterface)

Efectos: MemoryEffects::Effect{}

Atributos:

AtributoTipo de MLIRDescripción
origin::mlir::StringAttratributo de cadena

Operandos:

Operando Descripción
tensor tipo de tensor de malla

Resultados:

Resultado Descripción
result Tensor de cualquier valor de tipo no token

Atributos

MeshWithOriginsAttr

Se adapta a sus orígenes.

Sintaxis:

#mpmd.mesh_with_origins<
  ::llvm::StringRef,   # mesh_name
  ::llvm::ArrayRef<OriginAttr>   # origins
>

Parámetros:

Parámetro Tipo de C++ Descripción
mesh_name ::llvm::StringRef mesh_name
orígenes ::llvm::ArrayRef<OriginAttr> orígenes

MeshesWithOriginsAttr

Una lista de mallas con sus orígenes.

Sintaxis:

#mpmd.meshes_with_origins<
  ::llvm::ArrayRef<MeshWithOriginsAttr>   # value
>

Parámetros:

Parámetro Tipo de C++ Descripción
valor ::llvm::ArrayRef<MeshWithOriginsAttr>

NamedMeshAttr

Es un par con un nombre y una malla.

Sintaxis:

#mpmd.named_mesh<
  ::llvm::StringRef,   # name
  sdy::MeshAttr   # mesh
>

Parámetros:

Parámetro Tipo de C++ Descripción
nombre ::llvm::StringRef nombre
malla sdy::MeshAttr malla

OriginAttr

Origen de la asignación de malla.

Sintaxis:

#mpmd.origin<
  ::llvm::StringRef   # origin_label
>

Es el origen de una asignación de malla.

origin_label es una etiqueta legible para el origen. Está diseñado para usarse con fines de depuración.

Parámetros:

Parámetro Tipo de C++ Descripción
origin_label ::llvm::StringRef origin_label

ReductionAttr

Denota una reducción.

Sintaxis:

#mpmd.reduction<
  `none` | `add` | `max` | `min` | `mul` | `or` | `and`   # reduction_type
>

Parámetros:

Parámetro Tipo de C++ Descripción
reduction_type ::mlir::mpmd::ReductionType Es una enumeración de tipo ReductionType.

TopologyAttr

Topología de mallas con nombre.

Sintaxis:

#mpmd.topology<
  ::llvm::ArrayRef<NamedMeshAttr>   # meshes
>

Parámetros:

Parámetro Tipo de C++ Descripción
mallas ::llvm::ArrayRef<NamedMeshAttr> mallas de topología

UserOriginAttr

Origen del cálculo especificado por el usuario.

Sintaxis:

#mpmd.user_origin<
  ::mlir::StringAttr,   # userName
  int64_t   # transposeCount
>

Parámetros:

Parámetro Tipo de C++ Descripción
userName ::mlir::StringAttr
transposeCount int64_t

Tipos

MeshTensorType

Tipo de tensor de malla

Asigna un RankedTensorType a una malla SPMD específica en la topología MPMD de mallas del programa. El tipo contiene un sharding opcional que especifica cómo se fragmenta el tensor con respecto a la malla de SPMD. Si no hay fragmentación, el tensor se replica por completo.

Parámetros:

Parámetro Tipo de C++ Descripción
mesh_name ::llvm::StringRef Nombre de la malla
ranked_tensor_type ::mlir::RankedTensorType tipo de tensor clasificado
fragmentación ::mlir::sdy::TensorShardingAttr
memory_kind ::mlir::StringAttr

Enums

ReductionType

Atributo de tipo de reducción

Casos:

Símbolo Valor String
kNone 0 ninguno
kAdd 1 add
kMax 2 máx.
kMin 3 min
kMul 4 mul
kOr 5 o
kAnd 6 y

EdgeNodeType

Enumeración del tipo de nodo perimetral

Casos:

Símbolo Valor String
OPERAND 0 operando
RESULTADO 1 resultado

PropagationDirection

Enum de dirección de propagación

Casos:

Símbolo Valor String
NINGUNO 0 NINGUNO
HACIA ADELANTE 1 HACIA ADELANTE
HACIA ATRÁS 2 HACIA ATRÁS
BOTH 3 BOTH

ReductionOp

Enum de operación de reducción

Casos:

Símbolo Valor String
SUM 0 suma
MÁX. 1 máx.
MIN 2 min