Диалект «mpmd»

Операции

mpmd.assign (mpmd::AssignOp)

Назначить операцию

Синтаксис:

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

Назначает локальный тензор сетке, полностью реплицированный внутри этой сетки.

Это временная операция, которая вводится при снижении количества операций JAX для перехода от локальных типов к типам сеток. Эти операции будут удалены при импорте, когда входные данные и результаты операции func станут тензорами сеток.

Имя сетки типа результата должно соответствовать сетке в топологии, а ее глобальный тип должен быть идентичен типу операнда.

Источником операции назначения является источник сетки, например named_computation, вывод сетки и т. д.

Черты: AlwaysSpeculatableImplTrait , HasParent<::mlir::func::FuncOp, ForOp>

Интерфейсы: ConditionallySpeculatable , NoMemoryEffect (MemoryEffectOpInterface)

Эффекты: MemoryEffects::Effect{}

Атрибуты:

Атрибут Тип МЛИР Описание
origin ::mlir::StringAttr строковый атрибут

Операнды:

Операнд Описание
tensor тензор любого типа значений

Результаты:

Результат Описание
result тип тензора сетки

mpmd.broadcast (mpmd::BroadcastOp)

Трансляционная операция

Синтаксис:

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

Позволяет переносить (или реплицировать) тензор в любой сетке, где он используется. При переносе началом координат является текущее местоположение операнда.

Черты: AlwaysSpeculatableImplTrait , SameOperandsAndResultType

Интерфейсы: ConditionallySpeculatable , InferTypeOpInterface , NoMemoryEffect (MemoryEffectOpInterface)

Эффекты: MemoryEffects::Effect{}

Операнды:

Операнд Описание
tensor тензор любого типа значений

Результаты:

Результат Описание
result тензор любого типа значений

mpmd.call (mpmd::CallOp)

Специфическая функция вызова MPMD

Синтаксис:

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

Операция вызова функции. Полезно, например, для обёртывания тела циклов в объявления функций с целью уменьшения размера кода.

Интерфейсы: ArgAndResultAttrsOpInterface , CallOpInterface , SymbolUserOpInterface

Атрибуты:

Атрибут Тип МЛИР Описание
callee ::mlir::FlatSymbolRefAttr атрибут ссылки на плоский символ

Операнды:

Операнд Описание
tensors вариативность тензора любого типа значений или типа тензора сетки

Результаты:

Результат Описание
«безымянный» вариативность тензора любого типа значений или типа тензора сетки

mpmd.for (mpmd::ForOp)

Для оператора

Возвращает результат выполнения функции тела для фиксированного числа итераций, причем индекс итерации доступен в теле.

Необязательный коэффициент развёртки, который должен делить количество итераций, может быть указан для развёртывания тела операции на этот коэффициент. Например, при коэффициенте развёртки N тело реплицируется для создания N копий, а количество итераций уменьшается в 1/N раз. Каждая копия, кроме первой, использует результаты предыдущей копии вместо аргументов блока, а индекс итерации умножается на коэффициент развёртки и увеличивается после каждой копии.

Оператор for может принимать и возвращать любые типы, но их TypeID должен быть одинаковым — например, все типы тензоров или все типы сеток MPMD и т. д. Это позволяет нам использовать оператор на разных уровнях, разделяя реализацию и преобразования.

Черты: HLO_PairwiseSameOperandAndResultType , RecursiveMemoryEffects , RecursivelySpeculatableImplTrait , SingleBlockImplicitTerminator<ReturnOp> , SingleBlock

Интерфейсы: ConditionallySpeculatable , LoopLikeOpInterface , OpAsmOpInterface , ShardableDataFlowOpInterface

Атрибуты:

Атрибут Тип МЛИР Описание
iterations ::mlir::IntegerAttr 32-битный беззнаковый целочисленный атрибут
unroll_factor ::mlir::IntegerAttr 32-битный беззнаковый целочисленный атрибут

Операнды:

Операнд Описание
tensors вариативный любого типа

Результаты:

Результат Описание
results вариативный любого типа

mpmd.fragment (mpmd::FragmentOp)

