عملیات
mpmd.assign (mpmd::AssignOp)
عملیات انتساب
نحو:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
یک تانسور محلی را به یک مش به صورت کامل تکرار شده در آن مش اختصاص میدهد.
این یک عملیات موقت است که هنگام کاهش عملیات jax، برای انتقال از انواع محلی به انواع مش، معرفی میشود. این عملیاتها هنگام وارد کردن، زمانی که ورودیها و نتایج عملیات تابع به تانسورهای مش تبدیل میشوند، حذف میشوند.
The mesh name of the result type should correspond to a mesh in the topology, and its global type should be identical to the operand type.
مبداء عملگر assign، مبداء مش است، مثلاً named_computation، استنتاج مش و غیره.
Traits: AlwaysSpeculatableImplTrait , HasParent<::mlir::func::FuncOp, ForOp>
Interfaces: ConditionallySpeculatable , NoMemoryEffect (MemoryEffectOpInterface)
Effects: MemoryEffects::Effect{}
ویژگیها:
| ویژگی | نوع MLIR | توضیحات |
|---|---|---|
origin | ::mlir::StringAttr | ویژگی رشته |
عملوندها:
| عملوند | توضیحات |
|---|---|
tensor | تانسور هر مقدار غیر توکنی |
نتایج:
| نتیجه | توضیحات |
|---|---|
result | نوع تانسور مش |
mpmd.broadcast (mpmd::پخش عملیات)
Broadcast operation
نحو:
operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)
اجازه میدهد تا یک تانسور در هر مش مورد استفاده، منتقل (یا تکثیر) شود. هنگام انتقال، مبدا انتقال، مکان فعلی عملوند است.
Traits: AlwaysSpeculatableImplTrait , SameOperandsAndResultType
Interfaces: 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
Attributes:
| ویژگی | نوع MLIR | توضیحات |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | flat symbol reference attribute |
عملوندها:
| عملوند | توضیحات |
|---|---|
tensors | متغیر تنسور از هر مقدار غیر توکنی یا نوع تنسور مش |
نتایج:
| نتیجه | توضیحات |
|---|---|
| «بینام» | متغیری از تانسور از هر مقدار غیر توکنی یا نوع تانسور مش |
mpmd.for (mpmd::ForOp)
For operator
نتیجه اجرای یک تابع بدنه را برای تعداد ثابتی از تکرارها، با شاخص تکرار موجود در بدنه، برمیگرداند.
یک فاکتور باز شدن اختیاری، که باید تعداد تکرارها را تقسیم کند، میتواند برای باز شدن بدنهی عملیات بر آن فاکتور مشخص شود، یعنی برای فاکتور باز شدن N، بدنه برای ایجاد N کپی تکثیر میشود و تعداد تکرارها با ضریب 1/N کاهش مییابد. هر کپی به جز اولین کپی، به جای آرگومانهای بلوک، از نتایج کپی قبلی استفاده میکند و شاخص تکرار در فاکتور باز شدن ضرب شده و پس از هر کپی افزایش مییابد.
عملگر for میتواند هر نوعی را بپذیرد و برگرداند، اما TypeID این نوعها باید یکسان باشد -- مثلاً همه انواع تانسور یا همه انواع مش MPMD و غیره. این به ما امکان میدهد تا از op در سطوح مختلف استفاده کنیم و پیادهسازی و تبدیلها را به اشتراک بگذاریم.
صفات: HLO_PairwiseSameOperandAndResultType ، RecursiveMemoryEffects ، RecursivelySpeculatableImplTrait ، SingleBlockImplicitTerminator<ReturnOp> ، SingleBlock
Interfaces: ConditionallySpeculatable , LoopLikeOpInterface , OpAsmOpInterface , ShardableDataFlowOpInterface
ویژگیها:
| ویژگی | نوع MLIR | توضیحات |
|---|---|---|
iterations | ::mlir::اختصاصی عدد صحیح | ویژگی عدد صحیح بدون علامت ۳۲ بیتی |
unroll_factor | ::mlir::IntegerAttr | ویژگی عدد صحیح بدون علامت ۳۲ بیتی |
Operands:
| عملوند | توضیحات |
|---|---|
tensors | متغیر از هر نوع غیر توکنی |
نتایج:
| نتیجه | توضیحات |
|---|---|
results | متغیر از هر نوع غیر توکنی |
mpmd.fragment (mpmd::FragmentOp)
عملیات قطعهبندی
Assigns a computation, ie a block of operations, to a specific mesh in an MPMD topology, that is intended to be executed as an individual SPMD program fragment.
این قطعه فقط تانسورهای مش را که به همان مش قطعه اختصاص داده شدهاند، میگیرد و برمیگرداند.
نام مش قطعه باید با یک مش در توپولوژی مطابقت داشته باشد.
این قطعه شامل فهرستی از مبدأها، یعنی فرادادههایی با اطلاعات مربوط به named_computations اصلی که این قطعه را تشکیل دادهاند، و یک staged_id تعریف شده است، اگر یک قطعه تعریف شده توسط کاربر باشد، یعنی دارای فهرستی غیر تهی از مبدأها باشد. in_shardings اختیاری، تقسیمبندی آرگومانهای بلوک یک قطعه را که مربوط به عملوندها هستند، مشخص میکند. out_shardings اختیاری، تقسیمبندی نتایج را مشخص میکند.
ناحیه قطعه نباید هیچ متغیر آزادی داشته باشد و نوع هر آرگومان بلوک و مقادیر برگشتی در ناحیه، نوع تانسور سراسری تانسور مش مربوطه است.
صفات: HasParent<::mlir::func::FuncOp, ForOp> ، IsolatedFromAbove ، RecursiveMemoryEffects ، RecursivelySpeculatableImplTrait ، SingleBlockImplicitTerminator<ReturnOp> ، SingleBlock
Interfaces: ConditionallySpeculatable , ShardableDataFlowOpInterface
ویژگیها:
| ویژگی | نوع MLIR | توضیحات |
|---|---|---|
origin | ::mlir::ArrayAttr | آرایهای از اطلاعات مبدا |
mesh_name | ::mlir::StringAttr | ویژگی رشته |
stage_id | ::mlir::IntegerAttr | ویژگی عدد صحیح بدون علامت ۶۴ بیتی |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Tensor sharding per operand/result of an op |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | تقسیمبندی تانسور به ازای هر عملوند/نتیجه یک عملیات |
عملوندها:
| عملوند | توضیحات |
|---|---|
inputs | متغیر از نوع تانسور مش یا توکن |
نتایج:
| نتیجه | توضیحات |
|---|---|
results | متغیر از نوع تانسور مش یا توکن |
mpmd.fragment_call (mpmd::FragmentCallOp)
عملیات فراخوانی قطعه
نشاندهنده فراخوانی تابعی است که بدنه قطعه MPMD را در خود نگه میدارد، یعنی محاسبهای که به یک مش خاص در توپولوژی MPMD اختصاص داده شده است و قرار است به عنوان یک قطعه برنامه SPMD مجزا اجرا شود.
نام مش قطعه باید با یک مش در توپولوژی تابع در برگیرنده مطابقت داشته باشد، و شکل مش آن باید با شکل تابع فراخوانی شده مطابقت داشته باشد.
The origin specifies the user named computations that contributed to this fragment call eg through merging.
The function input and result types of the callee must be the local tensor types of the corresponding mesh tensors of this op's operands and results respectively.
مثال:
%2 = mpmd.fragment_call<mesh="m1", origin=[]> @my_fragment(%0, %1) :
(mesh_tensor<...>, mesh_tensor<...>) -> mesh_tensor<...>
Traits: HasParent<::mlir::func::FuncOp> , MemRefsNormalizable
رابطها: ArgAndResultAttrsOpInterface ، CallOpInterface ، SymbolUserOpInterface
ویژگیها:
| ویژگی | نوع MLIR | توضیحات |
|---|---|---|
origin | ::mlir::ArrayAttr | آرایهای از اطلاعات مبدا |
mesh_name | ::mlir::StringAttr | string attribute |
callee | ::mlir::FlatSymbolRefAttr | ویژگی مرجع نماد مسطح |
عملوندها:
| عملوند | توضیحات |
|---|---|
tensors | variadic of mesh tensor type |
نتایج:
| نتیجه | توضیحات |
|---|---|
| «بینام» | متغیر از نوع تانسور مش |
mpmd.named_computation (mpmd::NamedComputationOp)
عملیات دامنه نامگذاری شده
یک محاسبه، یعنی یک بلوک از عملیات، را گروهبندی میکند و از طریق ویژگی UserOrigin به آن نام و تعداد انتقال میدهد. این NamedComputation میتواند برای اختصاص یک مش به محاسبه در MPMD یا برای بهینهسازیها استفاده شود.
تعداد جابجایی (پیشفرض=۰) نشان میدهد که آیا محاسبهی نامگذاریشده توسط تعداد مشخصی از تبدیلهای جابجایی JAX AD تولید شده است یا خیر.
ناحیهی مربوط به عملیات نباید هیچ متغیر آزادی داشته باشد، و نوع هر آرگومان بلوک و مقادیر برگشتی در ناحیه باید با نوع ورودیها و نوع برگشتی عملیات یکسان باشد.
ویژگیها: IsolatedFromAbove ، RecursiveMemoryEffects ، RecursivelySpeculatableImplTrait ، SingleBlockImplicitTerminator<ReturnOp> ، SingleBlock
رابطها: ConditionallySpeculatable
ویژگیها:
| ویژگی | نوع MLIR | توضیحات |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | منشأ محاسبات مشخصشده توسط کاربر. |
Operands:
| عملوند | توضیحات |
|---|---|
tensors | متغیری از تانسور رتبهبندیشده با اعداد اعشاری یا بولی 4/6/8/16/32/64 بیتی یا اعداد صحیح یا مختلط 2/4/8/16/32/64 بیتی با عناصر اعشاری 32/64 بیتی یا مقادیر کوانتیزه شده عدد صحیح در هر تانسور یا توکن |
نتایج:
| نتیجه | توضیحات |
|---|---|
results | variadic of ranked tensor of 4/6/8/16/32/64-bit float or bool or 2/4/8/16/32/64-bit integer or complex type with 32/64-bit float elements or per-tensor integer quantized values or token |
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 | string attribute |
Operands:
| عملوند | توضیحات |
|---|---|
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 | variadic of tensor of any non-token type values |
نتایج:
| نتیجه | توضیحات |
|---|---|
result | تانسور هر مقدار غیر توکنی |
mpmd.return (mpmd::ReturnOp)
عملیات mpmd.return ناحیههای متصل به عملیات مبتنی بر ناحیه mpmd را خاتمه میدهد. این عملیات متغیر است: لیستی از مقادیر را به عنوان آرگومان دریافت میکند که نوع آنها میتواند هر مقداری باشد (اما از یک نوع، مثلاً AnyTensor ) و بنابراین میتوان از آنها در سطوح مختلف پشته MPMD IR استفاده مجدد کرد.
نحو:
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)
یک تانسور توزیعشده را از یک مش به مش دیگر منتقل میکند.
نامهای مشِ عملوند و انواع نتیجه باید با مشهای موجود در توپولوژی مطابقت داشته باشند و انواع سراسری آنها نیز باید یکسان باشند.
Traits: AlwaysSpeculatableImplTrait , HasParent<::mlir::func::FuncOp>
رابطها: ConditionallySpeculatable ، NoMemoryEffect (MemoryEffectOpInterface) ، ShardingRuleOpInterface
اثرات: MemoryEffects::Effect{}
عملوندها:
| عملوند | توضیحات |
|---|---|
tensor | mesh tensor type |
نتایج:
| نتیجه | توضیحات |
|---|---|
result | نوع تانسور مش |
mpmd.unassign (mpmd::UnassignOp)
عملیات لغو تخصیص
نحو:
operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)
یک تانسور کاملاً تکثیر شده از یک مش را لغو تخصیص میدهد.
این یک عملیات موقت است که هنگام کاهش عملیات jax، برای انتقال از انواع محلی به انواع مش، معرفی میشود. این عملیاتها هنگام وارد کردن، زمانی که ورودیها و نتایج عملیات تابع به تانسورهای مش تبدیل میشوند، حذف میشوند.
نام مش نوع عملوند باید با یک مش در توپولوژی مطابقت داشته باشد و نوع سراسری آن باید با نوع نتیجه یکسان باشد.
Traits: AlwaysSpeculatableImplTrait , HasParent<::mlir::func::FuncOp, ForOp> , InferTensorType
رابطها: ConditionallySpeculatable ، InferShapedTypeOpInterface ، InferTypeOpInterface ، NoMemoryEffect (MemoryEffectOpInterface)
اثرات: MemoryEffects::Effect{}
ویژگیها:
| ویژگی | نوع MLIR | توضیحات |
|---|---|---|
origin | ::mlir::StringAttr | string attribute |
عملوندها:
| Operand | توضیحات |
|---|---|
tensor | نوع تانسور مش |
نتایج:
| نتیجه | توضیحات |
|---|---|
result | تانسور هر مقدار غیر توکنی |
ویژگیها
مشبایاورجینز
مش با ریشههایش.
نحو:
#mpmd.mesh_with_origins<
::llvm::StringRef, # mesh_name
::llvm::ArrayRef<OriginAttr> # origins
>
پارامترها:
| پارامتر | C++ type | توضیحات |
|---|---|---|
| نام_مش | ::llvm::StringRef | نام_مش |
| خاستگاهها | ::llvm::ArrayRef<OriginAttr> | خاستگاهها |
MeshesWithOriginsAttr
فهرستی از شبکهها به همراه منشأ آنها.
نحو:
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
پارامترها:
| پارامتر | C++ type | توضیحات |
|---|---|---|
| ارزش | ::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
>
The origin of a mesh assignment.
origin_label یک برچسب قابل خواندن توسط انسان برای مبدا است. این برچسب برای اهداف اشکالزدایی در نظر گرفته شده است.
پارامترها:
| پارامتر | C++ type | توضیحات |
|---|---|---|
| برچسب_مبدا | ::llvm::StringRef | برچسب_مبدا |
کاهش Attr
Denotes a reduction.
نحو:
#mpmd.reduction<
`none` | `add` | `max` | `min` | `mul` | `or` | `and` # reduction_type
>
پارامترها:
| پارامتر | C++ type | توضیحات |
|---|---|---|
| نوع_کاهش | ::mlir::mpmd::ReductionType | یک enum از نوع ReductionType |
توپولوژیAttr
توپولوژی مشهای نامگذاری شده.
نحو:
#mpmd.topology<
::llvm::ArrayRef<NamedMeshAttr> # meshes
>
پارامترها:
| پارامتر | C++ type | توضیحات |
|---|---|---|
| مش ها | ::llvm::ArrayRef<NamedMeshAttr> | مشهای توپولوژی |
کاربرOriginAttr
منشأ محاسبات مشخصشده توسط کاربر.
نحو:
#mpmd.user_origin<
::mlir::StringAttr, # userName
int64_t # transposeCount
>
پارامترها:
| پارامتر | نوع C++ | توضیحات |
|---|---|---|
| نام کاربری | ::mlir::StringAttr | |
| transposeCount | int64_t |
انواع
نوع تنسور مش
نوع تانسور مش
Assigns a RankedTensorType to a specific SPMD mesh in the program's MPMD topology of meshes. The type holds an optional sharding that specifies how the tensor is sharded wrt to the SPMD mesh. If the sharding is not present the tensor is fully replicated.
پارامترها:
| پارامتر | نوع C++ | توضیحات |
|---|---|---|
| نام_مش | ::llvm::StringRef | نام مش |
| نوع_تانسور_رتبهبندیشده | ::mlir::RankedTensorType | ranked tensor type |
| sharding | ::mlir::sdy::TensorShardingAttr | |
| نوع حافظه | ::mlir::StringAttr |
انومها
نوع کاهش
ویژگی نوع کاهش
موارد:
| نماد | ارزش | رشته |
|---|---|---|
| هیچ | 0 | هیچ کدام |
| kAdd | 1 | اضافه کردن |
| کی مکس | 2 | حداکثر |
| کیلومتر حداقل | 3 | دقیقه |
| کیلومتر | 4 | مول |
| ک اور | 5 | یا |
| ک اند | 6 | و |
نوع گره لبه
Edge node type enum
موارد:
| نماد | ارزش | رشته |
|---|---|---|
| OPERAND | 0 | عملوند |
| نتیجه | 1 | نتیجه |
جهت انتشار
جهت انتشار شمارشی
Cases:
| نماد | ارزش | رشته |
|---|---|---|
| هیچکدام | 0 | هیچکدام |
| به جلو | 1 | به جلو |
| رو به عقب | 2 | رو به عقب |
| هر دو | 3 | هر دو |
کاهش عملیات
کاهش عملیات شمارشی
موارد:
| نماد | ارزش | رشته |
|---|---|---|
| جمع | 0 | جمع |
| مکس | 1 | حداکثر |
| حداقل | 2 | دقیقه |