Pengantar Model Paralelisme - Amazon SageMaker

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pengantar Model Paralelisme

Paralelisme model adalah metode pelatihan terdistribusi di mana model pembelajaran mendalam dipartisi di beberapa perangkat, di dalam atau di seluruh instance. Halaman pengantar ini memberikan gambaran tingkat tinggi tentang paralelisme model, deskripsi tentang bagaimana hal itu dapat membantu mengatasi masalah yang muncul saat melatih model DL yang biasanya berukuran sangat besar, dan contoh apa yang ditawarkan perpustakaan paralel SageMaker model untuk membantu mengelola strategi paralel model serta konsumsi memori.

Apa itu Model Paralelisme?

Meningkatkan ukuran model pembelajaran mendalam (lapisan dan parameter) menghasilkan akurasi yang lebih baik untuk tugas-tugas kompleks seperti visi komputer dan pemrosesan bahasa alami. Namun, ada batas ukuran model maksimum yang dapat Anda muat dalam memori GPU tunggal. Saat melatih model DL, keterbatasan memori GPU dapat menjadi hambatan dengan cara-cara berikut:

  • Mereka membatasi ukuran model yang dapat Anda latih, karena jejak memori model skala proporsional dengan jumlah parameter.

  • Mereka membatasi ukuran batch per-GPU selama pelatihan, menurunkan pemanfaatan GPU dan efisiensi pelatihan.

Untuk mengatasi keterbatasan yang terkait dengan pelatihan model pada GPU tunggal, SageMaker menyediakan perpustakaan paralel model untuk membantu mendistribusikan dan melatih model DL secara efisien pada beberapa node komputasi. Selain itu, dengan perpustakaan, Anda dapat mencapai pelatihan terdistribusi yang paling optimal menggunakan perangkat yang didukung EFA, yang meningkatkan kinerja komunikasi antar-node dengan latensi rendah, throughput tinggi, dan bypass OS.

Perkirakan Persyaratan Memori Sebelum Menggunakan Model Paralelisme

Sebelum Anda menggunakan perpustakaan paralel SageMaker model, pertimbangkan hal berikut untuk mendapatkan rasa persyaratan memori pelatihan model DL besar.

Untuk pekerjaan pelatihan yang menggunakan pengoptimal AMP (FP16) dan Adam, memori GPU yang diperlukan per parameter adalah sekitar 20 byte, yang dapat kita uraikan sebagai berikut:

  • Parameter FP16 ~ 2 byte

  • Gradien FP16 ~ 2 byte

  • Sebuah negara optimizer FP32 ~ 8 byte berdasarkan optimizers Adam

  • Salinan parameter FP32 ~ 4 byte (diperlukan untuk operasi (OAoptimizer apply))

  • Salinan FP32 gradien ~ 4 byte (diperlukan untuk operasi OA)

Bahkan untuk model DL yang relatif kecil dengan 10 miliar parameter, dapat memerlukan setidaknya 200GB memori, yang jauh lebih besar daripada memori GPU biasa (misalnya, NVIDIA A100 dengan memori 40GB/80GB dan V100 dengan 16/32 GB) tersedia pada satu GPU. Perhatikan bahwa di atas persyaratan memori untuk status model dan pengoptimal, ada konsumen memori lain seperti aktivasi yang dihasilkan di pass maju. Memori yang dibutuhkan bisa jauh lebih besar dari 200GB.

Untuk pelatihan terdistribusi, sebaiknya gunakan instans Amazon EC2 P3 dan P4 yang masing-masing memiliki GPU NVIDIA V100 dan A100 Tensor Core. Untuk detail selengkapnya tentang spesifikasi seperti inti CPU, RAM, volume penyimpanan terlampir, dan bandwidth jaringan, lihat bagian Accelerated Computing di halaman Jenis Instans Amazon EC2.

Bahkan dengan instance komputasi yang dipercepat, jelas bahwa model dengan sekitar 10 miliar parameter seperti Megatron-LM dan T5 dan bahkan model yang lebih besar dengan ratusan miliar parameter seperti GPT-3 tidak dapat menyesuaikan replika model di setiap perangkat GPU.

Bagaimana Perpustakaan Mempekerjakan Model Paralelisme dan Teknik Menyimpan Memori

Perpustakaan terdiri dari berbagai jenis fitur paralelisme model dan fitur hemat memori seperti sharding status optimizer, checkpointing aktivasi, dan pembongkaran aktivasi. Semua teknik ini dapat dikombinasikan untuk melatih model besar secara efisien yang terdiri dari ratusan miliar parameter.

Paralelisme data yang dipecah (tersedia untuk) PyTorch

Paralelisme data yang dipecah adalah teknik pelatihan terdistribusi hemat memori yang membagi keadaan model (parameter model, gradien, dan status pengoptimal) di seluruh GPU dalam grup paralel data.

SageMakermengimplementasikan data sharded paralelisme melalui pelaksanaan MIC, yang merupakan perpustakaan yang mi nimizes c ommunication s cale dan dibahas dalam posting blog dekat-linear skala pelatihan raksasa model pada. AWS

Anda dapat menerapkan paralelisme data sharded ke model Anda sebagai strategi yang berdiri sendiri. Selain itu, jika Anda menggunakan instans GPU paling berkinerja yang dilengkapi dengan GPU NVIDIA A100 Tensor Coreml.p4d.24xlarge, Anda dapat memanfaatkan kecepatan latihan yang ditingkatkan dari operasi yang ditawarkan oleh SMDDP Collectives. AllGather

Untuk menyelami paralelisme data yang dipecah dan mempelajari cara mengaturnya atau menggunakan kombinasi paralelisme data yang dipecah dengan teknik lain seperti paralelisme tensor dan pelatihan FP16, lihat. Paralelisme Data Sharded

