0Pricing
Learn AI with Python · Pelajaran

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

Menyimpan 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

  1. Pelatihan Multi-GPU dengan DataParallel
  2. DistributedDataParallel (DDP)
  3. Pelatihan Presisi Campuran dengan AMP
  4. Pelatihan Efisien dengan Hugging Face Accelerate
← Kembali ke Learn AI with Python