-sdy-close-shardings
Tensör bölmelerini kapatır ve kopyalanan eksenleri bırakır.
-sdy-drop-sharding-rules
OpShardingRuleAttr
'yi tüm kayıtlı işlemlerden kaldırır.
-sdy-insert-explicit-reshards
Tüm işlemlerin uyumlu bölümlemelere sahip olması için açık yeniden bölümlemeler ekler.
Uyumlu bir bölme, temel olarak işlemin yeniden bölme iletişimi gerektirmeden bölünmüş operatörleri kabul edip bölünmüş bir sonuç üretebileceği anlamına gelir (işlemin yine de tümünü azaltma veya halo takasları gibi iletişim gerektirebileceğini unutmayın).
Yayımdan sonra bazı işlemlerde hâlâ uyumlu olmayan bölme işlemleri olabilir.
Bir eksenin (veya alt eksenin), karşılıklı olmayan boyutları (ör. matmul'deki daraltılmayan boyutlar) birden fazla tenzorda bölme işlemi için kullanıldığında veya bir eksenin bir tenzordaki boyutu bölme işlemini gerçekleştirirken diğer tenzordaki karşılık gelen boyutu bölme işlemini gerçekleştirmediği durumlarda, işlemin bölme çakışması olduğunu belirtmek isteriz. Bu nedenle, bu geçişten sonra işlemler çakışmaz.
Bu geçiş, yeniden bölme işlemlerini açıkça ekler. Böylece her işlem için ilgili boyutlar tüm operatörler ve sonuçlarda aynı şekilde bölünür ve her eksen (veya alt eksen) yalnızca tek bir boyut türünü bölmek için kullanılabilir.
Daha açıklayıcı bir örnek:
Giriş:
mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"y"},{"x"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
stablehlo.dot %lhs, %rhs {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
: (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>
Çıkış:
sdy.mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%rhs : tensor<32x16xf32> {sdy.sharding=<@mesh, \[{"y"}, {"x"}\]>}
%0 = sdy.reshard %rhs <@mesh, \[{"y"}, {}\]> : tensor<32x16xf32>
stablehlo.dot %lhs, %0 {sdy.sharding_per_value=<[<@mesh, \[{"x"}, {}\]>]>}
: (tensor<8x32xf32>, tensor<32x16xf32>) -> tensor<8x16xf32>
Yukarıdaki örnekte, lhs
ve rhs
tenzorlarının her ikisi de daraltılmayan boyutlarında "x" ekseninde parçalandığından çakışma vardır. Burada, rhs
tensörü nokta işleminden önce, yalnızca ilk boyutunda ve "x" ekseninde olacak şekilde yeniden bölümlenir. Bu sayede nokta işlemi uyumlu hale gelir.
-sdy-remove-sharding-groups
Yayınlamadan sonra ShardingGroupOps'i kaldırır.
-sdy-sharding-constraint-to-reshard
ShardingConstraintOp'u ReshardOp'a dönüştürür.
-sdy-sink-data-flow-edges
Tüm DataFlowEdgeOp
öğelerini girişlerine aktarır.
Her DataFlowEdgeOp
öğesinin bölümlendirmesini girişine (kenarın kök hedefi) taşır ve işlemi girişiyle değiştirir.
TODO(tomnatan): Bölme işlemini, eklenebilir bir bölme işlemine sahip olabilecek tüm hedeflere taşımayı düşünün.
-sdy-update-non-divisible-input-output-shardings
FuncOp giriş/çıkışlarının eşit şekilde bölünmesini sağlar. Bölünemeyen bölme işlemleri nedeniyle dolgu yapılmasına gerek kalmaz.
Shardy kullanıcıları, tensorlarını doldurma zorunluluğunu önlemek için işlev girişlerinin/çıkışlarının eşit olarak bölünebilir/parçalanabilir olmasını bekler. Yayma işlemi, girişlerde/çıkışlarda bölünemeyen bölmelere neden olabilir. Bu nedenle, bu geçiş onları orijinal bölme işleminin eşit şekilde bölünmüş en büyük boyut bölme ön ekine günceller.