-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
ShardingConstraintOp
ditutup sepenuhnya. - Input tidak memiliki pengguna lain dari jenis
ShardingConstraintOp
atauManualComputationOp
dengan 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
ShardingConstraintOp
dan tidak memiliki pengguna lain dari jenisShardingConstraintOp
atauManualComputationOp
; - Tidak ada
ShardingConstraintOp
dalam rantai yang memiliki lebih dari satu penggunaan kecuali yang terakhir; ShardingConstraintOp
terakhir dalam rantai tidak memiliki pengguna jenisShardingConstraintOp
atauManualComputationOp
(jika tidak,ShardingConstraintOp
tersebut 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
Value
yang ditentukan di dalam blokManualComputationOp
, semua nilai lain dalam grup tersebut harus berada di blok yang sama.