Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pipelining Model
Salah satu fitur inti dari SageMaker perpustakaan paralelisme model adalah paralelisme pipa, yang menentukan urutan perhitungan dibuat dan data diproses di seluruh perangkat selama pelatihan model. Pipelining adalah teknik untuk mencapai paralelisasi sejati dalam paralelisme model, dengan memiliki GPUs komputasi secara bersamaan pada sampel data yang berbeda, dan untuk mengatasi kehilangan kinerja karena komputasi sekuensial. Saat Anda menggunakan paralelisme pipa, pekerjaan pelatihan dijalankan dengan cara pipeline melalui microbatch untuk memaksimalkan penggunaan. GPU
catatan
Paralelisme pipa, juga disebut partisi model, tersedia untuk keduanya dan. PyTorch TensorFlow Untuk versi kerangka kerja yang didukung, lihatKerangka kerja yang didukung dan Wilayah AWS.
Jadwal Eksekusi Pipeline
Pipelining didasarkan pada pemisahan mini-batch menjadi microbatch, yang dimasukkan ke dalam pipeline pelatihan one-by-one dan mengikuti jadwal eksekusi yang ditentukan oleh runtime perpustakaan. Microbatch adalah subset yang lebih kecil dari mini-batch pelatihan yang diberikan. Jadwal pipa menentukan microbatch mana yang dijalankan oleh perangkat mana untuk setiap slot waktu.
Misalnya, tergantung pada jadwal pipeline dan partisi model, GPU i
mungkin melakukan komputasi (maju atau mundur) pada microbatch b
saat GPU i+1
melakukan komputasi pada microbatchb+1
, sehingga menjaga keduanya tetap aktif pada saat yang sama. GPUs Selama pass maju atau mundur tunggal, alur eksekusi untuk satu microbatch mungkin mengunjungi perangkat yang sama beberapa kali, tergantung pada keputusan partisi. Misalnya, operasi yang ada di awal model dapat ditempatkan pada perangkat yang sama dengan operasi di akhir model, sedangkan operasi di antaranya berada pada perangkat yang berbeda, yang berarti perangkat ini dikunjungi dua kali.
Pustaka menawarkan dua jadwal pipeline yang berbeda, sederhana dan interleaved, yang dapat dikonfigurasi menggunakan pipeline
parameter di Python. SageMaker SDK Dalam kebanyakan kasus, pipa interleaved dapat mencapai kinerja yang lebih baik dengan memanfaatkan yang lebih efisien. GPUs
Pipa Interleaved
Dalam pipa yang disisipkan, eksekusi mundur dari microbatch diprioritaskan bila memungkinkan. Hal ini memungkinkan pelepasan lebih cepat dari memori yang digunakan untuk aktivasi, menggunakan memori lebih efisien. Ini juga memungkinkan untuk menskalakan jumlah microbatch yang lebih tinggi, mengurangi waktu idle. GPUs Pada kondisi tunak, setiap perangkat bergantian antara berjalan maju dan mundur. Ini berarti bahwa lintasan mundur dari satu microbatch dapat berjalan sebelum pass maju dari microbatch lain selesai.
Gambar sebelumnya menggambarkan contoh jadwal eksekusi untuk pipeline interleaved lebih dari 2. GPUs Pada gambar, F0 mewakili pass maju untuk microbatch 0, dan B1 mewakili pass mundur untuk microbatch 1. Pembaruan mewakili pembaruan pengoptimal parameter. GPU0 selalu memprioritaskan pass mundur bila memungkinkan (misalnya, mengeksekusi B0 sebelum F2), yang memungkinkan untuk membersihkan memori yang digunakan untuk aktivasi sebelumnya.
Alur Sederhana
Pipeline sederhana, sebaliknya, selesai menjalankan pass maju untuk setiap microbatch sebelum memulai lintasan mundur. Ini berarti bahwa itu hanya menyalurkan tahapan pass maju dan mundur di dalam diri mereka sendiri. Gambar berikut mengilustrasikan contoh cara kerjanya, lebih dari 2GPUs.
Eksekusi Pipelining dalam Kerangka Kerja Tertentu
Gunakan bagian berikut untuk mempelajari tentang keputusan penjadwalan pipeline khusus kerangka kerja yang dibuat oleh pustaka SageMaker paralelisme model untuk dan. TensorFlow PyTorch
Eksekusi Pipeline dengan TensorFlow
Gambar berikut adalah contoh TensorFlow grafik yang dipartisi oleh pustaka paralelisme model, menggunakan pemisahan model otomatis. Ketika grafik dibagi, setiap subgraf yang dihasilkan direplikasi B kali (kecuali untuk variabel), di mana B adalah jumlah microbatch. Pada gambar ini, setiap subgraf direplikasi 2 kali (B=2). SMPInput
Operasi dimasukkan pada setiap input subgraf, dan SMPOutput
operasi dimasukkan pada setiap output. Operasi ini berkomunikasi dengan backend perpustakaan untuk mentransfer tensor ke dan dari satu sama lain.
Gambar berikut adalah contoh dari 2 subgraf yang dibagi dengan B = 2 dengan operasi gradien ditambahkan. Gradien SMPInput
op adalah SMPOutput
op, dan sebaliknya. Ini memungkinkan gradien mengalir mundur selama propagasi balik.
Ini GIF menunjukkan contoh jadwal eksekusi pipeline interleaved dengan B = 2 microbatch dan 2 subgraf. Setiap perangkat secara berurutan mengeksekusi salah satu replika subgraf untuk meningkatkan pemanfaatan. GPU Saat B tumbuh lebih besar, fraksi slot waktu idle menjadi nol. Kapan pun waktunya untuk melakukan perhitungan (maju atau mundur) pada replika subgraf tertentu, lapisan pipa memberi sinyal ke operasi biru SMPInput
yang sesuai untuk mulai mengeksekusi.
Setelah gradien dari semua microbatch dalam satu mini-batch dihitung, perpustakaan menggabungkan gradien di seluruh microbatch, yang kemudian dapat diterapkan ke parameter.
Eksekusi Pipeline dengan PyTorch
Secara konseptual, pipelining mengikuti ide serupa di. PyTorch Namun, karena PyTorch tidak melibatkan grafik statis sehingga PyTorch fitur perpustakaan paralelisme model menggunakan paradigma pipelining yang lebih dinamis.
Seperti dalam TensorFlow, setiap batch dibagi menjadi beberapa microbatch, yang dijalankan satu per satu pada setiap perangkat. Namun, jadwal eksekusi ditangani melalui server eksekusi yang diluncurkan pada setiap perangkat. Setiap kali output submodul yang ditempatkan pada perangkat lain diperlukan pada perangkat saat ini, permintaan eksekusi dikirim ke server eksekusi perangkat jarak jauh bersama dengan tensor input ke submodul. Server kemudian mengeksekusi modul ini dengan input yang diberikan dan mengembalikan respons ke perangkat saat ini.
Karena perangkat saat ini menganggur selama eksekusi submodul jarak jauh, eksekusi lokal untuk microbatch saat ini berhenti, dan runtime perpustakaan mengalihkan eksekusi ke microbatch lain yang dapat dikerjakan secara aktif oleh perangkat saat ini. Prioritas microbatch ditentukan oleh jadwal pipa yang dipilih. Untuk jadwal pipa yang disisipkan, microbatch yang berada dalam tahap mundur komputasi diprioritaskan bila memungkinkan.