'mpmd' Lehçesi

İşlemler

mpmd.assign (mpmd::AssignOp)

Atama işlemi

Söz dizimi:

operation ::= `mpmd.assign` attr-dict $tensor `:` functional-type(operands, results)

Bir örgüye, o örgü içinde tamamen çoğaltılmış olarak yerel bir tensör atar.

Bu, yerel türlerden ağ türlerine geçiş yapmak için jax işlemlerini azaltırken kullanılan geçici bir işlemdir. Bu işlemler, içe aktarma sırasında kaldırılır. Bu sırada, işlev işleminin girişleri ve sonuçları örgü tensörleri haline gelir.

Sonuç türünün ağ adı, topolojideki bir ağa karşılık gelmeli ve genel türü, işlenen türüyle aynı olmalıdır.

Atama işleminin kaynağı, ağın kaynağıdır (ör.named_computation, mesh inference vb.).

Özellikler: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>

Arayüzler: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Etkiler: MemoryEffects::Effect{}

Özellikler:

ÖzellikMLIR TürüAçıklama
origin::mlir::StringAttrdize özelliği

İşlenenler:

İşlem Gören Açıklama
tensor Herhangi bir jeton dışı türdeki değerlerin tensörü

Sonuçlar:

Sonuç Açıklama
result mesh tensor type

mpmd.broadcast (mpmd::BroadcastOp)

Yayın işlemi

Söz dizimi:

operation ::= `mpmd.broadcast` attr-dict $tensor `:` type($tensor)

Tensörün, kullanıldığı herhangi bir ağda aktarılmasına (veya kopyalanmasına) olanak tanır. Her aktarıldığında, aktarımın kaynağı işlenenin geçerli konumudur.

Özellikler: AlwaysSpeculatableImplTrait, SameOperandsAndResultType

Arayüzler: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)

Etkiler: MemoryEffects::Effect{}

İşlenenler:

İşlem Gören Açıklama
tensor Herhangi bir jeton dışı türdeki değerlerin tensörü

Sonuçlar:

Sonuç Açıklama
result Herhangi bir jeton dışı türdeki değerlerin tensörü

mpmd.call (mpmd::CallOp)

MPMD'ye özel arama işlevi

Söz dizimi:

operation ::= `mpmd.call` $callee `(` $tensors `)` attr-dict `:` functional-type(operands, results)

İşlev çağrısı işlemi. Örneğin, döngülerin gövdesini işlev bildirimlerine sarmak için kullanışlıdır ve kod boyutunu küçültür.

Arayüzler: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface

Özellikler:

ÖzellikMLIR TürüAçıklama
callee::mlir::FlatSymbolRefAttrdüz sembol referans özelliği

İşlenenler:

İşlem Gören Açıklama
tensors Herhangi bir jeton dışı türdeki değerlerin veya ağ tensörü türünün tensörünün değişken sayıda bağımsız değişkeni

Sonuçlar:

Sonuç Açıklama
"unnamed" Herhangi bir jeton dışı türdeki değerlerin veya ağ tensörü türünün tensörünün değişken sayıda bağımsız değişkeni

mpmd.for (mpmd::ForOp)

Operatörler için

Bir gövde işlevini sabit sayıda yineleme için yürütme sonucunu döndürür. Yineleme dizini gövdede kullanılabilir.

İsteğe bağlı bir açma faktörü, yineleme sayısını bölmelidir.İşlemin gövdesini bu faktörle açmak için belirtilebilir. Örneğin, N açma faktörü için gövde, N kopya oluşturmak üzere çoğaltılır ve yineleme sayısı 1/N faktörüyle azaltılır. İlk kopya hariç her kopyada, blok bağımsız değişkenleri yerine önceki kopyanın sonuçları kullanılır. Yineleme dizini, her kopyadan sonra açma faktörüyle çarpılır ve artırılır.

