View a markdown version of this page

Pipelining Model - Amazon SageMaker AI

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 di mana perhitungan dibuat dan data diproses di seluruh perangkat selama pelatihan model. Pipelining adalah teknik untuk mencapai paralelisasi sejati dalam paralelisme model, dengan membuat GPU menghitung secara bersamaan pada sampel data yang berbeda, dan untuk mengatasi kehilangan kinerja karena perhitungan sekuensial. Saat Anda menggunakan paralelisme pipeline, 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 Pelaksanaan Pipa

Pipelining didasarkan pada pemisahan batch mini menjadi mikrobatch, yang dimasukkan ke dalam pipeline pelatihan satu per satu dan mengikuti jadwal eksekusi yang ditentukan oleh runtime pustaka. Mikrobatch adalah bagian yang lebih kecil dari batch mini pelatihan yang diberikan. Jadwal pipa menentukan mikrobatch mana yang dieksekusi oleh perangkat mana untuk setiap slot waktu.

Misalnya, tergantung pada jadwal pipeline dan partisi model, GPU i mungkin melakukan perhitungan (maju atau mundur) pada microbatch b sementara GPU i+1 melakukan perhitungan pada microbatchb+1, sehingga menjaga kedua GPU tetap aktif pada saat yang sama. Selama satu pass maju atau mundur, aliran 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, sementara operasi di antaranya pada perangkat yang berbeda, yang berarti perangkat ini dikunjungi dua kali.

Pustaka menawarkan dua jadwal pipeline yang berbeda, sederhana dan disisipkan, yang dapat dikonfigurasi menggunakan pipeline parameter di SageMaker Python SDK. Dalam kebanyakan kasus, pipeline yang disisipkan dapat mencapai kinerja yang lebih baik dengan memanfaatkan GPU secara lebih efisien.

Pipa Terseling

Dalam pipa yang disisipkan, eksekusi mundur dari microbatch diprioritaskan bila memungkinkan. Hal ini memungkinkan pelepasan memori yang digunakan untuk aktivasi lebih cepat, menggunakan memori lebih efisien. Ini juga memungkinkan untuk menskalakan jumlah mikrobatch lebih tinggi, mengurangi waktu idle GPU. Pada kondisi mapan, setiap perangkat bergantian antara berlari maju dan mundur. Ini berarti bahwa lintasan mundur dari satu mikrobatch dapat berjalan sebelum lintasan maju dari mikrobatch lain selesai.

Contoh jadwal eksekusi untuk pipeline yang disisipkan di atas 2 GPU.

Gambar sebelumnya menggambarkan contoh jadwal eksekusi untuk pipeline yang disisipkan di atas 2 GPU. Pada gambar, F0 mewakili jalur maju untuk mikrobatch 0, dan B1 mewakili lintasan mundur untuk mikrobatch 1. Pembaruan mewakili pembaruan pengoptimal dari 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

Pipa sederhana, sebaliknya, menyelesaikan menjalankan pass maju untuk setiap microbatch sebelum memulai lintasan mundur. Ini berarti bahwa ia hanya menyalurkan tahapan pass maju dan mundur di dalam dirinya sendiri. Gambar berikut menggambarkan contoh cara kerjanya, lebih dari 2 GPU.

Contoh pada pipa yang menjalankan jalur maju untuk setiap mikrobatch sebelum memulai lintasan mundur.

Eksekusi Pipelining dalam Kerangka Kerja Tertentu

Gunakan bagian berikut untuk mempelajari tentang perpustakaan paralelisme model keputusan penjadwalan pipa khusus SageMaker kerangka kerja yang dibuat 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 mikrobatch. Pada gambar ini, setiap subgraf direplikasi 2 kali (B = 2). SMPInputOperasi 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.

Contoh TensorFlow grafik yang dipartisi oleh pustaka paralelisme model, menggunakan pemisahan model otomatis.

Gambar berikut adalah contoh dari 2 subgraf yang dibagi dengan B = 2 dengan operasi gradien ditambahkan. Gradien SMPInput op adalah SMPOutput op, dan sebaliknya. Hal ini memungkinkan gradien mengalir mundur selama propagasi balik.

Contoh 2 subgraf yang dibagi dengan B = 2 dengan operasi gradien ditambahkan.

GIF ini menunjukkan contoh jadwal eksekusi pipeline yang terjalin dengan B = 2 mikrobatch 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 tiba waktunya untuk melakukan perhitungan (maju atau mundur) pada replika subgraf tertentu, lapisan pipeline memberi sinyal ke SMPInput operasi biru yang sesuai untuk mulai mengeksekusi.

Setelah gradien dari semua mikrobatch dalam satu batch mini dihitung, perpustakaan menggabungkan gradien di seluruh mikrobatch, 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 pada TensorFlow, setiap batch dibagi menjadi sejumlah mikrobatch, yang dieksekusi satu per satu pada setiap perangkat. Namun, jadwal eksekusi ditangani melalui server eksekusi yang diluncurkan pada setiap perangkat. Setiap kali output dari 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 tidak aktif selama eksekusi submodul jarak jauh, eksekusi lokal untuk mikrobatch saat ini berhenti, dan runtime pustaka mengalihkan eksekusi ke microbatch lain yang dapat dikerjakan perangkat saat ini secara aktif. Prioritas mikrobatch ditentukan oleh jadwal pipa yang dipilih. Untuk jadwal pipa yang disisipkan, mikrobatch yang berada di tahap terbelakang perhitungan diprioritaskan bila memungkinkan.