Topik trending
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Anda berada dalam wawancara ML Engineer di Google.
Pewawancara: Kami perlu melatih LLM di 1.000 GPU. Bagaimana Anda memastikan semua GPU membagikan apa yang mereka pelajari?
Anda: Gunakan server parameter pusat untuk menggabungkan dan mendistribusikan kembali bobot.
Wawancara selesai.
Inilah yang Anda lewatkan:
Salah satu kemacetan run-time utama dalam pelatihan multi-GPU terjadi selama sinkronisasi GPU.
Misalnya, dalam pelatihan multi-GPU melalui paralelisme data:
- Model yang sama didistribusikan ke GPU yang berbeda.
- Setiap GPU memproses subset yang berbeda dari seluruh himpunan data.
Periksa ini 👇
Hal ini mengarah ke gradien yang berbeda di berbagai perangkat.
Jadi, sebelum memperbarui parameter model pada setiap perangkat GPU, kita harus mengomunikasikan gradien ke semua perangkat lain untuk menyinkronkannya.
Mari kita pahami 2 strategi umum selanjutnya!
Algoritma 1) Kurangi semua
Cara yang jelas adalah dengan mengirim gradien dari satu perangkat ke semua perangkat lain untuk menyinkronkannya.
Tapi ini menggunakan bandwidth yang tinggi.
Jika setiap GPU memiliki elemen "N" dan ada GPU "G", itu menghasilkan transfer total elemen 👇 G*(G-1)*N
Kita dapat mengoptimalkannya dengan mentransfer semua elemen ke satu GPU, menghitung nilai akhir, dan mengirimkannya kembali ke semua GPU lainnya.
Ini adalah peningkatan yang signifikan.
Tetapi sekarang satu GPU harus menerima, menghitung, dan mengkomunikasikan kembali gradien, sehingga ini tidak berskala.
Algoritma 2) Kurangi cincin
Fase #1) Bagikan-kurangi
Pertama, gradien dibagi menjadi segmen G pada setiap GPU (G = jumlah total GPU).
Periksa ini 👇
Dalam iterasi, setiap GPU mengirimkan segmen ke GPU berikutnya:
- GPU1 mengirimkan a₁ ke GPU2, di mana ia ditambahkan ke b₁
- GPU2 mengirim b₂ ke GPU3, di mana ia ditambahkan ke c₂
- GPU3 mengirimkan c₃ ke GPU4, di mana ditambahkan ke d₃
- GPU4 mengirim d₄ ke GPU1, di mana ia ditambahkan ke a₄
Periksa ini 👇
Proses ini dilakukan lagi:
- GPU1 mengirim (d₄+a₄) ke GPU2, di mana ia ditambahkan ke b₄.
- GPU2 mengirim (a₁+b₁) ke GPU3, di mana ditambahkan ke c₁.
- GPU3 mengirim (b₂+c₂) ke GPU4, di mana ia ditambahkan ke d₂.
- GPU4 mengirim (c₃+d₃) ke GPU1, di mana GPU4 ditambahkan ke a₃.
Periksa ini 👇
Dalam iterasi akhir, segmen berikut ditransfer ke GPU berikutnya.
Ini mengarah ke keadaan di mana setiap GPU memiliki satu segmen utuh, dan kita dapat mentransfer segmen lengkap ini ke semua GPU lainnya.
Periksa ini 👇
Fase #2) Hanya berbagi
Sekarang setiap GPU memiliki satu segmen utuh, kita dapat mentransfer segmen lengkap ini ke semua GPU lainnya.
Prosesnya dilakukan mirip dengan apa yang kita bahas di atas, jadi kita tidak akan membahas secara rinci.
Iterasi 1 ditunjukkan di bawah ini👇
Selanjutnya, kami melakukan iterasi 2 dan 3.
Ini dilakukan mirip dengan apa yang kita pelajari di Fase 1.
Periksa ini 👇
Dan begitulah!
Bobot model di seluruh GPU telah disinkronkan.
Meskipun total elemen yang ditransfer masih sama dengan yang kami miliki dalam pendekatan "single-GPU-master", pendekatan cincin ini jauh lebih terukur karena tidak menempatkan seluruh beban pada satu GPU.
Periksa ini 👇

Secara default, model pembelajaran mendalam hanya menggunakan satu GPU untuk pelatihan, meskipun beberapa GPU tersedia.
Cara ideal untuk melatih model adalah dengan mendistribusikan beban kerja pelatihan ke beberapa GPU.
Grafik tersebut menggambarkan empat strategi untuk pelatihan👇 multi-GPU
364,79K
Teratas
Peringkat
Favorit

