Операции
mpmd.assign (mpmd::AssignOp)
Назначить операцию
Синтаксис:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
Присваивает сетке локальный тензор, полностью реплицированный внутри этой сетки.
Это временная операция, которая вводится при понижении уровня операций jax для перехода от локальных типов к типам сетки. Эти операции будут удалены во время импорта, когда входные данные и результаты операции func станут тензорами сетки.
Название сетки результирующего типа должно соответствовать сетке в топологии, а её глобальный тип должен быть идентичен типу операнда.
Истоки операции присваивания находятся в ядре сетки, например, в ядре именованных вычислений, ядре вывода сетки и т. д.
Черты: AlwaysSpeculatableImplTrait , HasParent<::mlir::func::FuncOp, ForOp>
Интерфейсы: ConditionallySpeculatable , NoMemoryEffect (MemoryEffectOpInterface)
Эффекты: MemoryEffects::Effect{}
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
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
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
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
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
iterations | ::mlir::IntegerAttr | 32-битный беззнаковый целочисленный атрибут |
unroll_factor | ::mlir::IntegerAttr | 32-битный беззнаковый целочисленный атрибут |
Операнды:
| Операнд | Описание |
|---|---|
tensors | вариативный любого нетокенного типа |
Результаты:
| Результат | Описание |
|---|---|
results | вариативный любого нетокенного типа |
mpmd.fragment (mpmd::FragmentOp)
Фрагментная операция
Назначает вычислительный блок, то есть блок операций, конкретной сетке в топологии MPMD, который предназначен для выполнения в виде отдельного фрагмента программы SPMD.
Фрагмент принимает и возвращает только те тензоры сетки, которые присвоены той же сетке, что и сам фрагмент.
Название сетки фрагмента должно соответствовать сетке в топологии.
Фрагмент включает список источников, то есть метаданные с информацией об исходных именованных вычислениях, которые сформировали этот фрагмент, и идентификатор этапа (staged_id), определенный , если это пользовательский фрагмент, то есть он имеет непустой список источников. Необязательный параметр in_shardings определяет сегментацию аргументов блока фрагмента, которые соответствуют операндам. Необязательный параметр out_shardings определяет сегментацию результатов.
В области фрагмента не должно быть свободных переменных, а тип аргументов каждого блока и возвращаемых значений в этой области соответствует глобальному тензорному типу соответствующего тензора сетки.
Traits: HasParent<::mlir::func::FuncOp, ForOp> , IsolatedFromAbove , RecursiveMemoryEffects , RecursivelySpeculatableImplTrait , SingleBlockImplicitTerminator<ReturnOp> , SingleBlock
Интерфейсы: ConditionallySpeculatable , ShardableDataFlowOpInterface
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
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
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
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
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
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{}
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
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{}
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
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{}
Атрибуты:
| Атрибут | Тип MLIR | Описание |
|---|---|---|
origin | ::mlir::StringAttr | строковый атрибут |
Операнды:
| Операнд | Описание |
|---|---|
tensor | тензорный тип сетки |
Результаты:
| Результат | Описание |
|---|---|
result | тензор любых значений, не являющихся токенами. |
Атрибуты
MeshWithOriginsAttr
Сетка с указанием ее происхождения.
Синтаксис:
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
Параметры:
| Параметр | тип C++ | Описание |
|---|---|---|
| mesh_name | ::llvm::StringRef | mesh_name |
| происхождение | ::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 |
ReductionAttr
Обозначает уменьшение.
Синтаксис:
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
Параметры:
| Параметр | тип C++ | Описание |
|---|---|---|
| reduction_type | ::mlir::mpmd::ReductionType | перечисление типа ReduceType |
ТопологияАттр
Топология именованных сеток.
Синтаксис:
#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++ | Описание |
|---|---|---|
| mesh_name | ::llvm::StringRef | название сетки |
| ранжированный_тензор_тип | ::mlir::RankedTensorType | ранжированный тензорный тип |
| шардинг | ::mlir::sdy::TensorShardingAttr | |
| тип памяти | ::mlir::StringAttr |
Перечисления
ReductionType
Атрибут типа сокращения
Случаи:
| Символ | Ценить | Нить |
|---|---|---|
| kNone | 0 | никто |
| kAdd | 1 | добавлять |
| кМакс | 2 | макс |
| кМин | 3 | мин |
| kMul | 4 | мул |
| кор | 5 | или |
| кАнд | 6 | и |
EdgeNodeType
перечисление типов узлов ребер
Случаи:
| Символ | Ценить | Нить |
|---|---|---|
| ОПЕРАНД | 0 | операнд |
| РЕЗУЛЬТАТ | 1 | результат |
Направление распространения
Перечисление направлений распространения
Случаи:
| Символ | Ценить | Нить |
|---|---|---|
| НИКТО | 0 | НИКТО |
| ВПЕРЕД | 1 | ВПЕРЕД |
| НАЗАД | 2 | НАЗАД |
| ОБА | 3 | ОБА |
ReductionOp
Сокращение открытого списка
Случаи:
| Символ | Ценить | Нить |
|---|---|---|
| СУММА | 0 | сумма |
| МАКС | 1 | макс |
| МИН | 2 | мин |