Bir for operatörü herhangi bir türü kabul edip döndürebilir ancak bunların TypeID'si aynı olmalıdır (ör.tüm tensör türleri veya tüm MPMD ağ türleri vb.). Bu, operatörün çeşitli düzeylerde kullanılmasını, uygulamaların ve dönüşümlerin paylaşılmasını sağlar.

Özellikler: HLO_PairwiseSameOperandAndResultType, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock

Arayüzler: ConditionallySpeculatable, LoopLikeOpInterface, OpAsmOpInterface, ShardableDataFlowOpInterface

Özellikler:

ÖzellikMLIR TürüAçıklama
iterations::mlir::IntegerAttr32 bitlik işaretsiz tam sayı özelliği
unroll_factor::mlir::IntegerAttr32 bitlik işaretsiz tam sayı özelliği

İşlenenler:

İşlem Gören Açıklama
tensors Herhangi bir jeton dışı türün değişken sayıda bağımsız değişkeni

Sonuçlar:

Sonuç Açıklama
results Herhangi bir jeton dışı türün değişken sayıda bağımsız değişkeni

mpmd.fragment (mpmd::FragmentOp)

Parça işlemi

Bir hesaplamayı (yani bir işlem bloğunu), MPMD topolojisindeki belirli bir ağa atar. Bu hesaplama, bağımsız bir SPMD program parçası olarak yürütülmek üzere tasarlanmıştır.

Parça, yalnızca parçayla aynı ağa atanmış ağ tensörlerini alır ve döndürür.

Parçanın ağ adı, topolojideki bir ağa karşılık gelmelidir.

Parçada, kaynakların listesi (yani bu parçayı oluşturan orijinal named_computations ile ilgili bilgileri içeren meta veriler) ve kullanıcı tanımlı bir parça olması durumunda (yani boş olmayan bir kaynak listesi varsa) tanımlanan bir staged_id bulunur. İsteğe bağlı olan in_shardings, bir parçanın blok bağımsız değişkenlerinin parçalanmasını belirtir. Bu bağımsız değişkenler, işlenenlere karşılık gelir. İsteğe bağlı out_shardings, sonuçların parçalarını belirtir.

Parçanın bölgesinde serbest değişken olmamalıdır. Bölgedeki her blok bağımsız değişkeninin ve döndürülen değerlerin türü, ilgili ağ tensörünün genel tensör türüdür.

Özellikler: HasParent<::mlir::func::FuncOp, ForOp>, IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock

Arayüzler: ConditionallySpeculatable, ShardableDataFlowOpInterface

Özellikler:

ÖzellikMLIR TürüAçıklama
origin::mlir::ArrayAttrbir dizi kaynak bilgisi
mesh_name::mlir::StringAttrdize özelliği
stage_id::mlir::IntegerAttr64 bit işaretsiz tam sayı özelliği
in_shardings::mlir::sdy::TensorShardingPerValueAttrBir işlemin işleneni/sonucu başına tensör parçalama
out_shardings::mlir::sdy::TensorShardingPerValueAttrBir işlemin işleneni/sonucu başına tensör parçalama

İşlenenler:

İşlem Gören Açıklama
inputs Mesh tensör türü veya jetonun değişken sayıda bağımsız değişkeni

Sonuçlar:

Sonuç Açıklama
results Mesh tensör türü veya jetonun değişken sayıda bağımsız değişkeni

mpmd.fragment_call (mpmd::FragmentCallOp)

Parça çağırma işlemi

Bir MPMD parçası gövdesi içeren bir işlev çağrısını temsil eder. Yani, bir MPMD topolojisinde belirli bir ağa atanmış ve bağımsız bir SPMD program parçası olarak yürütülmesi amaçlanan bir hesaplama.

Parçanın ağ adı, kapsayan işlevin topolojisindeki bir ağa karşılık gelmeli ve bu ağ şekli, çağrılan işlevin şekliyle eşleşmelidir.

Kaynak, bu parça çağrısına katkıda bulunan adlandırılmış kullanıcı hesaplamalarını (ör. birleştirme yoluyla) belirtir.

