İş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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
origin | ::mlir::StringAttr | dize ö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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
callee | ::mlir::FlatSymbolRefAttr | dü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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
iterations | ::mlir::IntegerAttr | 32 bitlik işaretsiz tam sayı özelliği |
unroll_factor | ::mlir::IntegerAttr | 32 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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
origin | ::mlir::ArrayAttr | bir dizi kaynak bilgisi |
mesh_name | ::mlir::StringAttr | dize özelliği |
stage_id | ::mlir::IntegerAttr | 64 bit işaretsiz tam sayı özelliği |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Bir işlemin işleneni/sonucu başına tensör parçalama |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Bir 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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
origin | ::mlir::ArrayAttr | bir dizi kaynak bilgisi |
mesh_name | ::mlir::StringAttr | dize özelliği |
callee | ::mlir::FlatSymbolRefAttr | dü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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
origin | ::mlir::mpmd::UserOriginAttr | Kullanı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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
name | ::mlir::StringAttr | dize ö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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
reduction | ::mlir::mpmd::ReductionAttr | Azalmayı 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:
| Özellik | MLIR Türü | Açıklama |
|---|---|---|
origin | ::mlir::StringAttr | dize ö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 |