

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Bagaimana Paralelisme Tensor Bekerja
<a name="model-parallel-extended-features-pytorch-tensor-parallelism-how-it-works"></a>

Paralelisme tensor terjadi pada tingkat`nn.Modules`; itu mempartisi modul tertentu dalam model di seluruh peringkat paralel tensor. Ini merupakan tambahan dari partisi yang ada dari *kumpulan modul yang* digunakan dalam paralelisme pipa.

Ketika modul dipartisi melalui paralelisme tensor, propagasi maju dan mundur didistribusikan. Pustaka menangani komunikasi yang diperlukan di seluruh perangkat untuk mengimplementasikan eksekusi terdistribusi modul-modul ini. Modul dipartisi di beberapa peringkat paralel data. Berlawanan dengan distribusi beban kerja tradisional, setiap peringkat paralel data **tidak** memiliki replika model lengkap saat paralelisme tensor perpustakaan digunakan. Sebaliknya, setiap peringkat paralel data mungkin hanya memiliki partisi dari modul terdistribusi, di samping keseluruhan modul yang tidak didistribusikan.

**Contoh:** Pertimbangkan paralelisme tensor di seluruh peringkat paralel data, di mana tingkat paralelisme data adalah 4 dan derajat paralelisme tensor adalah 2. Asumsikan bahwa Anda memiliki grup paralel data yang memegang pohon modul berikut, setelah mempartisi kumpulan modul.

```
A
├── B
|   ├── E
|   ├── F
├── C
└── D
    ├── G
    └── H
```

Asumsikan bahwa paralelisme tensor didukung untuk modul B, G, dan H. Salah satu kemungkinan hasil partisi paralel tensor model ini adalah:

```
dp_rank 0 (tensor parallel rank 0): A, B:0, C, D, G:0, H
dp_rank 1 (tensor parallel rank 1): A, B:1, C, D, G:1, H
dp_rank 2 (tensor parallel rank 0): A, B:0, C, D, G:0, H
dp_rank 3 (tensor parallel rank 1): A, B:1, C, D, G:1, H
```

Setiap baris mewakili kumpulan modul yang disimpan di dalamnya`dp_rank`, dan notasi `X:y` mewakili fraksi `y` ke-modul. `X` Perhatikan hal-hal berikut:

1. Partisi terjadi di seluruh himpunan bagian dari peringkat paralel data, yang kita sebut`TP_GROUP`, bukan keseluruhan`DP_GROUP`, sehingga partisi model yang tepat direplikasi di `dp_rank` 0 dan `dp_rank` 2, dan juga di `dp_rank` 1 dan 3. `dp_rank`

1. Modul `E` dan `F` tidak lagi menjadi bagian dari model, karena modul induknya `B` dipartisi, dan setiap eksekusi yang biasanya merupakan bagian dari `E` dan `F` berlangsung di dalam modul (dipartisi). `B`

1. Meskipun `H` didukung untuk paralelisme tensor, dalam contoh ini tidak dipartisi, yang menyoroti bahwa apakah akan mempartisi modul bergantung pada input pengguna. Fakta bahwa modul didukung untuk paralelisme tensor tidak selalu berarti modul tersebut dipartisi.

## Bagaimana perpustakaan menyesuaikan paralelisme tensor ke modul PyTorch `nn.Linear`
<a name="model-parallel-extended-for-pytorch-adapt-to-module"></a>

*Ketika paralelisme tensor dilakukan melalui peringkat paralel data, subset dari parameter, gradien, dan status pengoptimal dipartisi di seluruh perangkat paralel tensor untuk modul yang dipartisi.* Untuk modul lainnya, perangkat paralel tensor beroperasi secara paralel data reguler. Untuk menjalankan modul yang dipartisi, perangkat pertama-tama mengumpulkan bagian yang diperlukan dari *semua sampel data* di seluruh perangkat rekan dalam grup paralelisme tensor yang sama. Perangkat kemudian menjalankan fraksi lokal modul pada semua sampel data ini, diikuti oleh putaran sinkronisasi lain yang menggabungkan bagian-bagian output untuk setiap sampel data dan mengembalikan sampel data gabungan ke tempat sampel data pertama kali GPUs berasal. Gambar berikut menunjukkan contoh proses ini melalui modul yang dipartisi`nn.Linear`. 

![\[Dua angka menunjukkan dua konsep paralel tensor.\]](http://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/distributed/model-parallel/tensor-parallel-concept.png)


Gambar pertama menunjukkan model kecil dengan `nn.Linear` modul besar dengan paralelisme data di atas dua peringkat paralelisme tensor. `nn.Linear`Modul direplikasi ke dalam dua peringkat paralel. 

Gambar kedua menunjukkan paralelisme tensor diterapkan pada model yang lebih besar saat membelah modul. `nn.Linear` Masing-masing `tp_rank` memegang setengah modul linier, dan keseluruhan operasi lainnya. Sementara modul linier berjalan, masing-masing `tp_rank` mengumpulkan setengah yang relevan dari semua sampel data dan meneruskannya melalui setengah dari `nn.Linear` modul mereka. Hasilnya perlu direduksi tersebar (dengan penjumlahan sebagai operasi reduksi) sehingga setiap peringkat memiliki keluaran linier akhir untuk sampel datanya sendiri. Sisa model berjalan dengan cara paralel data yang khas.