DistributedDataParallel (DDP)
İşlem grupları, dist.init_process_group, DistributedSampler, gradyan eşzamanlama.
DistributedDataParallel (DDP), CoddyKit'te ücretsiz bir Learn AI with Python dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn AI with Python öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn AI with Python kursu toplamda 4 dersten oluşur.
DDP Nedir
DistributedDataParallel (DDP), PyTorch'un veri paralelliğiyle eğitim için sunduğu yüksek performanslı yaklaşımdır. Her biri modelin tam bir kopyasını bulunduran GPU başına bir süreç başlatır ve gradyanları verimli biçimde eşzamanlar. DDP, GPU'lar ve makineler arasında neredeyse doğrusal ölçeklenir.
İşlem Grubu
DDP, süreçleri bir işlem grubu üzerinden koordine eder. Her süreç benzersiz bir sıra alır ve toplam dünya boyutunu bilir. Süreçler bir arka uç üzerinden iletişim kurar; NVIDIA GPU'larında bu arka uç nccl'dir.
init_process_group
Her süreç gruba katılarak başlar. backend="nccl" ile birlikte dist.init_process_group, GPU'lar arası iletişimi kurar.
import torch.distributed as dist
import os
dist.init_process_group(backend="nccl")
rank = dist.get_rank()
world_size = dist.get_world_size()Cihazı Sabitleme
Her süreç bir GPU'ya sahip olmalıdır. Cihazı ayarlamak için yerel sırayı kullanınız; böylece 0. süreç cuda:0'ı, 1. süreç cuda:1'i ve devamı kullanır.
local_rank = int(os.environ["LOCAL_RANK"])
torch.cuda.set_device(local_rank)
device = torch.device("cuda", local_rank)Modeli Sarma
Modeli GPU'suna taşıyınız, ardından device_ids=[local_rank] ile DDP içine sarınız. DDP, geriye yayılım sırasında gradyanları eşzamanlayacak kancaları kaydeder.
from torch.nn.parallel import DistributedDataParallel as DDP
model = MyModel().to(device)
model = DDP(model, device_ids=[local_rank])DistributedSampler
Her süreç, örtüşme olmadan verilerin farklı bir parçasını görmelidir. DistributedSampler, veri kümesini sıralar arasında bölümlere ayırır; böylece parçaların birleşimi her dönemde veri kümesinin tamamını tam olarak bir kez kapsar.
from torch.utils.data import DataLoader
from torch.utils.data.distributed import DistributedSampler
sampler = DistributedSampler(dataset)
loader = DataLoader(dataset, batch_size=32, sampler=sampler)Her Dönemde Karıştırma
Her dönemin başında sampler.set_epoch(epoch) çağrısını yapınız. Bu işlem, süreçler arasında karıştırmayı tutarlı biçimde yeniden başlatır; böylece her sıra aynı şekilde karıştırır ve bölümler ayrık kalır.
for epoch in range(epochs):
sampler.set_epoch(epoch)
for x, y in loader:
...Gradyanların Toplu Azaltılması
loss.backward() sırasında DDP bir toplu azaltma işlemi gerçekleştirir: her süreç gradyanlarını gönderir ve ortalaması alınmış sonucu alır; böylece tüm kopyalar aynı güncellemeleri uygular. Toplu azaltma, geriye yayılımla örtüşerek iletişim maliyetini gizler.
GPU 0 Darboğazı Yok
DataParallel'ın aksine DDP'de çıktıları toplayan merkezi bir GPU yoktur. Her süreç kendi kaybını ve gradyanlarını hesaplar; yalnızca gradyanlar toplu azaltma yoluyla değiştirilir. DDP'nin çok daha iyi ölçeklenmesinin nedeni bu simetridir.
torchrun ile Başlatma
torchrun, GPU başına süreçleri başlatır ve sıra ortam değişkenlerini ayarlar. --nproc_per_node=4, bu düğümde 4 süreç (GPU başına bir tane) başlatır.
torchrun --nproc_per_node=4 train.pyYalnızca 0. Sırada Kaydetme
Tüm sıralar aynı ağırlıkları tuttuğundan, üzerine yazmayı önlemek için denetim noktasını yalnızca biri yazmalıdır. Kaydetme işlemini bir sıra denetimiyle koruyunuz.
if rank == 0:
torch.save(model.module.state_dict(), "model.pt")
dist.barrier()Hızlı Kontrol
DDP bilginizi sınayınız.
Özet
DistributedDataParallel'ı öğrendiniz:
dist.init_process_group(backend="nccl"), işlem grubuna katılır- DistributedSampler, her sıraya ayrık bir veri parçası verir
DDP(model, device_ids=[rank]), gradyanları toplu azaltma yoluyla eşzamanlartorchrun --nproc_per_node=4ile başlatınız- Yalnızca 0. sırada kaydediniz
Sıkça Sorulan Sorular
“DistributedDataParallel (DDP)” dersi ücretsiz mi?
Evet — “DistributedDataParallel (DDP)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn AI with Python kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn AI with Python kursu toplamda 4 dersten oluşur.
“DistributedDataParallel (DDP)” dersinde ne öğreneceğim?
İşlem grupları, dist.init_process_group, DistributedSampler, gradyan eşzamanlama. Learn AI with Python ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn AI with Python öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn AI with Python, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“DistributedDataParallel (DDP)” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn AI with Python dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn AI with Python dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- DataParallel ile Çoklu GPU Eğitimi
- DistributedDataParallel (DDP)
- AMP ile Karışık Hassasiyet Eğitimi
- Hugging Face Accelerate ile Verimli Eğitim