-sdy-add-data-flow-edges
Menyisipkan DataFlowEdgeOp
untuk setiap tepi aliran data.
Menyisipkan DataFlowEdgeOp
untuk setiap nilai yang merupakan pemilik edge aliran data, yaitu semua nilai yang ditampilkan oleh getDataFlowEdgeOwners
pada setiap op dalam modul.
DataFlowEdgeOp
yang disisipkan akan mengambil sharding target pemilik yang ada jika ada.
TODO(b/330339693): perbarui dokumen ini saat getDataFlowEdgeOwners
dihapus.
-sdy-apply-sharding-constraints
Menerapkan batasan yang menentukan sharding input.
Menyalin sharding ShardingConstraintOp
ke inputnya jika memenuhi
semua hal berikut:
- Input tidak memiliki sharding yang ada.
- Input tidak dihasilkan oleh
DataFlowEdgeOp
, yang menyimpan sharding semua target tepi. - Sharding
ShardingConstraintOp
ditutup sepenuhnya. - Input tidak memiliki pengguna lain dari jenis
ShardingConstraintOp
atauManualComputationOp
dengan sharding yang berbeda.
Yang menunjukkan bahwa ShardingConstraintOp
menentukan sharding
inputnya.
Perhatikan bahwa sharding ShardingConstraintOp
akan di-propagasi ke
input atau penggunanya 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, ini 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 disebarkan 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 berbeda yang dapat disebarkan secara terpisah ke salinan sub-komputasi konstan.
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
dengan MeshAttr
yang identik (MeshOp
yang ada juga
dihapus duplikatnya).
Nama setiap MeshOp
baru akan berupa:
maximal_mesh_{device-id}
, untuk mesh maksimum (yaitu, daftar sumbu kosong dan satu ID perangkat).- Nama pertama yang tersedia di [
mesh
,mesh_0
,mesh_1
, ...], atau tidak. ###-sdy-manual-axes-cleanup
Membersihkan penggunaan sumbu manual dalam ManualComputationOp
dtk
1) 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.
2) Mengurutkan sumbu manual dalam urutan deklarasi sumbu mesh.
-sdy-sharding-group-import
Kanonikalisasi dan validasi penerusan untuk grup sharding.
Menerapkan kanonisisasi dan validasi ke grup sharding setelah impor. Yaitu:
1) Sharding Group Unification - 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.
2) Validasi Grup Sharding
Memvalidasi bahwa grup sharding dibentuk dengan baik dan sesuai dengan asumsi
dalam penerapan. Saat ini, pernyataan ini menegaskan bahwa jika grup sharding berisi Value
yang ditentukan di dalam blok ManualComputationOp
, semua nilai lain dalam grup tersebut harus berada di blok yang sama.