'mpmd' گویش

عملیات

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 هر دو