0Pricing
Learn AI with Python · Ders

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.py

Yalnı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şzamanlar
  • torchrun --nproc_per_node=4 ile 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

  1. DataParallel ile Çoklu GPU Eğitimi
  2. DistributedDataParallel (DDP)
  3. AMP ile Karışık Hassasiyet Eğitimi
  4. Hugging Face Accelerate ile Verimli Eğitim
← Learn AI with Python Sayfasına Dön