عملیات
mpmd.assign
(mpmd::AssignOp)
عملیات را اختصاص دهید
نحو:
operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)
یک تانسور محلی را به یک مش اختصاص می دهد که به طور کامل در آن مش تکرار شود.
این یک عملیات موقت است که هنگام پایین آوردن jax ops برای انتقال از انواع محلی به انواع مش معرفی می شود. این عملیات در حین واردات حذف خواهند شد، زمانی که ورودیها و نتایج عملیات عملکرد به تانسورهای مش تبدیل میشوند.
نام مش نوع نتیجه باید با یک مش در توپولوژی مطابقت داشته باشد و نوع سراسری آن باید با نوع عملوند یکسان باشد.
مبدا assign op مبدا مش است، به عنوان مثال named_computation، مش استنتاج و غیره.
ویژگی ها: 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)
برای اپراتور
نتیجه اجرای یک تابع بدنه برای تعداد ثابتی از تکرارها را با شاخص تکرار موجود در بدنه برمیگرداند.
یک ضریب unroll اختیاری، که باید تعداد تکرارها را تقسیم کند، میتواند مشخص شود تا بدنه op را بر آن ضریب باز کند، یعنی برای unroll factor N، بدنه برای ایجاد N کپی تکرار میشود و تعداد تکرارها با ضریب 1/N کاهش مییابد. هر کپی به جز نسخه اول از نتایج نسخه قبلی به جای آرگومان های بلوک استفاده می کند و شاخص تکرار در ضریب unroll ضرب می شود و پس از هر کپی افزایش می یابد.
عملگر 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 منفرد اجرا شود.
قطعه فقط تانسورهای مش را می گیرد و برمی گرداند که به مش همان قطعه اختصاص داده شده اند.
نام مش قطعه باید با یک مش در توپولوژی مطابقت داشته باشد.
این قطعه شامل فهرستی از مبدا، یعنی ابرداده با اطلاعات مربوط به named_computations اصلی است که این قطعه را تشکیل میدهند، و اگر یک قطعه تعریفشده توسط کاربر باشد، یک staged_id تعریف میشود، بهعنوان مثال، فهرستی از مبداها خالی نیست. in_shardings اختیاری تقسیم آرگومان های بلوک یک قطعه را مشخص می کند که با عملوندها مطابقت دارند. out_shardings اختیاری تقسیم بندی نتایج را مشخص می کند.
منطقه قطعه نباید هیچ متغیر آزاد داشته باشد، و نوع هر آرگومان بلوک و مقادیر بازگشتی در منطقه، نوع تانسور سراسری تانسور مش مربوطه است.
صفات: 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 تولید شده است یا خیر.
منطقه op نباید هیچ متغیر آزاد داشته باشد و نوع هر آرگومان بلوک و مقادیر برگشتی در منطقه باید با نوع ورودیها و نوع بازگشتی op یکی باشد.
صفات: IsolatedFromAbove
، RecursiveMemoryEffects
، RecursivelySpeculatableImplTrait
، SingleBlockImplicitTerminator<ReturnOp>
، SingleBlock
رابط ها: ConditionallySpeculatable
ویژگی ها:
صفت | نوع MLIR | توضیحات |
---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | منشا محاسبات مشخص شده توسط کاربر. |
عملگرها:
عملوند | توضیحات |
---|---|
tensors | متغیر تانسور رتبهبندی شده 4/6/8/16/32/64 بیتی شناور یا bool یا 2/4/8/16/32/64 بیتی از نوع صحیح یا مختلط با عناصر شناور 32/64 بیتی یا مقادیر کوانتیزهشده یا نشانهای هر تانسور |
نتایج:
نتیجه | توضیحات |
---|---|
results | متغیر تانسور رتبهبندی شده 4/6/8/16/32/64 بیتی شناور یا bool یا 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
) باشند و بنابراین میتوانند در سطوح مختلف پشته 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)
یک تانسور توزیع شده را از یک شبکه به شبکه دیگر منتقل می کند.
نام مش انواع عملوند و نتیجه باید با مش در توپولوژی مطابقت داشته باشد و انواع سراسری آنها باید یکسان باشد.
ویژگی ها: 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 ops برای انتقال از انواع محلی به انواع مش معرفی می شود. این عملیات در حین واردات حذف خواهند شد، زمانی که ورودیها و نتایج عملیات عملکرد به تانسورهای مش تبدیل میشوند.
نام مش نوع عملوند باید با یک مش در توپولوژی مطابقت داشته باشد و نوع سراسری آن باید با نوع نتیجه یکسان باشد.
ویژگی ها: 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++ | توضیحات |
---|---|---|
مش_نام | ::llvm::StringRef | مش_نام |
ریشه ها | ::llvm::ArrayRef<OriginAttr> | ریشه ها |
MeshesWithOriginsAttr
لیستی از مش ها با منشاء آنها.
نحو:
#mpmd.meshes_with_origins<
::llvm::ArrayRef<MeshWithOriginsAttr> # value
>
پارامترها:
پارامتر | نوع C++ | توضیحات |
---|---|---|
ارزش | ::llvm::ArrayRef<MeshWithOriginsAttr> |
به نام MeshAttr
یک جفت با نام و مش.
نحو:
#mpmd.named_mesh<
::llvm::StringRef, # name
sdy::MeshAttr # mesh
>
پارامترها:
پارامتر | نوع C++ | توضیحات |
---|---|---|
نام | ::llvm::StringRef | نام |
مش | sdy::MeshAttr | مش |
OriginAttr
منشاء انتساب مش.
نحو:
#mpmd.origin<
::llvm::StringRef # origin_label
>
منشا یک انتساب مش.
origin_label
یک برچسب قابل خواندن توسط انسان برای مبدا است. در نظر گرفته شده است که برای اهداف اشکال زدایی استفاده شود.
پارامترها:
پارامتر | نوع C++ | توضیحات |
---|---|---|
مبدا_برچسب | ::llvm::StringRef | مبدا_برچسب |
ReductionAttr
نشان دهنده کاهش است.
نحو:
#mpmd.reduction<
::mlir::mpmd::ReductionType # reduction_type
>
پارامترها:
پارامتر | نوع C++ | توضیحات |
---|---|---|
کاهش_نوع | ::mlir::mpmd::ReductionType | تعدادی از نوع ReductionType |
TopologyAttr
توپولوژی مش های نامگذاری شده
نحو:
#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 |
Enums
نوع کاهش
ویژگی نوع کاهش
موارد:
نماد | ارزش | رشته |
---|---|---|
هیچکدام | 0 | هیچ کدام |
kAdd | 1 | اضافه کردن |
kMax | 2 | حداکثر |
کیلومتر دقیقه | 3 | دقیقه |
kMul | 4 | mul |
kOr | 5 | یا |
kAnd | 6 | و |
EdgeNodeType
نوع گره لبه enum
موارد:
نماد | ارزش | رشته |
---|---|---|
OPERAND | 0 | عملوند |
نتیجه | 1 | نتیجه |
جهت انتشار
جهت انتشار enum
موارد:
نماد | ارزش | رشته |
---|---|---|
هیچکدام | 0 | هیچکدام |
به جلو | 1 | به جلو |
عقب | 2 | عقب |
هر دو | 3 | هر دو |