Операция «Фрагмент»

Назначает вычисление, т. е. блок операций, определенной сетке в топологии MPMD, которая должна выполняться как отдельный фрагмент программы SPMD.

Фрагмент принимает и возвращает только те тензоры сетки, которые назначены той же сетке, что и фрагмент.

Имя сетки фрагмента должно соответствовать сетке в топологии.

Фрагмент включает список источников, т.е. метаданные с информацией об исходных named_computations, которые сформировали этот фрагмент, и staged_id, определяемый только тогда, когда это пользовательский фрагмент, т.е. он имеет непустой список источников. Необязательный параметр in_shardings задаёт шардинг аргументов блока фрагмента, соответствующих операндам. Необязательный параметр out_shardings задаёт шардинг результатов.

В области фрагмента не должно быть свободных переменных, а тип аргументов каждого блока и возвращаемых значений в области — это глобальный тип тензора соответствующего тензора сетки.

Черты: HasParent<::mlir::func::FuncOp, ForOp> , IsolatedFromAbove , RecursiveMemoryEffects , RecursivelySpeculatableImplTrait , SingleBlockImplicitTerminator<ReturnOp> , SingleBlock

Интерфейсы: ConditionallySpeculatable , ShardableDataFlowOpInterface

Атрибуты:

Атрибут Тип МЛИР Описание
origin ::mlir::ArrayAttr массив информации о происхождении
mesh_name ::mlir::StringAttr строковый атрибут
stage_id ::mlir::IntegerAttr 64-битный беззнаковый целочисленный атрибут
in_shardings ::mlir::sdy::TensorShardingPerValueAttr Тензорное шардинг по операндам/результатам операции
out_shardings ::mlir::sdy::TensorShardingPerValueAttr Тензорное шардинг по операндам/результатам операции

Операнды:

Операнд Описание
inputs вариативность типа тензора сетки

Результаты:

Результат Описание
results вариативность типа тензора сетки

mpmd.fragment_call (mpmd::FragmentCallOp)

Операция вызова фрагмента

Представляет вызов функции, содержащей тело фрагмента MPMD, т. е. вычисление, назначенное определенной сетке в топологии MPMD, которое предназначено для выполнения как отдельный фрагмент программы SPMD.

Имя сетки фрагмента должно соответствовать сетке в топологии охватывающей функции, а форма этой сетки должна соответствовать форме вызываемой функции.

Источник указывает на названные пользователем вычисления, которые способствовали вызову этого фрагмента, например, посредством слияния.

Типы входных данных и результата функции вызываемой функции должны быть локальными тензорными типами соответствующих тензоров сетки операндов и результатов этой операции соответственно.

Пример:

%2 = mpmd.fragment_call<mesh="m1", origin=[]> @my_fragment(%0, %1) :
  (mesh_tensor<...>, mesh_tensor<...>) -> mesh_tensor<...>

Признаки: HasParent<::mlir::func::FuncOp> , MemRefsNormalizable

Интерфейсы: ArgAndResultAttrsOpInterface , CallOpInterface , SymbolUserOpInterface

Атрибуты:

Атрибут Тип МЛИР Описание
origin ::mlir::ArrayAttr массив информации о происхождении
mesh_name ::mlir::StringAttr строковый атрибут
callee ::mlir::FlatSymbolRefAttr атрибут ссылки на плоский символ

Операнды:

Операнд Описание
tensors вариативность типа тензора сетки

Результаты:

Результат Описание
«безымянный» вариативность типа тензора сетки

mpmd.named_computation (mpmd::NamedComputationOp)

Операция с именованной областью действия

Группирует вычисление, т.е. блок операций, и присваивает ему имя и количество транспонирований через атрибут UserOrigin. Этот NamedComputation можно использовать для назначения сетки вычислению в MPMD или для оптимизации.

Счетчик транспонирования (по умолчанию = 0) указывает, было ли указанное вычисление произведено с помощью определенного количества преобразований транспонирования JAX AD.

В области операции не должно быть свободных переменных, а тип аргументов каждого блока и возвращаемых значений в области должен совпадать с типом входных данных и типом возвращаемого значения операции.

