-sdy-add-data-flow-edges
Menyisipkan DataFlowEdgeOp untuk setiap tepi aliran data.
Menyisipkan DataFlowEdgeOp untuk setiap nilai yang merupakan pemilik tepi
alur data, yaitu, semua nilai yang ditampilkan oleh getDataFlowEdgeOwners pada setiap op di
modul.
DataFlowEdgeOp yang disisipkan akan mengambil sharding target pemilik
yang ada jika ada.
-sdy-apply-sharding-constraints
Menerapkan batasan yang menentukan sharding inputnya.
Menyalin sharding ShardingConstraintOp ke inputnya jika memenuhi
semua hal berikut:
- Input tidak memiliki sharding yang ada.
- Sharding
ShardingConstraintOpditutup sepenuhnya. - Input tidak memiliki pengguna lain dari jenis
ShardingConstraintOpatauManualComputationOpdengan sharding yang berbeda.
Kondisi ini menunjukkan bahwa ShardingConstraintOp menentukan
sharding inputnya.
Jika input dihasilkan oleh DataFlowEdgeOp, maka kita akan mengganti semua penggunaan input dengan
ShardingConstraintOp, bukan menetapkan
sharding op, untuk menghindari pembatasan sharding semua target
edge.
Perhatikan bahwa sharding ShardingConstraintOp akan di-propagasi ke
input atau pengguna selama propagasi, terlepas dari penerusan ini, tetapi karena
properti tertutup dimensi tidak di-propagasi, sebaiknya salin
sharding untuk sepenuhnya mematuhi batasan dalam kasus di atas.
Selain itu, jika tensor digunakan oleh rantai ShardingConstraintOp yang
memenuhi semua hal berikut:
- Tensor tidak dihasilkan oleh
ShardingConstraintOpdan tidak memiliki pengguna lain dari jenisShardingConstraintOpatauManualComputationOp; - Tidak ada
ShardingConstraintOpdalam rantai yang memiliki lebih dari satu penggunaan kecuali yang terakhir; ShardingConstraintOpterakhir dalam rantai tidak memiliki pengguna jenisShardingConstraintOpatauManualComputationOp(jika tidak,ShardingConstraintOptersebut bukan yang terakhir dalam rantai);
maka kartu ini akan menggantikan semua penggunaan input rantai lainnya, yang
ditentukan setelah ShardingConstraintOp terakhir dalam rantai (dan dalam
blok yang sama), dengan hasil rantai, karena harus menentukan sharding
penggunaan tersebut.
-sdy-constant-splitter
Memisahkan sub-komputasi konstan sehingga setiap sub-komputasi memiliki satu penggunaan.
Memisahkan sub-komputasi konstan sehingga memiliki satu pengguna.
Hal ini memastikan bahwa sharding tidak di-propagasi di antara penggunaan sub-komputasi konstan yang berbeda, karena hal ini dianggap sebagai dependensi palsu (penggunaan konstan tidak boleh di-sharding dengan cara yang sama hanya karena menggunakan konstan yang sama). Akibatnya, setiap penggunaan dapat memiliki sharding yang berbeda yang dapat disebarkan secara terpisah ke salinan sub-komputasi konstannya sendiri.
Sub-komputasi konstan adalah:
- operator konstan atau iota (tanpa operand)
- operasi broadcast, slice, atau elemen murni, yang operandnya semuanya ditentukan oleh subkomputasi konstan (secara rekursif), beserta seluruh subkomputasi yang menentukan operandnya.
Perhatikan bahwa dalam subkomputasi konstan, nilai dapat memiliki beberapa penggunaan dalam subkomputasi tersebut.
-sdy-lift-inlined-meshes
Mengangkat MeshAttr yang disematkan dalam sharding sebagai MeshOp simbol.
Mengganti MeshAttr yang disisipkan dalam TensorShardingAttr dengan nama simbol
mesh, yang mereferensikan MeshOp yang ada atau baru dalam modul, sehingga
tidak ada dua MeshOp yang memiliki MeshAttr yang identik (MeshOp yang ada juga
dihapus duplikatnya).
Nama setiap MeshOp baru akan berupa:
maximal_mesh_{device-id}, untuk mesh maksimal (yaitu, daftar sumbu kosong dan satu ID perangkat), atau- Nama pertama yang tersedia di [
mesh,mesh_0,mesh_1, ...].
-sdy-manual-axes-cleanup
Membersihkan penggunaan sumbu manual di ManualComputationOp
- Untuk sharding masuk/keluar yang belum menentukan sumbu manual, tambahkan sumbu manual tersebut ke replicated_axes. Hal ini untuk memastikan sumbu manual selalu ditentukan sepenuhnya.
- Mengurutkan sumbu manual dalam urutan deklarasi sumbu mesh.
-sdy-sharding-group-import
Proses kanonisisasi dan validasi untuk grup sharding.
Menerapkan kanonisisasi dan validasi ke grup sharding setelah impor. Yaitu:
Penyatuan Grup Sharding
Menggabungkan grup sharding menggunakan properti transitif keanggotaan grup. Setiap kali tensor T berada dalam grup sharding G1 dan grup sharding G2, kita dapat menyimpulkan bahwa semua anggota di G1 dan G2 harus di-sharding dengan cara yang sama. Dengan demikian, kita dapat menggabungkan G1 dan G2 menjadi satu grup. Kumpulan ID grup kanonis setelah penggabungan akan menjadi 0,1,...N-1 untuk kumpulan grup minimum.
Validasi Grup Sharding
Memvalidasi bahwa grup sharding dibentuk dengan baik dan sesuai dengan asumsi dalam implementasi. Hal ini saat ini menyatakan bahwa jika grup sharding berisi
Valueyang ditentukan di dalam blokManualComputationOp, semua nilai lain dalam grup tersebut harus berada di blok yang sama.