Çağrılan işlevin giriş ve sonuç türleri, sırasıyla bu işlemin işlenenlerinin ve sonuçlarının karşılık gelen ağ tensörlerinin yerel tensör türleri olmalıdır.

Örnek:

%2 = mpmd.fragment_call<mesh="m1",> origin=[] @my_fragment(%0, %1) :
  (m<esh>_tensor..., m<esh>_te>nsor...) - m<esh>_tensor...

Özellikler: HasParent<::mlir::func::FuncOp>, MemRefsNormalizable

Arayüzler: ArgAndResultAttrsOpInterface, CallOpInterface, SymbolUserOpInterface

Özellikler:

ÖzellikMLIR TürüAçıklama
origin::mlir::ArrayAttrbir dizi kaynak bilgisi
mesh_name::mlir::StringAttrdize özelliği
callee::mlir::FlatSymbolRefAttrdüz sembol referans özelliği

İşlenenler:

İşlem Gören Açıklama
tensors ağ tensörü türünün değişken sayıda bağımsız değişkeni

Sonuçlar:

Sonuç Açıklama
"unnamed" ağ tensörü türünün değişken sayıda bağımsız değişkeni

mpmd.named_computation (mpmd::NamedComputationOp)

Adlandırılmış kapsam işlemi

Bir hesaplamayı (yani bir işlem bloğunu) gruplandırır ve UserOrigin özelliği aracılığıyla buna bir ad ve transpoze sayısı verir. Bu NamedComputation, MPMD'deki hesaplamaya veya optimizasyonlara bir örgü atamak için kullanılabilir.

Transpoze sayısı (varsayılan=0), adlandırılmış hesaplamanın belirli sayıda JAX AD transpoze dönüşümüyle oluşturulup oluşturulmadığını gösterir.

İşlemin bölgesinde serbest değişken olmamalıdır ve bölgedeki her blok bağımsız değişkeninin ve döndürülen değerlerin türü, girişlerin türü ve işlemin dönüş türüyle aynı olmalıdır.

Özellikler: IsolatedFromAbove, RecursiveMemoryEffects, RecursivelySpeculatableImplTrait, SingleBlockImplicitTerminator<ReturnOp>, SingleBlock

Arayüzler: ConditionallySpeculatable

Özellikler:

ÖzellikMLIR TürüAçıklama
origin::mlir::mpmd::UserOriginAttrKullanıcı tarafından belirtilen hesaplamanın kaynağı.

İşlenenler:

İşlem Gören Açıklama
tensors 4/6/8/16/32/64 bit kayan nokta veya bool ya da 2/4/8/16/32/64 bit tam sayı veya 32/64 bit kayan nokta öğeleri ya da tensör başına tam sayı olarak nicelenmiş değerler veya jeton içeren karmaşık türde sıralanmış tensörün değişken sayısı

Sonuçlar:

Sonuç Açıklama
results 4/6/8/16/32/64 bit kayan nokta veya bool ya da 2/4/8/16/32/64 bit tam sayı veya 32/64 bit kayan nokta öğeleri ya da tensör başına tam sayı olarak nicelenmiş değerler veya jeton içeren karmaşık türde sıralanmış tensörün değişken sayıda bağımsız değişkeni

mpmd.named_tensor (mpmd::NamedTensorOp)

Örgüye tensör atama

Söz dizimi:

operation ::= `mpmd.named_tensor` $tensor `name````=```$name attr-dict `:` type($result)

Tensörün sonucunu belirli bir adla ilişkilendiren bir kimlik işlemi. Bu NamedTensor, MPMD'de tensöre bir ağ atamak için kullanılabilir.

Özellikler: AlwaysSpeculatableImplTrait, SameOperandsAndResultType

Arayüzler: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)

Etkiler: MemoryEffects::Effect{}

Özellikler:

ÖzellikMLIR TürüAçıklama
name::mlir::StringAttrdize özelliği

İşlenenler:

İşlem Gören Açıklama
tensor Herhangi bir jeton dışı türdeki değerlerin tensörü

Sonuçlar:

