DistributedDataParallel (DDP)
Grup proses, dist.init_process_group, DistributedSampler, sinkronisasi gradien.
DistributedDataParallel (DDP) adalah pelajaran Learn AI with Python gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn AI with Python, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn AI with Python mencakup 4 pelajaran total.
Apa Itu DDP
DistributedDataParallel (DDP) adalah pendekatan PyTorch berperforma tinggi untuk pelatihan paralel data. Pendekatan ini menjalankan satu proses per GPU, masing-masing memegang replika model lengkap, dan menyinkronkan gradien secara efisien. DDP dapat diskalakan hampir secara linear di berbagai GPU dan mesin.
Grup Proses
DDP mengoordinasikan proses melalui grup proses. Setiap proses mendapatkan peringkat unik dan mengetahui total ukuran keseluruhan. Proses-proses tersebut berkomunikasi melalui sebuah backend; pada GPU NVIDIA, backend tersebut adalah nccl.
init_process_group
Setiap proses memulai dengan bergabung ke grup. dist.init_process_group dengan backend="nccl" menyiapkan komunikasi antar-GPU.
import torch.distributed as dist
import os
dist.init_process_group(backend="nccl")
rank = dist.get_rank()
world_size = dist.get_world_size()Menetapkan Perangkat
Setiap proses seharusnya memiliki satu GPU. Gunakan peringkat lokal untuk menetapkan perangkat sehingga proses 0 menggunakan cuda:0, proses 1 menggunakan cuda:1, dan seterusnya.
local_rank = int(os.environ["LOCAL_RANK"])
torch.cuda.set_device(local_rank)
device = torch.device("cuda", local_rank)Membungkus Model
Pindahkan model ke GPU-nya, lalu bungkus dengan DDP menggunakan device_ids=[local_rank]. DDP mendaftarkan kait yang akan menyinkronkan gradien selama propagasi mundur.
from torch.nn.parallel import DistributedDataParallel as DDP
model = MyModel().to(device)
model = DDP(model, device_ids=[local_rank])DistributedSampler
Setiap proses harus melihat bagian yang berbeda dari data, tanpa tumpang tindih. DistributedSampler mempartisi kumpulan data di antara peringkat sehingga gabungannya mencakup seluruh kumpulan data tepat satu kali dalam setiap putaran pelatihan.
from torch.utils.data import DataLoader
from torch.utils.data.distributed import DistributedSampler
sampler = DistributedSampler(dataset)
loader = DataLoader(dataset, batch_size=32, sampler=sampler)Pengacakan di Setiap Putaran Pelatihan
Panggil sampler.set_epoch(epoch) pada awal setiap putaran pelatihan. Ini menginisialisasi ulang pengacakan secara konsisten di seluruh proses sehingga setiap peringkat mengacak dengan cara yang sama dan partisinya tetap saling terpisah.
for epoch in range(epochs):
sampler.set_epoch(epoch)
for x, y in loader:
...Agregasi Semua Gradien
Selama loss.backward(), DDP melakukan agregasi semua: setiap proses mengirim gradiennya dan menerima hasil yang telah dirata-ratakan, sehingga semua replika menerapkan pembaruan yang sama. Agregasi semua berlangsung bersamaan dengan propagasi mundur, sehingga biaya komunikasi tersamarkan.
Tanpa Hambatan GPU 0
Berbeda dari DataParallel, DDP tidak memiliki GPU pusat yang mengumpulkan keluaran. Setiap proses menghitung kerugian dan gradiennya sendiri; hanya gradien yang dipertukarkan melalui agregasi semua. Simetri inilah yang membuat DDP dapat diskalakan jauh lebih baik.
Menjalankan dengan torchrun
torchrun menjalankan proses per GPU dan menetapkan variabel lingkungan peringkat. --nproc_per_node=4 memulai 4 proses (satu per GPU) pada simpul ini.
torchrun --nproc_per_node=4 train.pyMenyimpan Hanya pada Peringkat 0
Semua peringkat menyimpan bobot yang identik, jadi hanya satu yang boleh menulis titik pemeriksaan agar tidak saling menimpa. Lindungi operasi penyimpanan dengan pemeriksaan peringkat.
if rank == 0:
torch.save(model.module.state_dict(), "model.pt")
dist.barrier()Pemeriksaan Singkat
Uji pengetahuan Anda tentang DDP.
Ringkasan
Anda telah mempelajari DistributedDataParallel:
dist.init_process_group(backend="nccl")bergabung ke grup proses- DistributedSampler memberikan setiap peringkat bagian data yang tidak tumpang tindih
DDP(model, device_ids=[rank])menyinkronkan gradien melalui agregasi semua- Jalankan dengan
torchrun --nproc_per_node=4 - Simpan hanya pada peringkat 0
Pertanyaan yang Sering Diajukan
Apakah pelajaran “DistributedDataParallel (DDP)” gratis?
Ya — teks lengkap “DistributedDataParallel (DDP)” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn AI with Python, upgrade ke CoddyKit PRO. Kursus Learn AI with Python mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “DistributedDataParallel (DDP)”?
Grup proses, dist.init_process_group, DistributedSampler, sinkronisasi gradien. Kamu berlatih Learn AI with Python dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn AI with Python?
Tidak diperlukan pengalaman sebelumnya. Learn AI with Python di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “DistributedDataParallel (DDP)” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn AI with Python ini?
Ya. Setiap pelajaran Learn AI with Python menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pelatihan Multi-GPU dengan DataParallel
- DistributedDataParallel (DDP)
- Pelatihan Presisi Campuran dengan AMP
- Pelatihan Efisien dengan Hugging Face Accelerate