Paralelisme pipa (tersedia untuk PyTorch dan) TensorFlow

Paralelisme pipa partisi set lapisan atau operasi di seluruh set perangkat, meninggalkan setiap operasi utuh. Ketika Anda menentukan nilai untuk jumlah partisi model (pipeline_parallel_degree), jumlah total GPU (processes_per_host) harus dibagi dengan jumlah partisi model. Untuk mengatur ini dengan benar, Anda harus menentukan nilai yang benar untuk pipeline_parallel_degree dan processes_per_host parameter. Matematika sederhana adalah sebagai berikut:

(pipeline_parallel_degree) x (data_parallel_degree) = processes_per_host

Perpustakaan menangani menghitung jumlah replika model (juga disebutdata_parallel_degree) mengingat dua parameter input yang Anda berikan.

Misalnya, jika Anda menyetel "pipeline_parallel_degree": 2 dan "processes_per_host": 8 menggunakan instans MLdengan delapan pekerja GPU sepertiml.p3.16xlarge, library secara otomatis menyiapkan model terdistribusi di seluruh GPU dan paralelisme data empat arah. Gambar berikut menggambarkan bagaimana model didistribusikan di delapan GPU yang mencapai paralelisme data empat arah dan paralelisme pipa dua arah. Setiap replika model, di mana kita mendefinisikannya sebagai grup paralel pipa dan memberi label sebagaiPP_GROUP, dipartisi di dua GPU. Setiap partisi model ditetapkan ke empat GPU, di mana keempat replika partisi berada dalam grup paralel data dan diberi label sebagai. DP_GROUP Tanpa paralelisme tensor, kelompok paralel pipa pada dasarnya adalah kelompok paralel model.

Untuk menyelam jauh ke dalam paralelisme pipa, lihat. Fitur Inti dari Perpustakaan Paralelisme SageMaker Model

Untuk memulai menjalankan model Anda menggunakan paralelisme pipeline, lihat Menjalankan Pekerjaan Pelatihan SageMaker Terdistribusi dengan Pustaka Paralel SageMaker Model.

Paralelisme tensor (tersedia untuk) PyTorch

Paralelisme tensor membagi lapisan individu, atau, di seluruh perangkatnn.Modules, untuk dijalankan secara paralel. Gambar berikut menunjukkan contoh paling sederhana tentang bagaimana pustaka membagi model dengan empat lapisan untuk mencapai paralelisme tensor dua arah (). "tensor_parallel_degree": 2 Lapisan masing-masing replika model dibelah dua dan didistribusikan menjadi dua GPU. Dalam contoh kasus ini, konfigurasi paralel model juga mencakup "pipeline_parallel_degree": 1 dan "ddp": True (menggunakan PyTorch DistributedDataParallel paket di latar belakang), sehingga tingkat paralelisme data menjadi delapan. Pustaka mengelola komunikasi di seluruh replika model terdistribusi tensor.

Kegunaan fitur ini adalah kenyataan bahwa Anda dapat memilih lapisan tertentu atau subset lapisan untuk menerapkan paralelisme tensor. Untuk menyelami paralelisme tensor dan fitur hemat memori lainnyaPyTorch, dan mempelajari cara mengatur kombinasi paralelisme pipeline dan tensor, lihat. Paralelisme Tensor

Sharding status pengoptimal (tersedia untuk) PyTorch

Untuk memahami bagaimana library melakukan sharding state optimizer, pertimbangkan model contoh sederhana dengan empat layer. Ide utama dalam mengoptimalkan sharding status adalah Anda tidak perlu mereplikasi status pengoptimal Anda di semua GPU Anda. Sebagai gantinya, satu replika status pengoptimal dipecah di peringkat paralel data, tanpa redundansi di seluruh perangkat. Misalnya, GPU 0 memegang status optimizer untuk layer satu, GPU 1 berikutnya memegang status optimizer untuk L2, dan seterusnya. Gambar animasi berikut menunjukkan propagasi mundur dengan teknik sharding negara optimizer. Pada akhir propagasi mundur, ada waktu komputasi dan jaringan untuk operasi optimizer apply (OA) untuk memperbarui status pengoptimal dan operasi all-gather (AG) untuk memperbarui parameter model untuk iterasi berikutnya. Yang terpenting, reduce operasi dapat tumpang tindih dengan komputasi pada GPU 0, menghasilkan propagasi mundur yang lebih efisien memori dan lebih cepat. Dalam implementasi saat ini, operasi AG dan OA tidak tumpang tindih dengancompute. Hal ini dapat mengakibatkan perhitungan diperpanjang selama operasi AG, sehingga mungkin ada tradeoff.

Untuk informasi selengkapnya tentang cara menggunakan fitur ini, lihat Optimizer State Sharding.

Aktivasi pembongkaran dan checkpointing (tersedia untuk) PyTorch

Untuk menyimpan memori GPU, pustaka mendukung checkpointing aktivasi untuk menghindari penyimpanan aktivasi internal dalam memori GPU untuk modul yang ditentukan pengguna selama pass forward. Library menghitung ulang aktivasi ini selama pass mundur. Selain itu, fitur pembongkaran aktivasi membongkar aktivasi yang tersimpan ke memori CPU dan mengambil kembali ke GPU selama pass mundur untuk lebih mengurangi jejak memori aktivasi. Untuk informasi selengkapnya tentang cara menggunakan fitur ini, lihat Activation Checkpointing dan Activation Offloading.

Memilih teknik yang tepat untuk model Anda

Untuk informasi selengkapnya tentang memilih teknik dan konfigurasi yang tepat, lihat SageMakerDistributed Model Parallel Best Practices and Configuration Tips and Pitfalls.