Sonuç Açıklama
result Herhangi bir jeton dışı türdeki değerlerin tensörü

mpmd.reduce (mpmd::ReduceOp)

Ağlar arası azaltma işlemi

Söz dizimi:

operation ::= `mpmd.reduce` `` $reduction attr-dict $tensors `:` functional-type(operands, results)

Bir tensörün farklı ağlarda küçültülmesine ve ardından kullanılması gereken her yere yayınlanmasına olanak tanır.

Özellikler: AlwaysSpeculatableImplTrait, SameOperandsAndResultType

Arayüzler: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Etkiler: MemoryEffects::Effect{}

Özellikler:

ÖzellikMLIR TürüAçıklama
reduction::mlir::mpmd::ReductionAttrAzalmayı gösterir.

İşlenenler:

İşlem Gören Açıklama
tensors Herhangi bir jeton dışı türdeki değerlerin tensörünün değişken sayıda bağımsız değişkeni

Sonuçlar:

Sonuç Açıklama
result Herhangi bir jeton dışı türdeki değerlerin tensörü

mpmd.return (mpmd::ReturnOp)

mpmd.return işlemi, mpmd bölge tabanlı işlemlere bağlı bölgeleri sonlandırır. Değişken sayıda bağımsız değişken alır: Türleri herhangi bir tür olabilir (ancak aynı türden olmalıdır, ör. AnyTensor) ve bu nedenle MPMD IR yığınının çeşitli düzeylerinde yeniden kullanılabilir.

Söz dizimi:

operation ::= `mpmd.return` attr-dict $results (`:` type($results)^)?

Özellikler: AlwaysSpeculatableImplTrait, Terminator

Arayüzler: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface)

Etkiler: MemoryEffects::Effect{}

İşlenenler:

İşlem Gören Açıklama
results Herhangi bir jeton dışı türün değişken sayıda bağımsız değişkeni

mpmd.transfer (mpmd::TransferOp)

Aktarım işlemi

Söz dizimi:

operation ::= `mpmd.transfer` attr-dict $tensor `:` functional-type(operands, results)

Dağıtılmış bir tensörü bir ağdan diğerine aktarır.

İşlenen ve sonuç türlerinin ağ adları, topolojideki ağlara karşılık gelmeli ve genel türleri aynı olmalıdır.

Özellikler: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp>

Arayüzler: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), ShardingRuleOpInterface

Etkiler: MemoryEffects::Effect{}

İşlenenler:

İşlem Gören Açıklama
tensor mesh tensor type

Sonuçlar:

Sonuç Açıklama
result mesh tensor type

mpmd.unassign (mpmd::UnassignOp)

İşlemin atamasını kaldırma

Söz dizimi:

operation ::= `mpmd.unassign` attr-dict $tensor `:` functional-type(operands, results)

Tamamen kopyalanmış bir tensörü ağdan kaldırır.

Bu, yerel türlerden ağ türlerine geçiş yapmak için jax işlemlerini azaltırken kullanılan geçici bir işlemdir. Bu işlemler, içe aktarma sırasında kaldırılır. Bu sırada, işlev işleminin girişleri ve sonuçları örgü tensörleri haline gelir.

İşlenen türünün ağ adı, topolojideki bir ağa karşılık gelmeli ve genel türü, sonuç türüyle aynı olmalıdır.

Özellikler: AlwaysSpeculatableImplTrait, HasParent<::mlir::func::FuncOp, ForOp>, InferTensorType

Arayüzler: ConditionallySpeculatable, InferShapedTypeOpInterface, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface)

Etkiler: MemoryEffects::Effect{}

Özellikler:

ÖzellikMLIR TürüAçıklama
origin::mlir::StringAttrdize özelliği

İşlenenler:

İşlem Gören Açıklama
tensor mesh tensor type

Sonuçlar:

Sonuç Açıklama
result Herhangi bir jeton dışı türdeki değerlerin tensörü

Özellikler

MeshWithOriginsAttr

Kökenleriyle uyumlu.

