'mpmd' گویش

عملیات

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 دقیقه