Shardy (SDY) lehçesi, eksene dayalı bir tensör bölme temsili ve bölme işlemlerini tensörlere eklemek için ek API bileşenleri tanımlar.
İşlemler
sdy.constant
(sdy::ConstantOp)
Sabit işlem
Sabit bir value
değerinden bir output
tensörü üretir.
Şu sayfaya göz atın: https://github.com/openxla/stablehlo/blob/main/docs/spec.md#constant
Örnek:
%output = sdy.constant dense<[[0.0, 1.0], [2.0, 3.0]]> : tensor<2x2xf32>
Özellikler: AlwaysSpeculatableImplTrait
Arayüzler: ConditionallySpeculatable
, InferTypeOpInterface
, NoMemoryEffect (MemoryEffectOpInterface)
Etkiler: MemoryEffects::Effect{}
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
value | ::mlir::ElementsAttr | sabit vektör/tenör özelliği |
Sonuçlar:
Sonuç | Açıklama |
---|---|
output |
Herhangi bir türdeki değerlerin tensörü |
sdy.data_flow_edge
(sdy::DataFlowEdgeOp)
Veri akışı uç operasyonu
Söz dizimi:
operation ::= `sdy.data_flow_edge` $input (`sharding````=``` $sharding^)? attr-dict `:` type($result)
Bir X işleminin veri akışı kenarı, bir kaynak kümesi (her biri X'in bir operandı veya X'in blok sonlandırıcısı) ile bir hedef kümesi (her biri X'in bir sonucu veya X'in bir blok bağımsız değişkeni) arasında bir köprü tanımlar. Bu köprü, tüm kaynakların ve hedeflerin aynı şekilde bölümlenmesini sağlar.
Bir işlem, birbirine dikey olan birden çok veri akışı kenarına sahip olabilir.
Örneğin:
y_0, ..., y_n = while (x_0, ..., x_n)
((pred_arg_0,... , pred_arg_n) { ... })
((body_arg_0,..., body_arg_n) {
...
return return_value_0, ..., return_value_n
})
Bu sırada işlem n tane veri akışı kenarı içerir. i. veri akışı kenarı, x_i
, return_value_i
kaynakları ile y_i
, pred_arg_i
, body_arg_i
hedefleri arasındadır.
sdy.data_flow_edge
, bir kenarlığın kök hedefini (hedeflerden herhangi biri olabilir ancak tercihen blok bağımsız değişkeni yerine bir op sonucu olabilir) giriş olarak alır. Bu değerin başka bir kullanımı olmamalıdır. Bu işlem, başlangıçta hiçbir kullanımı olmayan bir giriş alabileceği için saf değildir.
sdy.data_flow_edge
, kenardaki tüm hedefler için isteğe bağlı bir bölme de içerir ve bu bölme, dağıtım sırasında hedeflerin bölme yerine (eklenebilirse) güncellenmelidir. Bu işlem, bir opsiyon çok sayıda kenara sahip olduğunda kullanışlıdır ve şunları yapmak çok daha verimlidir:
- her kenar boyunca ayrı ayrı yayılır.
- Tüm hedefleri tek seferde güncellemek yerine her kenar için ayrı ayrı bölümlendirmeyi güncelleyin (ör. bir işlem, sonuç bölümlendirmeleri için tek bir değişmez
TensorShardingPerValueAttr
değerine sahiptir). - Bir kaynağın bölümlenmesi değiştiğinde her kenarı ayrı ayrı iş listesine ekleyin.
Yayma işlemi, sdy.data_flow_edge
'ün tüm kaynakları ve hedefleri arasında, kaynaklar operatör, hedefler sonuç ve sdy.op_sharding_rule
kimliği normal bir işlemmiş gibi parçalama işlemlerini dağıtır. Yani ileri yayılma kaynaklardan hedeflere, geri yayılma ise hedeflerden kaynaklara olur.
sdy.data_flow_edge
girişinin bir SdyDialect
işlemi tarafından tanımlanmasına izin verilmez. Bu nedenle, kayıtlı olmayan sdy.sharding
özelliğine sahip bir işlem tarafından tanımlandığını varsayabiliriz.
Özellikler: SameOperandsAndResultType
Arabirimler: InferTypeOpInterface
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
sharding | ::mlir::sdy::TensorShardingAttr | Tensör bölme |
İşlemler:
İşlem Gören | Açıklama |
---|---|
input |
Herhangi bir türde değerden oluşur. |
Sonuçlar:
Sonuç | Açıklama |
---|---|
result |
Herhangi bir türde değerden oluşur. |
sdy.manual_computation
(sdy::ManualComputationOp)
Manuel koleksiyonlarla çoklu cihaz paralellik işlemi
Söz dizimi:
operation ::= `sdy.manual_computation` `(`operands`)`
`in_shardings````=```custom<StrippedTensorShardingPerValueAttr>($in_shardings)
`out_shardings````=```custom<StrippedTensorShardingPerValueAttr>($out_shardings)
`manual_axes````=```$manual_axes
custom<SingleBlockRegionNoBlockId>($body)
attr-dict
`:`
functional-type(operands, results)
Mantıksal şekillerin cihaz başına yerel fiziksel arabellek şekilleriyle eşleştiği ve koleksiyonların tam olarak cihazlar arası fiziksel iletişime karşılık geldiği, cihaz başına yerel kod terimleriyle yazılmış bir bölgeye atlayın.
Body, manual_axes ile ilgili yereldir. Yayılım, herhangi bir serbest eksende (manual_axes listesinde olmayanlar) gövde boyunca gerçekleşir.
Özellikler: IsolatedFromAbove
, RecursiveMemoryEffects
, SingleBlockImplicitTerminator<ReturnOp>
, SingleBlock
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | İşlemin işlenen/sonucu başına tensor parçalama |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Bir işlemin işleneni/sonucu başına tensör bölme |
manual_axes | ::mlir::sdy::ManualAxesAttr |
İşlem görenler:
İşlem Gören | Açıklama |
---|---|
tensors |
herhangi bir türdeki değerlerin sıralı tenörünün değişken sayısı |
Sonuçlar:
Sonuç | Açıklama |
---|---|
results |
herhangi bir türdeki değerlerin sıralı tenörünün değişken sayısı |
sdy.mesh
(sdy::MeshOp)
Adlandırılmış ağ
Söz dizimi:
operation ::= `sdy.mesh` $sym_name `=` $mesh attr-dict
Yeni bir adlandırılmış ağ tanımlar. Bir modüldeki tüm ağlar aynı sayıda cihaza sahip olmalıdır (tek bir device_id değerine sahip ağlar hariç).
Örgü, modülün SymbolTable
bölümünde görünen ve name
ile referans verilebilen bir Symbol
işlemidir.
Özellikler: HasParent<ModuleOp>
Arabirimler: Symbol
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
sym_name | ::mlir::StringAttr | dize özelliği |
mesh | ::mlir::sdy::MeshAttr | Eksen örgüsü ve cihaz listesi |
sdy.named_computation
(sdy::NamedComputationOp)
Adlandırılmış hesaplama işlemi
Söz dizimi:
operation ::= `sdy.named_computation` `<`$name`>` `` `(` $operands `)`
(`in_shardings````=```custom<StrippedTensorShardingPerValueAttr>($in_shardings)^)?
(`out_shardings````=```custom<StrippedTensorShardingPerValueAttr>($out_shardings)^)?
custom<SingleBlockRegionNoBlockId>($body)
attr-dict
`:` functional-type($operands, results)
Bir hesaplamayı (ör. işlem bloğu) gruplandırır ve ona bir ad verir. Yayma işlemi, her şey satır içiymiş gibi bölgeye girip çıkar.
Bu, diğer işlevlere çağrı talimatları aracılığıyla yayma işlemini gerçekleştirmek için kullanılabilir. Shardy kullanıcıları, çağrı işlemlerini sdy.named_computation
işlemlerine dönüştüren, çağrılan işlevin gövdesini named_computation
gövdesine kopyalayan/yayan bir içe aktarma/dışa aktarma geçişi yazmalıdır.
Bölgedeki her blok bağımsız değişkeninin ve döndürülen değerlerin türü, işlenenin türü ve işlemin sonuç türüyle aynı olmalıdır.
Örnek:
%1 = sdy.named_computation<"foo">(%0) (%arg1: tensor<16x32xf32>) {
sdy.return %arg1 : tensor<16x32xf32>
} : (tensor<16x32xf32>) -> tensor<16x32xf32>
Özellikler: IsolatedFromAbove
, RecursiveMemoryEffects
, RecursivelySpeculatableImplTrait
, SingleBlockImplicitTerminator<ReturnOp>
, SingleBlock
Arayüzler: ConditionallySpeculatable
, ShardableDataFlowOpInterface
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
name | ::mlir::StringAttr | dize özelliği |
in_shardings | ::mlir::sdy::TensorShardingPerValueAttr | İşlemin işlenen/sonucu başına tensor parçalama |
out_shardings | ::mlir::sdy::TensorShardingPerValueAttr | Bir işlemin işleneni/sonucu başına tensör bölme |
İşlemler:
İşlem Gören | Açıklama |
---|---|
operands |
Her türden değişken |
Sonuçlar:
Sonuç | Açıklama |
---|---|
«unnamed» | Her türden değişken |
sdy.propagation_barrier
(sdy::PropagationBarrierOp)
Yayılım bariyeri işlemi
Söz dizimi:
operation ::= `sdy.propagation_barrier` $input `allowed_direction````=```$allowed_direction attr-dict `:` type($input)
Bu işlem, bir kimlik operasyonu gibi çalışır ve girişle aynı değeri verir. Ancak yayılım açısından bu, yayılmanın üzerinden yalnızca belirli bir yönde akışına izin verir.
Bu, bariyer işleminin sonucunun ve operand'ının kullanımları arasında parçalanmanın yayılmasını önler.
FORWARD
, parçalamaların yalnızca işlenenden sonuca akabileceği anlamına gelir.BACKWARD
, bölmelerin yalnızca sonuçtan operatöre akabileceği anlamına gelir.NONE
, bu işlemde hiçbir bölme işleminin yayılamayacağı anlamına gelir.- Bu işlem gereksiz olacağından
BOTH
belirtilemiyor.
Özellikler: AlwaysSpeculatableImplTrait
, Elementwise
, SameOperandsAndResultType
Arayüzler: ConditionallySpeculatable
, InferTypeOpInterface
, NoMemoryEffect (MemoryEffectOpInterface)
Etkiler: MemoryEffects::Effect{}
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
allowed_direction | ::mlir::sdy::PropagationDirectionAttr | yayılım yönü enum |
İşlem görenler:
İşlem Gören | Açıklama |
---|---|
input |
Herhangi bir türdeki değerlerin sıralı tensörü |
Sonuçlar:
Sonuç | Açıklama |
---|---|
result |
Herhangi bir türdeki değerlerin sıralı tensörü |
sdy.reshard
(sdy::ReshardOp)
Bir tenzoru farklı bir bölme işlemine göre yeniden böler
Söz dizimi:
operation ::= `sdy.reshard` $input $sharding attr-dict `:` type($result)
Giriş tenörünü, giriş tenörünün mevcut bölme işleminden farklı olan belirtilen bölme işlemiyle yeniden böler.
Hem ShardingConstraintOp hem de ReshardOp, tensöre kırma işlemi ekler. Kullanım ömrü:
- ShardingConstraintOp, kullanıcılar tarafından bölümlendirme yayma işleminden önce eklenir.
- Parçalama yayılımı ShardingConstraintOp'u tüketir. Bölme yayma sonuçlarında ShardingConstraintOp yok. Bunun yerine, gerekirse ReshardOp eklenebilir.
- Bölümlendirici, ReshardOp'u ortak operasyona (veya kimlik operasyonu) dönüştürür. Bölme aracının sonuçlarında ReshardOp bulunmamalıdır.
// TODO(b/331680067). Gereksiz işlemleri kaldırmak için // bir standartlaştırma kalıbı ekleyin.
Özellikler: AlwaysSpeculatableImplTrait
, Elementwise
, SameOperandsAndResultType
Arayüzler: ConditionallySpeculatable
, InferTypeOpInterface
, NoMemoryEffect (MemoryEffectOpInterface)
Etkiler: MemoryEffects::Effect{}
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
sharding | ::mlir::sdy::TensorShardingAttr | Tensör bölme |
İşlemler:
İşlem Gören | Açıklama |
---|---|
input |
Herhangi bir türdeki değerlerin tensörü |
Sonuçlar:
Sonuç | Açıklama |
---|---|
result |
Herhangi bir türdeki değerlerin tensörü |
sdy.return
(sdy::ReturnOp)
sdy.return
işlemi, sdy
bölgeye dayalı işlemlere ve diğer Shardy bölgeye dayalı işlemlere bağlı bölgeleri sonlandırır. Değişkendir: Türleri herhangi bir şey olabilen (ancak aynı türde, ör. AnyTensor
) bir değer listesi alır ve bu nedenle Shardy IR yığınının çeşitli seviyelerinde yeniden kullanılabilir.
Söz dizimi:
operation ::= `sdy.return` attr-dict ($results^ `:` type($results))?
Özellikler: AlwaysSpeculatableImplTrait
, Terminator
Arayüzler: ConditionallySpeculatable
, NoMemoryEffect (MemoryEffectOpInterface)
Etkiler: MemoryEffects::Effect{}
İşlemler:
İşlem Gören | Açıklama |
---|---|
results |
her türden değişken |
sdy.sharding_constraint
(shardingConstraintOp)
Bir tenzoru belirtilen bölmeyle sınırlandırır
Söz dizimi:
operation ::= `sdy.sharding_constraint` $input $sharding attr-dict `:` type($result)
Bir ara tensöre (ör. bir matmul'un sonucu) tensörün veya kullanımlarının bir alt kümesinin bu şekilde kırılması gerektiğini belirtmek için kırma ekler.
Bölme işleminde açık boyutlar ve sınırsız eksenler varsa tensör, açık boyutlar boyunca daha da bölünebilir.
Bu işlem şunları yapabilir:
- Kullanımı yoktur (boştadır). Bu, ekli bölme işleminin, giriş tensörünün kendisinin nasıl bölünmesi gerektiği anlamına gelir.
- Kullanım alanı var: Bu, ekteki bölme işleminin, bölme kısıtlaması işleminin kullanım alanlarının nasıl bölünmesi gerektiği anlamına gelir. Giriş tenörünün diğer kullanım alanları farklı bir bölme işlemine sahip olabilir (Giriş tenörünün başka bir kullanım alanı yoksa davranış, kullanım alanı yok durumuyla aynıdır).
Özellikler: Elementwise
, SameOperandsAndResultType
Arayüzler: InferTypeOpInterface
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
sharding | ::mlir::sdy::TensorShardingAttr | Tensör bölme |
İşlemler:
İşlem Gören | Açıklama |
---|---|
input |
Herhangi bir türdeki değerlerin tensörü |
Sonuçlar:
Sonuç | Açıklama |
---|---|
result |
Herhangi bir türdeki değerlerin tensörü |
sdy.sharding_group
(sdy::ShardingGroupOp)
Grup parçalama işlemi
Söz dizimi:
operation ::= `sdy.sharding_group` $input `group_id````=```$group_id attr-dict `:` type($input)
Bu işlem, tenzorları bölme gruplarına (aynı bölmelere sahip olmaları zorunlu kılınacak tenzor grupları) atama arayüzü sağlar. Yayma sırasında, bir grup öğesi bölünür bölünmez diğer tüm üyeler de tam olarak aynı şekilde bölünür. Bu işlem, bağımsız değişken grup kimliğini alır ve sonuç döndürmez. Bunun yerine, giriş tenzorunu belirtilen kimliğe sahip gruba eklemek için dahili bölme grubu temsilini değiştirir.
Özellikler:
Özellik | MLIR Türü | Açıklama |
---|---|---|
group_id | ::mlir::IntegerAttr | 64 bit işaretsiz tam sayı özelliği |
İşlemler:
İşlem Gören | Açıklama |
---|---|
input |
Herhangi bir türdeki değerlerin sıralı tensörü |
Özellikler
AxisRefAttr
Tam eksen veya bölünmüş alt eksene referans
Söz dizimi:
#sdy.axis_ref<
::llvm::StringRef, # name
SubAxisInfoAttr # sub_axis_info
>
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
ad | ::llvm::StringRef |
ad |
sub_axis_info | SubAxisInfoAttr |
DimMappingAttr
Bir boyuta ilişkin faktör dizinlerinin listesi
Tüm faktör indeksleri [0, num_factors) aralığında olmalıdır ve boş bir liste, bunun boş bir eşleme olduğunu (*
ile ayrıştırılır/yazılır). Diğer bir deyişle, boyut herhangi bir faktörle eşlenmez.
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
factor_indices | ::llvm::ArrayRef<int64_t> |
DimensionShardingAttr
Boyut kırma
Bir tensör boyutunun büyükten küçüğe bölüneceği eksen adlarının listesi, boyutun daha fazla bölünüp bölünemeyeceğini belirten bir boole değeri ve bu boyut bölme işleminin önceliğini belirten isteğe bağlı bir tam sayı (bölme işleminin yayılması sırasında dikkate alınır). Önceliklerin kaynağı, kullanıcının parçalama ek açıklamalarıdır. Düşük değer, daha yüksek öncelik anlamına gelir. Ek açıklamada öncelik eksik olduğunda en yüksek öncelik varsayılır.
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
eksenler | ::llvm::ArrayRef<AxisRefAttr> |
eksen referanslarının listesi |
is_closed | bool |
|
önceliği | std::optional<int64_t> |
ManualAxesAttr
Söz dizimi:
#sdy.manual_axes<
::llvm::ArrayRef<StringAttr> # value
>
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
value | ::llvm::ArrayRef<StringAttr> |
MeshAttr
Eksen örgüsü ve cihazların listesi
Söz dizimi:
#sdy.mesh<
::llvm::ArrayRef<MeshAxisAttr>, # axes
::llvm::ArrayRef<int64_t> # device_ids
>
Örgü, cihaz sıralamasını belirten bir eksen listesi ve isteğe bağlı bir cihaz kimlikleri listesidir.
Eksen listesi boşsa örgünün boyutu 1 olan, adı belirtilmemiş bir gizli ekseni vardır. Bu durumda, cihaz kimliği listesi sağlanmazsa varsayılan cihaz kimliği listesi [0] olur; cihaz kimliği listesi sağlanırsa sıfırdan büyük herhangi bir tam sayı içermelidir. Buna maksimum bölme durumu diyoruz.
Maksimum olmayan tüm bölme durumlarında, bir cihaz kimliği listesi belirtilirse eksen boyutlarının çarpımı cihaz sayısıyla eşleşmelidir. Cihaz kimliği listesi belirtilmezse varsayılan cihaz kimliği listesi iota(product(axes)) olur. Basitlik açısından, iota(product(axes)) ile aynı olan bir cihaz kimliği listesinin belirtilmesine de izin verilmez. Bu durumda, cihaz kimliği listesi belirtilmemelidir.
Aşağıda bazı ağ örnekleri verilmiştir:
- Boş bir örgü, yayılma sırasında değiştirilebilecek bir yer tutucu ağı temsil eder: <[]>
- Adsız bir eksen ve açık cihaz kimliği içeren bir ağ. Genellikle maksimum bölme işlemini temsil etmek için kullanılır: <[], device_ids=[3]>
- İki eksen ve gizli cihaz kimlikleri içeren bir ağ iota(6): <["a"=2, "b"=3]>
- Cihaz sıralamasını belirten iki eksen ve açık cihaz kimlikleri içeren bir ağ: <["a"=3, "b"=2], device_ids=[0, 2, 4, 1, 3, 5]>
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
eksenler | ::llvm::ArrayRef<MeshAxisAttr> |
|
device_ids | ::llvm::ArrayRef<int64_t> |
MeshAxisAttr
Örgüdeki adlandırılmış eksen
Söz dizimi:
#sdy.mesh_axis<
::llvm::StringRef, # name
int64_t # size
>
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
ad | ::llvm::StringRef |
ad |
beden | int64_t |
OpShardingRuleAttr
Bir işlemin nasıl bölümlenebileceğini belirtir.
Söz dizimi:
#sdy.op_sharding_rule<
::llvm::ArrayRef<int64_t>, # factor_sizes
::llvm::ArrayRef<TensorMappingAttr>, # operand_mappings
::llvm::ArrayRef<TensorMappingAttr>, # result_mappings
bool # is_custom_rule
>
Bölme kuralında, bir işlemin işlemdeki çeşitli özelliklere (özellikler, işlenen öğelerin şekli, sonuçların şekli vb.) göre nasıl bölümlenebileceği belirtilir. Örneğin:
%0 = stablehlo.add %arg0, %arg1 {
sdy.sharding_rule = #sdy.op_sharding_rule<
([i, j],[i, j])->([i, j])
{i=8, j=8}>
} : tensor<8x8xf32>
%1 = stablehlo.dot_general %arg2, %arg3, contracting_dims = [1] x [0] {
sdy.sharding_rule = #sdy.op_sharding_rule<
([i, k],[k, j])->([i, j])
{i=8, j=16, k=8}>
}: (tensor<8x8xf32>, tensor<8x16xf32>) -> tensor<8x16xf32>
Boyutu 1 olan faktörlere, bölümlenememeleri rağmen izin verildiğini unutmayın. Bu, noktasal işlemler gibi birçok işlemin, işlemler ve sonuçlar arasında karşılık gelen boyutu bir boyutlara sahip olması nedeniyle esas olarak eksiksizliği sağlamak içindir.
is_custom_rule
, bunun bir stablehlo.custom_call
işlemi için kullanıcı tarafından tanımlanan bir kural olup olmadığını belirtir. Bölmeleyici bu işlemleri nasıl böleceğini bilmediği için kullanıcının bunu belirtmesi gerekir. Özel bir kural olduğunda kural her zaman korunur/hiçbir zaman kaldırılmaz. is_custom_rule
yalnızca stablehlo.custom_call
işlemleri için doğru olabilir.
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
factor_sizes | ::llvm::ArrayRef<int64_t> |
|
operand_mappings | ::llvm::ArrayRef<TensorMappingAttr> |
|
result_mappings | ::llvm::ArrayRef<TensorMappingAttr> |
|
is_custom_rule | bool |
SubAxisInfoAttr
Bu alt eksenin tam eksenden nasıl elde edildiği hakkında bilgi
Söz dizimi:
#sdy.sub_axis_info<
int64_t, # pre_size
int64_t # size
>
Tam bir eksen n alt eksene bölündüğünde eksen [k_1,...,k_n] şeklinde yeniden şekillendirilir ve i. alt eksen, solundaki tüm eksen boyutlarının m=prod(k_1,...,k_(i-1))
(ön boyut olarak da bilinir) ve boyut k_i'nin çarpımıyla ifade edilebilir. Bu nedenle, alt eksen bilgisi özelliği bu iki sayıyı içerir ve aşağıdaki şekilde gösterilir: (m)k
için ön boyut m ve boyut k.
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
pre_size | int64_t |
|
beden | int64_t |
TensorMappingAttr
Bir tensörün her boyutu için faktör eşlemeleri.
Söz dizimi:
#sdy.tensor_mapping<
::llvm::ArrayRef<DimMappingAttr> # dim_mappings
>
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
dim_mappings | ::llvm::ArrayRef<DimMappingAttr> |
TensorShardingAttr
Tensor parçalama
Söz dizimi:
#sdy.sharding<
::mlir::Attribute, # mesh_or_ref
::llvm::ArrayRef<DimensionShardingAttr>, # dim_shardings
::llvm::ArrayRef<AxisRefAttr> # replicated_axes
>
Tensör kırma, belirli bir ağa bağlıdır ve yalnızca bu ağdaki eksen adlarına referans verebilir. Boyut bölme işlemleri, tensörün her boyutu için hangi eksenler (veya alt eksenler) boyunca büyükten küçüğe bölündüğünü bize bildirir. Bir boyutu bölmeyen diğer tüm eksenler, dolaylı veya açıkça (kopyalanan eksenler listesinde görünüyorlarsa) kopyalanır.
Bu parçalamanın bağlı olduğu ağ, ilgili bir MeshOp
simgesine referans veren bir simge adı veya satır içi bir MeshAttr
ile belirtilebilir.
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
mesh_or_ref | ::mlir::Attribute |
mesh özl veya düz örgü simgesi referans özl |
dim_shardings | ::llvm::ArrayRef<DimensionShardingAttr> |
|
replicated_axes | ::llvm::ArrayRef<AxisRefAttr> |
eksen referanslarının listesi |
TensorShardingPerValueAttr
Bir işlemin işleneni/sonucu başına tensör bölme
Söz dizimi:
#sdy.sharding_per_value<
::llvm::ArrayRef<TensorShardingAttr> # shardings
>
Parametreler:
Parametre | C++ türü | Açıklama |
---|---|---|
parçalamalar | ::llvm::ArrayRef<TensorShardingAttr> |
Sıralamalar
PropagationDirection
yayılım yönü sıralaması
Vakalar:
Sembol | Değer | Dize |
---|---|---|
YOK | 0 |
YOK |
FORWARD | 1 |
FORWARD |
BACKWARD | 2 |
BACKWARD |
İKİNCİ | 3 |
İKİNCİ |