-sdy-add-data-flow-edges
Her veri akışı kenarı için DataFlowEdgeOp
ekler.
Bir veri akışı kenarının sahibi olan her değer için DataFlowEdgeOp
değerini ekler. Diğer bir deyişle, modüldeki her işlemde getDataFlowEdgeOwners
tarafından döndürülen tüm değerler.
Eklenen DataFlowEdgeOp
, varsa sahip hedefinin mevcut bölümlemesini alır.
-sdy-apply-sharding-constraints
Girişlerinin bölümlendirilmesini belirten kısıtlamalar uygular.
Aşağıdakilerin tümünü karşılıyorsa bir ShardingConstraintOp
öğesinin parçalanmasını girişine kopyalar:
- Girişte mevcut bir bölme yoktur.
ShardingConstraintOp
için bölümleme tamamen kapalı.- Girişte, farklı bir bölmeyle
ShardingConstraintOp
veyaManualComputationOp
türündeki başka kullanıcı yoktur.
Bu koşullar, ShardingConstraintOp
'ün girişinin parçalanmasını belirttiğini gösterir.
Giriş bir DataFlowEdgeOp
tarafından üretiliyorsa kenardaki tüm hedeflerin parçalanmasını kısıtlamamak için işlemin parçalanmasını ayarlamak yerine input
'un tüm kullanımlarını ShardingConstraintOp
ile değiştiririz.
Bir ShardingConstraintOp
boyutunun bölümlendirilmesinin, bu geçişten bağımsız olarak dağıtım sırasında girişine veya kullanıcılarına dağıtılacağını unutmayın. Ancak bir boyutun kapalı özelliği dağıtılmadığından, yukarıdaki durumlardaki kısıtlamaya tam olarak uymak için bölümlendirmenin kopyalanması önemlidir.
Ayrıca, bir tensör aşağıdakilerin tümünü karşılayan bir ShardingConstraintOp
zinciri tarafından kullanılıyorsa:
- Tensör bir
ShardingConstraintOp
tarafından üretilmemiş veShardingConstraintOp
veyaManualComputationOp
türündeki başka kullanıcıları yok; - Zincirdeki
ShardingConstraintOp
'lerden hiçbiri sonuncusu hariç birden fazla kez kullanılmaz; - Zincirdeki son
ShardingConstraintOp
'teShardingConstraintOp
veyaManualComputationOp
türündeki kullanıcı yoktur (aksi takdirde zincirdeki son öğe olmaz);
ise bu geçiş, zincirdeki girişin zincirdeki son ShardingConstraintOp
'ten sonra (ve aynı blok içinde) tanımlanan diğer tüm kullanımlarını, bu kullanımların parçalanmasını belirlemesi gerektiğinden zincirin sonucuyla değiştirir.
-sdy-constant-splitter
Sabit alt hesaplamaları, her birinin tek bir kullanıma sahip olması için böler.
Sabit alt hesaplamaları tek bir kullanıcıya sahip olacak şekilde böler.
Bu, sabit alt hesaplamanın farklı kullanımları arasında bir bölme işleminin yayılmamasını sağlar. Çünkü bu, yanlış bir bağımlılık olarak kabul edilir (bir sabitin kullanımları, aynı sabit kullanıldığı için aynı şekilde bölünmemelidir). Aslında her kullanım, sabit alt hesaplamanın kendi kopyasıyla bağımsız olarak dağıtılabilen farklı bir bölme işlemine sahip olabilir.
Sabit alt hesaplama şu şekildedir:
- sabit veya iota operatörü (işlenen yok)
- İşlemlerinin tümü sabit alt hesaplamalarla (yeniden doğrulama yoluyla) tanımlanan bir yayın, dilim veya saf öğe bazında işlem. Bu işlemler, kendi işlemlerini tanımlayan alt hesaplamaların tamamıyla birlikte tanımlanır.
Sabit bir alt hesaplamada, bir değerin söz konusu alt hesaplamada birden fazla kullanımı olabileceğini unutmayın.
-sdy-lift-inlined-meshes
Bölünmelerde satır içi MeshAttr
'leri MeshOp
simgesi olarak kaldırır.
Bir TensorShardingAttr
içindeki satır içi MeshAttr
'leri, modüldeki mevcut veya yeni bir MeshOp
'ye atıfta bulunan bir ızgara simgesi adıyla değiştirir. Böylece, hiçbir MeshOp
'nin aynı MeshAttr
'ye sahip olmaması sağlanır (mevcut MeshOp
'ler de tekilleştirilir).
Her yeni MeshOp
'nin adı şu şekilde olur:
maximal_mesh_{device-id}
, maksimum örgülü ağ için (ör. boş eksen listesi ve tek bir cihaz kimliği) veya- [
mesh
,mesh_0
,mesh_1
, ...] içinde bulunan ilk kullanılabilir ad.
-sdy-manual-axes-cleanup
ManualComputationOp
'lerde manuel eksen kullanımını temizler
- Manuel eksen belirtilmemiş tüm giriş/çıkış bölme işlemi için bu manuel ekseni replicated_axes alanına ekleyin. Bu, manuel eksenlerin her zaman tam olarak belirtilmesini sağlar.
- Manuel eksenleri, ağ ekseni beyan sırasına göre sıralar.
-sdy-sharding-group-import
Bölünmüş gruplar için normalleştirme ve doğrulama işlemi tamamlandı.
İçe aktarma işleminin ardından, sharding gruplarına normalleştirme ve doğrulama uygular. Bunlara örnek olarak şunlar verilebilir:
Parçalama Grubu Birleştirme
Grup üyeliğinin geçişli özelliğini kullanarak bölme gruplarını birleştirir. Bir T tensörü G1 ve G2 bölme grubunda olduğunda, G1 ve G2'deki tüm üyelerin aynı şekilde bölünmesi gerektiğini varsayabiliriz. Böylece G1 ve G2'yi tek bir grupta birleştirebiliriz. Birleştirmeden sonra, minimum grup grubu için kanonik grup kimlikleri 0,1,...N-1 olacaktır.
Bölme Grubu Doğrulaması
Bölme gruplarının iyi oluşturulduğunu ve uygulamadaki varsayımlara uygun olduğunu doğrular. Bu, şu anda bir bölme grubu bir
ManualComputationOp
bloğunun içinde tanımlanmış birValue
içeriyorsa bu gruptaki diğer tüm değerlerin aynı blokta bulunması gerektiğini belirtir.