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