-sdy-close-shardings

Tensör bölmelerini kapatır ve kopyalanan eksenleri bırakır.

-sdy-constant-merger

Aynı sabitleri eşleşen parçalara göre birleştirin.

Aynı bölmelere sahip sabitler üzerinde hafif bir İTŞ gerçekleştirir.

İçe aktarma ardışık düzeni, sabit alt hesaplamanın farklı kullanımları arasında parçalanmanın yayılmaması için sabitleri böler ve kopyalar. Sabitler dağıtımdan sonra aynı parçalara ayrılmışsa bu geçiş, derleme süresinden tasarruf etmek için bunları birleştirir.

-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ılma işleminden sonra bazı işlemlerde hâlâ uyumlu olmayan parçalara ayırma 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 unutmayın. 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.

Örnek:

Giriş:

mesh = <"x"=4, "y"=2>
%lhs : tensor<8x32xf32> {sdy.sharding=<@mesh, \[{"x"}, {"y"}\]>}
%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, daraltılmayan boyutlarında "x" ekseninde parçalara ayrılmıştır. Bu durum uyumsuzdur. Geçiş, nokta işleminin uyumlu bölmelere sahip olması için nokta işleminden önce rhs üzerinde açık bir yeniden bölme işlemi ekler.

-sdy-remove-sharding-groups

Yayınlamadan sonra ShardingGroupOps'i kaldırır.

-sdy-reshard-to-collectives

ReshardOp'u çeşitli Shardy toplu işlemlerine dönüştürür.

Yeniden bölme işlemlerini eşleştirir ve bunları çeşitli Shardy toplu işlemlerine yeniden yazar. Bu geçişten sonra modülde yeniden bölümlendirme işlemi kalmaz. Bu geçişte, açık yeniden bölmelerin zaten eklenmiş olduğu varsayılır (sdy-insert-explicit-reshards).

Örnek:

Giriş:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

Çıkış:

mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.all_gather \[{"y", "z"}, {}\] %arg0 out_sharding=<@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>

Yukarıdaki örnekte, %0 : tensor<16x2xf32> tensörü \[{"x", "y", "z"}, {}\] olarak parçalara ayrılmıştır. Ardından, reshard işlemiyle \[{"x"}, {}\] olarak yeniden bölümlendirilir. İlk eksenlerde, yeniden bölme işleminden sonra {"y", "z"} soneki kaldırıldığı için tüm {"y", "z"} değerlerinin toplandığını varsayıyoruz. İkinci boyut değiştirilmez.

-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.

Seçenekler

-sink-debug-sharding-origins          : Whether to sink the debug sharding origins info. See `debug-sharding-origins` option in propagation for more info.
-sink-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-temp-explicit-reshards-for-optimizations

Belirli optimizasyonlar için açık yeniden bölme işlemleri ekler.

sdy-insert-explicit-reshards kartını varsayılan olarak etkinleştirebilmemize kadar bu kart geçici bir çözümdür.

Bu sayede, optimizasyonlar için belirli işlemlere açık yeniden bölme işlemleri ekleyebiliyoruz.

-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 gereğini ortadan kaldırmak 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.