Söz dizimi:

#mpmd.mesh_with_origins<
  ::llvm::StringRef,   # mesh_name
  ::llvm::ArrayRef<OriginAttr>   # origins
>

Parametreler:

Parametre C++ türü Açıklama
mesh_name ::llvm::StringRef mesh_name
kökenler ::llvm::ArrayRef<OriginAttr> kökenler

MeshesWithOriginsAttr

Kaynaklarıyla birlikte ağların listesi.

Söz dizimi:

#mpmd.meshes_with_origins<
  ::llvm::ArrayRef<MeshWithOriginsAttr>   # value
>

Parametreler:

Parametre C++ türü Açıklama
value ::llvm::ArrayRef<MeshWithOriginsAttr>

NamedMeshAttr

Adı ve ağı olan bir çift.

Söz dizimi:

#mpmd.named_mesh<
  ::llvm::StringRef,   # name
  sdy::MeshAttr   # mesh
>

Parametreler:

Parametre C++ türü Açıklama
ad ::llvm::StringRef ad
örgü sdy::MeshAttr örgü

OriginAttr

Örgü atamasının kaynağı.

Söz dizimi:

#mpmd.origin<
  ::llvm::StringRef   # origin_label
>

Bir örgü atamasının kaynağı.

origin_label, kaynağın okunabilir etiketidir. Hata ayıklama amacıyla kullanılmak üzere tasarlanmıştır.

Parametreler:

Parametre C++ türü Açıklama
origin_label ::llvm::StringRef origin_label

ReductionAttr

Azalmayı gösterir.

Söz dizimi:

#mpmd.reduction<
  `none` | `add` | `max` | `min` | `mul` | `or` | `and`   # reduction_type
>

Parametreler:

Parametre C++ türü Açıklama
reduction_type ::mlir::mpmd::ReductionType ReductionType türünde bir enum

TopologyAttr

Adlandırılmış ağların topolojisi.

Söz dizimi:

#mpmd.topology<
  ::llvm::ArrayRef<NamedMeshAttr>   # meshes
>

Parametreler:

Parametre C++ türü Açıklama
ağlar ::llvm::ArrayRef<NamedMeshAttr> topoloji ağları

UserOriginAttr

Kullanıcı tarafından belirtilen hesaplamanın kaynağı.

Söz dizimi:

#mpmd.user_origin<
  ::mlir::StringAttr,   # userName
  int64_t   # transposeCount
>

Parametreler:

Parametre C++ türü Açıklama
userName ::mlir::StringAttr
transposeCount int64_t

Türler

MeshTensorType

Örgü tensör türü

Programın MPMD ağ topolojisinde belirli bir SPMD ağına RankedTensorType atar. Tür, tensörün SPMD ağına göre nasıl parçalandığını belirten isteğe bağlı bir parçalama içerir. Parçalama yoksa tensör tamamen kopyalanır.

Parametreler:

Parametre C++ türü Açıklama
mesh_name ::llvm::StringRef bağlantılı ağ adı
ranked_tensor_type ::mlir::RankedTensorType sıralı tensör türü
parçalama ::mlir::sdy::TensorShardingAttr
memory_kind ::mlir::StringAttr

Sıralamalar

ReductionType

İndirim türü özelliği

Vakalar:

Sembol Değer Dize
kNone 0 yok
kAdd 1 add
kMax 2 maks.
kMin 3 dk
kMul 4 mul
kOr 5 veya
kAnd 6 ve

EdgeNodeType

Edge node type enum

Vakalar:

Sembol Değer Dize
OPERAND 0 işlenen
SONUÇ 1 sonuç

PropagationDirection

Yayılma yönü numaralandırması

Vakalar:

Sembol Değer Dize
YOK 0 YOK
FORWARD 1 FORWARD
GERİ 2 GERİ
BOTH 3 BOTH

ReductionOp

Reduction op enum

Vakalar:

Sembol Değer Dize
TOPLA 0 toplam
Maksimum 1 maks.
MIN 2 dk