-sdy-close-shardings
Menutup sharding tensor dan menghapus sumbu yang direplikasi.
-sdy-constant-merger
Gabungkan konstanta yang identik dengan sharding yang cocok.
Melakukan CSE ringan pada konstanta dengan sharding yang identik.
Pipeline impor memisahkan dan menduplikasi konstanta sehingga sharding tidak di-propagate di antara berbagai penggunaan sub-komputasi konstan. Jika konstanta memiliki sharding yang sama setelah propagasi, kartu ini akan menggabungkannya untuk menghemat waktu kompilasi.
-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 mengelompokkan dimensi yang sesuai dalam tensor lainnya, operasi tersebut dikatakan 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-sharding dengan cara yang sama di semua operand dan hasil, dan setiap sumbu (atau sub-sumbu) hanya dapat digunakan untuk memisahkan satu jenis dimensi.
Contoh:
Input:
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>
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, lhs
dan rhs
di-shard pada sumbu "x" pada dimensi yang tidak berkontraksi, yang tidak kompatibel. Kartu menyisipkan
reshard eksplisit di rhs
sebelum operasi titik, sehingga operasi titik
memiliki sharding yang kompatibel.
-sdy-remove-sharding-groups
Menghapus ShardingGroupOps setelah penyebaran.
-sdy-reshard-to-collectives
Mengonversi ReshardOp menjadi berbagai operasi kolektif Shardy.
Mencocokkan operasi reshard dan menulis ulang operasi kolektif Shardy
berbagai. Setelah lulus, tidak ada operasi reshard yang tersisa di modul. Kartu ini mengasumsikan bahwa reshard eksplisit telah disisipkan (sdy-insert-explicit-reshards
).
Contoh:
Input:
mesh = <"x"=2, "y"=2, "z"=2>
%0 : tensor<16x2xf32> {sdy.sharding<@mesh, \[{"x", "y", "z"}, {}\]>
%1 = sdy.reshard %arg0 <@mesh, \[{"x"}, {}\]> : tensor<16x2xf32>
Output:
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>
Pada contoh di atas, tensor %0 : tensor<16x2xf32>
di-shard sebagai
\[{"x", "y", "z"}, {}\]
. Kemudian, ada operasi reshard
yang melakukan resharding sebagai
\[{"x"}, {}\]
. Pada sumbu pertama, karena akhiran {"y", "z"}
dihapus
setelah reshard, kita menyimpulkan bahwa kita telah mengumpulkan semua {"y", "z"}
. Dimensi
kedua tidak berubah.
-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.
Opsi
-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
Menyisipkan reshard eksplisit untuk pengoptimalan tertentu.
Kartu ini adalah solusi sementara hingga kita dapat mengaktifkan
kartu sdy-insert-explicit-reshards
secara default.
Hal ini memungkinkan kita menyisipkan reshard eksplisit pada operasi tertentu untuk pengoptimalan.
-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.