Menentukan unit kerja yang dapat dipisahkan
Tuliskan apa yang menjadi hasil yang diterima: sebuah gambar, dokumen yang diproses, sekumpulan simulasi, atau keadaan akhir pelatihan. Lalu tanyakan apakah satu unit dapat dihitung tanpa menunggu yang lain. Dua dokumen dapat independen selama pemrosesannya, lalu bergantung pada tahap pembangunan indeks yang sama. Pemecahan harus mendeskripsikan tahap kedua ini alih-alih melupakannya dalam janji paralelisme.
Bedakan independensi komputasi dari independensi bisnis. Suatu keluaran dapat dihasilkan tanpa pertukaran teknis dan tetap tidak dapat digunakan sebelum seluruh batch divalidasi. Karena itu, sebutkan unit komputasi, unit pengiriman, dan aturan perakitan. Kosakata bersama ini mencegah pembelian menghitung kartu sementara tim aplikasi menghitung instans atau fragmen dari model yang sama.
Memilih antara pekerjaan independen dan kerja sama yang erat
Untuk tugas independen, setiap proses menerima masukannya sendiri dan menghasilkan keluaran yang dapat diidentifikasi. Kartu lain dapat menjalankan tugas lain tanpa sinkronisasi di setiap tahap. Mode ini menarik ketika tujuan berfokus pada jumlah yang diselesaikan selama satu jendela waktu. Mode ini tidak otomatis mempercepat satu tugas yang terisolasi dan kontensi pada data, penyimpanan, atau lisensi masih perlu diperiksa.
Untuk pekerjaan kooperatif, perangkat saling bertukar data atau menunggu hasil antara. Program harus menangani pembagian ini. Panduan CUDA menjelaskan bahwa pemanfaatan beberapa GPU melibatkan konteks, distribusi data, peluncuran, dan komunikasi. Ini adalah properti jalur perangkat lunak dan sistem yang diamati; nama kartu dari katalog tidak membuktikan bahwa jalur tersebut sudah ada.
| Pertanyaan | Pekerjaan independen | Pekerjaan kooperatif |
|---|---|---|
| Apa yang diterima satu kartu? | Satu tugas lengkap yang terpisah | Sebagian atau replika pekerjaan |
| Apa yang perlu dikoordinasikan? | Penetapan masukan dan pengumpulan keluaran | Pertukaran, urutan, dan sinkronisasi |
| Manfaat apa yang perlu diverifikasi? | Jumlah hasil yang diterima per jendela waktu | Hasil identik dengan durasi atau kapasitas yang disesuaikan |
| Kegagalan apa yang perlu diantisipasi? | Satu tugas atau publikasi yang terisolasi | Dampak peserta yang tidak tersedia terhadap kelompok |
Jangan mencampuradukkan replikasi dan pembagian memori
Beberapa salinan model tidak berarti parameternya dibagi antar kartu. PyTorch DistributedDataParallel menyinkronkan gradien antar proses yang melatih model lokalnya masing-masing. Pendekatan ini karenanya tidak memungkinkan kita menyimpulkan, hanya dari namanya, bahwa model yang terlalu besar untuk satu kartu akan muat pada beberapa kartu. Mekanisme partisi memerlukan dokumentasi dan validasinya sendiri.
Memori setiap kartu harus mencakup apa yang benar-benar ditempatkan perangkat lunak di sana: data, keadaan model, ruang sementara, dan pertukaran yang mungkin terjadi. Puncaknya dapat bervariasi dengan pengaturan dan fase pemrosesan. Catatlah per perangkat. Jumlah kapasitas nominal menyembunyikan ketidakseimbangan di mana satu kartu kekurangan memori sementara kartu lain masih menyisakan. Kapasitas total batch tidak cukup untuk menerima skenario tersebut.
Contoh fiktif: membagi delapan konversi independen
Tim fiktif « Index des ouvrages » menyiapkan delapan konversi dokumen. Dalam asumsi kerjanya, setiap konversi menempati satu kartu selama dua belas menit, termasuk pemuatan dan keluaran. Satu tugas muat sendiri di kartu dan tidak diperlukan pertukaran sebelum perakitan akhir. Durasi ini hanya berfungsi untuk membangun penalaran: durasi ini tidak menggambarkan eksekusi maupun performa GPU apa pun yang ditawarkan oleh Capordia.
Dengan satu kartu, delapan tugas berurutan berarti 8 × 12 = 96 menit. Dengan dua kartu dan pembagian yang seimbang, masing-masing empat tugas, bagian yang dapat diparalelkan secara teoretis menjadi 48 menit. Jika perakitan akhir memerlukan sepuluh menit di pos terpisah, jalur lengkapnya menjadi 106 atau 58 menit, di luar waktu tunggu sebelum mulai. Perhitungan ini mengasumsikan kedua kartu tidak memperlambat pemuatan satu sama lain.
| Organisasi | Bagian yang dapat diparalelkan | Perakitan | Durasi terhitung |
|---|---|---|---|
| Satu kartu, delapan tugas | 96 menit | 10 menit | 106 menit |
| Dua kartu, masing-masing empat tugas | 48 menit | 10 menit | 58 menit |
Mengungkap apa yang dapat membatalkan keuntungan teoretis ini
Dalam contoh yang sama, dokumen mungkin tidak berukuran sama. Menetapkan empat dokumen terpanjang ke satu kartu membuat kartu lain menunggu di akhir proses. Distribusi berdasarkan ketersediaan dapat meningkatkan keseimbangan, tetapi memerlukan mekanisme penetapan yang andal dan kebijakan penerimaan. Panduan tentang antrean membahas organisasi ini; perhitungan ini tidak membuktikan bahwa hal itu sudah diterapkan.
Penyimpanan juga dapat menjadi sumber daya bersama yang dominan. Dua proses yang membaca data sama atau menulis hasil besar secara bersamaan belum tentu mendapat dua kali throughput. Periksa juga batas konkurensi alat dan lisensi. Jika bagian yang tidak dapat diparalelkan bertambah, hitung ulang jadwal lengkapnya. Waktu yang dihemat pada satu fase tidak boleh menutupi keterlambatan yang ditambahkan di tempat lain.
Untuk pekerjaan terdistribusi, dapatkan topologi sebenarnya
Tanyakan kartu mana yang terlihat, bagaimana kartu-kartu itu berkomunikasi, dan sumber daya host mana yang dipakai bersama oleh prosesnya. Periksa perangkat yang dapat diakses dari lingkungan yang digunakan, bukan hanya dari konsol administrator. CUDA menyatakan bahwa akses ke memori GPU lain bergantung antara lain pada topologi dan kemampuan sistem. Dukungan suatu fungsi oleh sebuah model tidak membuktikan adanya tautan yang diharapkan pada mesin tersebut.
Simpan skema sederhana alur data: masukan, kartu atau proses terkait, pertukaran, penggabungan akhir, dan keluaran. Untuk setiap panah, identifikasi apakah melewati memori host, tautan antar-GPU, atau jaringan. Tampilan ini berguna untuk memilih pemeriksaan penerimaan. Ini tidak memaksakan teknologi tertentu dan tidak mengubah permintaan multi-GPU menjadi janji topologi tertentu.
Membandingkan dua organisasi tanpa mengubah hasil yang diharapkan
Siapkan korpus kecil yang representatif dan jalankan, pada target yang Anda izinkan, organisasi acuan lalu organisasi kandidat. Pertahankan versi, pengaturan, kualitas yang diharapkan, dan aturan perakitan. Bandingkan waktu hingga hasil diterima, puncak memori setiap kartu, kesalahan, dan konsumsi sumber daya bersama. Pisahkan observasi dari estimasi; perintah yang diajukan bukanlah hasil yang sudah diperoleh.
Periksa khususnya bahwa jumlah keluaran yang diterima tetap sama dan tidak ada masukan yang terlewat. Untuk perhitungan yang sensitif terhadap urutan operasi, pilih toleransi yang beralasan daripada kesetaraan yang arbitrer. Organisasi yang selesai lebih cepat dengan kualitas berbeda menjawab masalah lain. Simpan juga kasus di mana pembagian tidak menguntungkan: batas ini menjelaskan pilihan lebih baik daripada peringkat kartu tanpa beban bersama.
Menerjemahkan pilihan menjadi kapasitas yang diminta
Akhirnya tuliskan jumlah tugas simultan, kartu yang diperlukan untuk masing-masing, dan kondisi yang penting. Satu tugas yang dibagi ke dua kartu dan dua tugas pada satu kartu merupakan dua organisasi berbeda, meskipun total kartunya sama. Konfigurasi yang dipilih harus memungkinkan organisasi yang diperlukan; jangan mulai dari total nominal lalu mengarang penggunaannya.
Katalog mencantumkan paket kartu. Satu paket B200 berisi dua GPU masing-masing 180 GB; komposisi ini tidak menjamin bahwa perangkat lunak akan memanfaatkannya sebagai satu memori. Langkah berikutnya adalah mencocokkan kebutuhan dengan paket lalu menerima properti yang benar-benar diperlukan. Jadwal, biaya, dan keputusan tetap bersifat sementara selama kondisi yang menentukan belum diverifikasi.
Pertanyaan untuk memutuskan
Apakah dua GPU selalu lebih cepat daripada satu?
Tidak. Keuntungannya bergantung pada bagian yang dapat diparalelkan, pertukaran data, dan sumber daya bersama. Untuk tugas tunggal yang tidak dapat dibagi, kartu kedua bisa jadi tidak terpakai. Bandingkan waktu hingga hasil yang sama dan dapat diterima, pada protokol yang eksplisit.
Apakah paket dua kartu menggandakan memori yang tersedia untuk program saya?
Tidak secara otomatis. Setiap perangkat memiliki memorinya sendiri dan program harus membagi status atau datanya. Sebaliknya, replikasi model justru dapat menduplikasi sebagian besar status tersebut. Periksa mekanisme perangkat lunak dan puncak per kartu.
Kapan sebaiknya memulai dengan tugas-tugas independen?
Ketika setiap unit dapat dihitung secara terpisah dan manfaat yang dicari adalah menyelesaikan lebih banyak unit. Namun tetap perlu memvalidasi penetapan, keseimbangan beban, dan penggabungan akhir, tanpa mengasumsikan penyimpanan dan lisensi ikut secara otomatis.