Черты: IsolatedFromAbove , RecursiveMemoryEffects , RecursivelySpeculatableImplTrait , SingleBlockImplicitTerminator<ReturnOp> , SingleBlock

Интерфейсы: ConditionallySpeculatable

Атрибуты:

Атрибут Тип МЛИР Описание
origin ::mlir::mpmd::UserOriginAttr Происхождение пользовательских вычислений.

Операнды:

Операнд Описание
tensors вариативный ранжированный тензор 4/6/8/16/32/64-битного типа с плавающей точкой или логического типа или 2/4/8/16/32/64-битного целого или комплексного типа с 32/64-битными элементами с плавающей точкой или целочисленными квантованными значениями или токенами для каждого тензора

Результаты:

Результат Описание
results вариативный ранжированный тензор 4/6/8/16/32/64-битного типа с плавающей точкой или логического типа или 2/4/8/16/32/64-битного целого или комплексного типа с 32/64-битными элементами с плавающей точкой или целочисленными квантованными значениями или токенами для каждого тензора

mpmd.named_tensor (mpmd::NamedTensorOp)

Назначить тензор сетке

Синтаксис:

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

Идентификационная операция, которая связывает результат тензора с заданным именем. Этот NamedTensor можно использовать для назначения сетки тензору в MPMD.

Черты: AlwaysSpeculatableImplTrait , SameOperandsAndResultType

Интерфейсы: ConditionallySpeculatable , InferTypeOpInterface , NoMemoryEffect (MemoryEffectOpInterface)

Эффекты: MemoryEffects::Effect{}

Атрибуты:

Атрибут Тип МЛИР Описание
name ::mlir::StringAttr строковый атрибут

Операнды:

Операнд Описание
tensor тензор любого типа значений

Результаты:

Результат Описание
result тензор любого типа значений

mpmd.reduce (mpmd::ReduceOp)

Операция по уменьшению перекрестной сетки

Синтаксис:

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

Позволяет преобразовывать тензор в различные сетки, а затем транслировать его туда, где его необходимо использовать.

Черты: AlwaysSpeculatableImplTrait , SameOperandsAndResultType

Интерфейсы: ConditionallySpeculatable , NoMemoryEffect (MemoryEffectOpInterface)

Эффекты: MemoryEffects::Effect{}

Атрибуты:

Атрибут Тип МЛИР Описание
reduction ::mlir::mpmd::ReductionAttr Обозначает сокращение.

Операнды:

Операнд Описание
tensors вариативность тензора любого типа значений

Результаты:

Результат Описание
result тензор любого типа значений

mpmd.return (mpmd::ReturnOp)

Операция mpmd.return завершает работу с регионами, прикреплёнными к операциям mpmd, основанным на регионах. Она вариативна: в качестве аргументов она принимает список значений, типы которых могут быть любыми (но одного вида, например, AnyTensor ), и поэтому может использоваться повторно на различных уровнях стека IR MPMD.

Синтаксис:

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

Черты: AlwaysSpeculatableImplTrait , Terminator

Интерфейсы: ConditionallySpeculatable , NoMemoryEffect (MemoryEffectOpInterface)

Эффекты: MemoryEffects::Effect{}

Операнды:

Операнд Описание
results вариативный любого типа

mpmd.transfer (mpmd::TransferOp)

Операция переноса

Синтаксис:

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

Переносит распределенный тензор из одной сетки в другую.

Имена сеток операнда и типов результата должны соответствовать сеткам в топологии, а их глобальные типы должны быть идентичны.

Черты: AlwaysSpeculatableImplTrait , HasParent<::mlir::func::FuncOp>

Интерфейсы: ConditionallySpeculatable , NoMemoryEffect (MemoryEffectOpInterface) , ShardingRuleOpInterface

Эффекты: MemoryEffects::Effect{}

Операнды:

Операнд Описание
tensor тип тензора сетки

Результаты:

Результат Описание
result тип тензора сетки

mpmd.unassign (mpmd::UnassignOp)

Операция отмены назначения

Синтаксис:

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

