Pelajari AI dengan Python · Pelajaran

Latihan Berbilang GPU dengan DataParallel

nn.DataParallel, pengimbangan memori GPU, kesesakan lebar jalur, masa DDP lebih baik.

Pelajaran 1 daripada 413 langkah

Latihan Berbilang GPU dengan DataParallel ialah pelajaran Pelajari AI dengan Python percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pelajari AI dengan Python, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pelajari AI dengan Python merangkumi sejumlah 4 pelajaran.

Mengapa Berbilang GPU

Model dan kelompok moden semakin melebihi memori serta keupayaan pengiraan satu GPU. Penggunaan berbilang GPU membolehkan anda melatih model yang lebih besar atau memproses kelompok yang lebih besar dalam masa sebenar yang lebih singkat. PyTorch menawarkan beberapa cara untuk berbuat demikian; cara paling mudah ialah DataParallel.

Pemprosesan Data Selari

Pemprosesan data selari mereplikasi model pada setiap GPU dan membahagikan setiap kelompok input antara GPU tersebut. Setiap GPU membuat pengiraan pada bahagiannya, kemudian kecerunan digabungkan supaya semua replika kekal disegerakkan.

nn.DataParallel

nn.DataParallel membalut model dalam satu baris. Anda memberikan ID GPU yang ingin digunakan, dan PyTorch mengendalikan pengagihan input serta pengumpulan output secara automatik.

import torch
import torch.nn as nn

model = MyModel().cuda()
model = nn.DataParallel(model, device_ids=[0, 1])

Pembahagian Kelompok Automatik

Semasa laluan ke hadapan, DataParallel membahagikan kelompok sepanjang dimensi 0 merentasi GPU yang disenaraikan. Kelompok sebanyak 64 pada dua GPU menjadi dua subkelompok sebanyak 32. Setiap GPU menjalankan model yang sama pada subkelompoknya secara selari.

# batch of 64 with device_ids=[0, 1]
# GPU 0 processes samples 0..31
# GPU 1 processes samples 32..63

Penerataan Kecerunan

Semasa laluan undur, kecerunan bagi setiap GPU dikumpulkan pada peranti utama dan dipuratakan (pada asasnya dijumlahkan dan diskalakan) supaya kemas kini model mencerminkan keseluruhan kelompok. Replika kemudiannya disegerakkan semula untuk langkah seterusnya.

Gelung Latihan Biasa

Bahagian terbaiknya: gelung latihan anda hampir tidak berubah. Anda memindahkan data ke GPU utama dan memanggil model yang dibalut seperti biasa; DataParallel mengendalikan pengagihan secara dalaman.

for x, y in loader:
    x, y = x.cuda(), y.cuda()
    optimizer.zero_grad()
    out = model(x)            # auto-split across GPUs
    loss = criterion(out, y)
    loss.backward()           # gradients averaged
    optimizer.step()

Ketidakseimbangan GPU 0

DataParallel mempunyai kelemahan yang diketahui umum: GPU utama (biasanya GPU 0) mengumpulkan semua output dan mengira kerugian, jadi GPU itu menanggung memori serta pengiraan tambahan. Dengan banyak GPU, GPU 0 menjadi kesesakan dan mungkin kehabisan memori sebelum GPU lain.

Satu Proses, Banyak Utas

DataParallel berjalan dalam satu proses Python dan menggunakan utas untuk menggerakkan GPU. Kunci jurubahasa global Python serta overhed pengagihan dan pengumpulan mengehadkan kecekapan penskalaan, khususnya melebihi 2 hingga 4 GPU.

Mengapa DDP Diutamakan

Atas sebab ini, DistributedDataParallel (DDP) disyorkan untuk penggunaan berbilang GPU yang serius. DDP menjalankan satu proses bagi setiap GPU, menyegerakkan kecerunan dengan pengurangan semua yang cekap, dan mengelakkan kesesakan GPU 0, lalu memberikan penskalaan hampir linear.

Apabila DataParallel Masih Sesuai

DataParallel sesuai digunakan untuk percubaan pantas pada satu mesin dengan 2 GPU, apabila kesederhanaannya yang hanya memerlukan satu baris mengatasi ketidakcekapannya. Untuk latihan merentas beberapa nod atau menggunakan banyak GPU, gunakan DDP sebagai gantinya.

Perangkap Lazim: Menyimpan

Kamus keadaan model yang dibalut mempunyai awalan module.. Untuk menyimpan titik semak yang bersih, simpan model.module.state_dict() supaya ia boleh dimuatkan dengan betul ke dalam model yang tidak dibalut kemudian.

torch.save(model.module.state_dict(), "model.pt")

Semakan Pantas

Uji pengetahuan DataParallel anda.

Imbas Kembali

Anda telah mempelajari latihan berbilang GPU dengan DataParallel:

  • nn.DataParallel(model, device_ids=[0, 1]) mereplikasi model dan membahagikan kelompok
  • Kecerunan dipuratakan merentasi GPU pada setiap langkah
  • Ketidakseimbangan GPU 0 dan reka bentuk satu proses mengehadkan penskalaan
  • Utamakan DDP untuk banyak GPU atau latihan merentas beberapa nod
Percuma untuk bermula

Pelajari Python dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
53
Pelajaran
225

Soalan Lazim

Adakah pelajaran “Latihan Berbilang GPU dengan DataParallel” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pelajari AI dengan Python, termasuk “Latihan Berbilang GPU dengan DataParallel”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pelajari AI dengan Python merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Latihan Berbilang GPU dengan DataParallel”?

nn.DataParallel, pengimbangan memori GPU, kesesakan lebar jalur, masa DDP lebih baik. Anda berlatih Pelajari AI dengan Python menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pelajari AI dengan Python?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pelajari AI dengan Python di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Latihan Berbilang GPU dengan DataParallel” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pelajari AI dengan Python ini?

Ya. Setiap pelajaran Pelajari AI dengan Python menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Latihan Berbilang GPU dengan DataParallel
  2. DistributedDataParallel (DDP)
  3. Latihan Ketepatan Campuran dengan AMP
  4. Latihan Cekap dengan Hugging Face Accelerate
← Kembali ke Pelajari AI dengan Python