-sdy-close-shardings

Menutup sharding tensor dan menghapus sumbu yang direplikasi.

-sdy-drop-sharding-rules

Menghapus OpShardingRuleAttr dari semua operasi terdaftar.

-sdy-insert-explicit-reshards

Menyisipkan reshard eksplisit agar semua operasi memiliki sharding yang kompatibel.

Sharding yang kompatibel pada dasarnya berarti bahwa operasi dapat menerima operand yang di-sharding dan menghasilkan hasil yang di-sharding tanpa memerlukan komunikasi reshard apa pun (perhatikan bahwa operasi mungkin masih memerlukan komunikasi seperti all-reduce atau halo-swap).

Setelah penyebaran, beberapa operasi mungkin masih memiliki sharding yang tidak kompatibel.

Perhatikan bahwa saat sumbu (atau sub-sumbu) digunakan untuk mengelompokkan dimensi yang tidak sesuai (misalnya, dimensi yang tidak berkontraksi dalam matmul) di beberapa tensor, atau saat sumbu mengelompokkan dimensi dalam satu tensor, tetapi tidak dimensi yang sesuai dalam tensor lainnya, operasi tersebut disebut memiliki konflik sharding. Oleh karena itu, setelah lulus, operasi menjadi bebas konflik.

Kartu ini memasukkan operasi pemisahan secara eksplisit sehingga, untuk setiap operasi, dimensi yang sesuai akan di-shard dengan cara yang sama di semua operand dan hasil, dan setiap sumbu (atau sub-sumbu) hanya dapat digunakan untuk memisahkan satu jenis dimensi.

Contoh yang memperjelas:

Input:

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>

Output:

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>

Pada contoh di atas, ada konflik karena tensor lhs dan rhs di-shard pada sumbu "x" pada dimensi non-kontraknya. Di sini, tensor rhs di-reshard, sebelum operasi titik, secara eksplisit untuk di-shard hanya pada dimensi pertamanya dan pada sumbu "x". Dengan cara ini, operasi titik menjadi kompatibel.

-sdy-remove-sharding-groups

Menghapus ShardingGroupOps setelah penyebaran.

-sdy-sharding-constraint-to-reshard

Mengonversi ShardingConstraintOp menjadi ReshardOp.

-sdy-sink-data-flow-edges

Mengalirkan semua DataFlowEdgeOp ke inputnya.

Memindahkan sharding setiap DataFlowEdgeOp ke inputnya (target root edge), dan mengganti op dengan inputnya.

TODO(tomnatan): pertimbangkan untuk memindahkan sharding ke semua target yang dapat memiliki sharding yang terpasang.

-sdy-update-non-divisible-input-output-shardings

Membuat input/output FuncOp di-shard secara merata, sehingga tidak perlu padding karena sharding yang tidak dapat dibagi.

Pengguna Shardy mengharapkan input/output fungsi dapat dibagi/di-shard secara merata agar tidak memerlukan padding tensor. Propagasi dapat membuat input/output memiliki sharding yang tidak dapat dibagi, sehingga penerusan ini akan memperbarui input/output ke awalan sharding dimensi terbesar dari sharding asli yang di-sharding secara merata.