Отменяет назначение полностью реплицированного тензора из сетки.

Это временная операция, которая вводится при снижении количества операций JAX для перехода от локальных типов к типам сеток. Эти операции будут удалены при импорте, когда входные данные и результаты операции func станут тензорами сеток.

Имя сетки типа операнда должно соответствовать сетке в топологии, а ее глобальный тип должен быть идентичен типу результата.

Признаки: AlwaysSpeculatableImplTrait , HasParent<::mlir::func::FuncOp, ForOp> , InferTensorType

Интерфейсы: ConditionallySpeculatable , InferShapedTypeOpInterface , InferTypeOpInterface , NoMemoryEffect (MemoryEffectOpInterface)

Эффекты: MemoryEffects::Effect{}

Атрибуты:

Атрибут Тип МЛИР Описание
origin ::mlir::StringAttr строковый атрибут

Операнды:

Операнд Описание
tensor тип тензора сетки

Результаты:

Результат Описание
result тензор любого типа значений

Атрибуты

MeshWithOriginsAttr

Связь со своим происхождением.

Синтаксис:

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

Параметры:

Параметр Тип C++ Описание
имя_сетки ::llvm::StringRef имя_сетки
происхождение ::llvm::ArrayRef<OriginAttr> происхождение

MeshesWithOriginsAttr

Список сеток с указанием их происхождения.

Синтаксис:

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

Параметры:

Параметр Тип C++ Описание
ценить ::llvm::ArrayRef<MeshWithOriginsAttr>

NamedMeshAttr

Пара с именем и сеткой.

Синтаксис:

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

Параметры:

Параметр Тип C++ Описание
имя ::llvm::StringRef имя
сетка sdy::MeshAttr сетка

OriginAttr

Происхождение назначения сетки.

Синтаксис:

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

Происхождение назначения сетки.

origin_label — это понятная человеку метка источника. Она предназначена для использования в целях отладки.

Параметры:

Параметр Тип C++ Описание
origin_label ::llvm::StringRef origin_label

СокращениеАттр

Обозначает сокращение.

Синтаксис:

#mpmd.reduction<
  ::mlir::mpmd::ReductionType   # reduction_type
>

Параметры:

Параметр Тип C++ Описание
тип_сокращения ::mlir::mpmd::ReductionType перечисление типа ReductionType

ТопологияАттр

Топология именованных сеток.

Синтаксис:

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

Параметры:

Параметр Тип C++ Описание
сетки ::llvm::ArrayRef<NamedMeshAttr> топологические сетки

UserOriginAttr

Происхождение пользовательских вычислений.

Синтаксис:

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

Параметры:

Параметр Тип C++ Описание
имя пользователя ::mlir::StringAttr
transposeCount int64_t

Типы

MeshTensorType

Тип тензора сетки

Назначает тип RankedTensorType конкретной SPMD-сетке в топологии MPMD программы. Этот тип содержит необязательный шардинг, определяющий, как шардинг тензора осуществляется относительно SPMD-сетки. Если шардинг отсутствует, тензор полностью реплицируется.

Параметры:

Параметр Тип C++ Описание
имя_сетки ::llvm::StringRef имя сетки
ранжированный_тензорный_тип ::mlir::RankedTensorType ранжированный тип тензора
шардинг ::mlir::sdy::TensorShardingAttr
вид_памяти ::mlir::StringAttr

Перечисления

Тип сокращения

Атрибут типа сокращения

Случаи:

Символ Ценить Нить
kNone 0 никто
kAdd 1 добавлять
кМакс 2 макс
кМин 3 мин
кМул 4 мул
кОр 5 или
кАнд 6 и

EdgeNodeType

Перечисление типов граничных узлов

Случаи:

Символ Ценить Нить
ОПЕРАНД 0 операнд
РЕЗУЛЬТАТ 1 результат

НаправлениеРаспространения

Направление распространения перечисления

Случаи:

Символ Ценить Нить
НИКТО 0 НИКТО
ВПЕРЕД 1 ВПЕРЕД
НАЗАД 2 НАЗАД
ОБА 3 ОБА