Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pelatihan terdistribusi di Amazon SageMaker
SageMaker menyediakan perpustakaan pelatihan terdistribusi dan mendukung berbagai opsi pelatihan terdistribusi untuk tugas-tugas pembelajaran mendalam seperti visi komputer (CV) dan pemrosesan bahasa alami (NLP). Dengan perpustakaan pelatihan SageMaker terdistribusi, Anda dapat menjalankan data kustom paralel yang sangat terukur dan hemat biaya dan memodelkan pekerjaan pelatihan pembelajaran mendalam paralel. Anda juga dapat menggunakan kerangka kerja dan paket pelatihan terdistribusi lainnya seperti PyTorch DistributedDataParallel (DDP),torchrun
, MPI (mpirun
), dan server parameter. Sepanjang dokumentasi, instruksi dan contoh berfokus pada cara mengatur opsi pelatihan terdistribusi untuk tugas pembelajaran mendalam menggunakan SageMaker PythonSDK.
Tip
Untuk mempelajari praktik terbaik untuk komputasi terdistribusi pelatihan pembelajaran mesin (ML) dan pekerjaan pemrosesan secara umum, lihatKomputasi terdistribusi dengan praktik SageMaker terbaik.
Sebelum Anda memulai
SageMaker Pelatihan mendukung pelatihan terdistribusi pada satu instans serta beberapa instance, sehingga Anda dapat menjalankan berbagai ukuran pelatihan dalam skala besar. Kami menyarankan Anda untuk menggunakan kelas estimator kerangka kerja seperti PyTorchCreateTrainingJob
API EFA Jika Anda ingin memasang sistem FSx file ke instance pelatihan, Anda harus meneruskan VPC subnet dan ID grup keamanan Anda ke estimator. Sebelum menjalankan pekerjaan pelatihan terdistribusi Anda di SageMaker, baca panduan umum berikut tentang pengaturan infrastruktur dasar.
Zona ketersediaan dan backplane jaringan
Saat menggunakan beberapa instance (juga disebut node), penting untuk memahami jaringan yang menghubungkan instance, bagaimana mereka membaca data pelatihan, dan bagaimana mereka berbagi informasi di antara mereka sendiri. Misalnya, saat Anda menjalankan tugas pelatihan paralel data terdistribusi, sejumlah faktor, seperti komunikasi antara node cluster komputasi untuk menjalankan AllReduce
operasi dan transfer data antara node dan penyimpanan data di Amazon Simple Storage Service atau Amazon FSx for Lustre, memainkan peran penting untuk mencapai penggunaan sumber daya komputasi yang optimal dan kecepatan pelatihan yang lebih cepat. Untuk mengurangi overhead komunikasi, pastikan Anda mengonfigurasi instance, VPC subnet, dan penyimpanan data di Availability Zone yang sama Wilayah AWS .
GPUinstans dengan jaringan yang lebih cepat dan penyimpanan throughput tinggi
Anda secara teknis dapat menggunakan instance apa pun untuk pelatihan terdistribusi. Untuk kasus di mana Anda perlu menjalankan pekerjaan pelatihan terdistribusi multi-node untuk melatih model besar, seperti model bahasa besar (LLMs) dan model difusi, yang memerlukan pergantian antar-simpul yang lebih cepat, kami merekomendasikan instance berkemampuan -didukung oleh. EFA GPU SageMaker
Memulai pelatihan terdistribusi di Amazon SageMaker
Jika Anda sudah terbiasa dengan pelatihan terdistribusi, pilih salah satu opsi berikut yang sesuai dengan strategi atau kerangka kerja pilihan Anda untuk memulai. Jika Anda ingin belajar tentang pelatihan terdistribusi secara umum, lihatKonsep pelatihan terdistribusi dasar.
Perpustakaan pelatihan SageMaker terdistribusi dioptimalkan untuk lingkungan SageMaker pelatihan, membantu menyesuaikan pekerjaan pelatihan terdistribusi Anda SageMaker, dan meningkatkan kecepatan dan throughput pelatihan. Perpustakaan menawarkan strategi pelatihan paralel data dan model paralel. Mereka menggabungkan teknologi perangkat lunak dan perangkat keras untuk meningkatkan komunikasi antar GPU dan antar simpul, dan memperluas SageMaker kemampuan pelatihan dengan opsi bawaan yang memerlukan perubahan kode minimal pada skrip pelatihan Anda.
Gunakan SageMaker pustaka paralelisme data terdistribusi () SMDDP
SMDDPPustaka meningkatkan komunikasi antar node dengan implementasi AllReduce
dan operasi komunikasi AllGather
kolektif yang dioptimalkan untuk infrastruktur AWS jaringan dan topologi instans Amazon SageMaker ML. Anda dapat menggunakan SMDDPpustaka sebagai backend paket pelatihan terdistribusi PyTorch berbasis: PyTorch distributeddata parallel (DDP)PyTorch
estimator untuk meluncurkan pekerjaan pelatihan terdistribusi pada dua ml.p4d.24xlarge
instance.
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", # Activate distributed training with SMDDP distribution={ "pytorchddp": { "enabled": True } } # mpirun, activates SMDDP AllReduce OR AllGather # distribution={ "torch_distributed": { "enabled": True } } # torchrun, activates SMDDP AllGather # distribution={ "smdistributed": { "dataparallel": { "enabled": True } } } # mpirun, activates SMDDP AllReduce OR AllGather )
Untuk mempelajari cara menyiapkan skrip pelatihan Anda dan meluncurkan pekerjaan pelatihan paralel data terdistribusi SageMaker, lihat. Jalankan pelatihan terdistribusi dengan SageMaker pustaka paralelisme data terdistribusi
Gunakan perpustakaan paralelisme SageMaker model () SMP
SageMaker menyediakan SMP perpustakaan dan mendukung berbagai teknik pelatihan terdistribusi, seperti paralelisme data sharded, pipelining, paralelisme tensor, sharding status pengoptimal, dan banyak lagi. Untuk mempelajari lebih lanjut tentang apa yang ditawarkan SMP perpustakaan, lihatFitur Inti dari Perpustakaan Paralelisme SageMaker Model.
Untuk menggunakan SageMaker pustaka paralelisme model, konfigurasikan distribution
parameter estimator SageMaker kerangka kerja. Estimator kerangka kerja yang didukung adalah PyTorchml.p4d.24xlarge
from sagemaker.
framework
importFramework
distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # enter parameter key-value pairs here } }, }, "mpi": { "enabled" : True, ... # enter parameter key-value pairs here } } estimator =Framework
( ..., instance_count=2
, instance_type="ml.p4d.24xlarge
", distribution=distribution )
Untuk mempelajari cara mengadaptasi skrip pelatihan Anda, mengonfigurasi parameter distribusi di estimator
kelas, dan meluncurkan tugas pelatihan terdistribusi, lihat SageMakerpustaka paralelisme model (lihat juga Pelatihan Terdistribusi APIs dalam dokumentasi SageMaker
Gunakan kerangka kerja pelatihan terdistribusi open source
SageMaker juga mendukung opsi berikut untuk beroperasi mpirun
dan torchrun
di backend.
-
Untuk menggunakan PyTorch DistributedDataParallel (DDP)
SageMaker dengan mpirun
backend, tambahkandistribution={"pytorchddp": {"enabled": True}}
ke estimator Anda PyTorch. Untuk informasi selengkapnya, lihat jugadistribution
Argumen Pelatihan PyTorch Terdistribusidan SageMaker PyTorch Estimator dalam dokumentasi SageMaker SDKPython. catatan
Opsi ini tersedia untuk PyTorch 1.12.0 dan yang lebih baru.
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", distribution={"pytorchddp": {"enabled": True}} # runs mpirun in the backend ) -
SageMaker mendukung PyTorch
torchrun
peluncuruntuk pelatihan terdistribusi pada EC2 instans Amazon GPU berbasis, seperti P3 dan P4, serta Trn1 yang didukung oleh perangkat Trainium.AWS Untuk menggunakan PyTorch DistributedDataParallel (DDP)
SageMaker dengan torchrun
backend, tambahkandistribution={"torch_distributed": {"enabled": True}}
ke estimator. PyTorchcatatan
Opsi ini tersedia untuk PyTorch 1.13.0 dan yang lebih baru.
Cuplikan kode berikut menunjukkan contoh membangun SageMaker PyTorch estimator untuk menjalankan pelatihan terdistribusi pada dua
ml.p4d.24xlarge
instance dengan opsi distribusi.torch_distributed
from sagemaker.pytorch import PyTorch estimator = PyTorch( ..., instance_count=
2
, instance_type="ml.p4d.24xlarge
", distribution={"torch_distributed": {"enabled": True}} # runs torchrun in the backend )Untuk informasi selengkapnya, lihat
distribution
Argumen PyTorch Pelatihan Terdistribusidan SageMaker PyTorch Estimator dalam dokumentasi SageMaker SDKPython. Catatan untuk pelatihan terdistribusi di Trn1
Sebuah instance Trn1 terdiri dari hingga 16 perangkat Trainium, dan setiap perangkat Trainium terdiri dari dua. NeuronCores
Untuk spesifikasi perangkat AWS Trainium, lihat Arsitektur Trainium di Dokumentasi Neuron.AWS Untuk melatih instance yang didukung Trainium, Anda hanya perlu menentukan kode instance Trn1
ml.trn1.*
, dalam string ke argumen kelas estimator.instance_type
SageMaker PyTorch Untuk menemukan jenis instance Trn1 yang tersedia, lihat Arsitektur AWS Trn1dalam dokumentasi Neuron.AWS catatan
SageMaker Pelatihan tentang instans Amazon EC2 Trn1 saat ini hanya tersedia untuk PyTorch kerangka kerja di AWS Deep Learning Containers for PyTorch Neuron mulai v1.11.0. Untuk menemukan daftar lengkap versi Neuron yang didukung, lihat PyTorch Neuron Containers
di GitHub repositori AWS Deep Learning Containers. Saat Anda meluncurkan pekerjaan pelatihan pada instance Trn1 menggunakan SageMaker PythonSDK, SageMaker secara otomatis mengambil dan menjalankan wadah yang tepat dari Neuron Containers yang disediakan oleh Deep
Learning Containers. AWS Neuron Container dikemas dengan pengaturan lingkungan pelatihan dan dependensi untuk memudahkan adaptasi pekerjaan pelatihan Anda ke SageMaker platform Pelatihan dan instans Amazon Trn1. EC2 catatan
Untuk menjalankan pekerjaan PyTorch pelatihan Anda pada instance Trn1 dengan SageMaker, Anda harus memodifikasi skrip pelatihan Anda untuk menginisialisasi grup proses dengan
xla
backend dan menggunakan/. PyTorch XLAUntuk mendukung proses XLA adopsi, AWS Neuron SDK menyediakan PyTorch Neuron yang digunakan XLA untuk melakukan konversi PyTorch operasi ke instruksi Trainium. Untuk mempelajari cara memodifikasi skrip pelatihan Anda, lihat Panduan Pengembang untuk Pelatihan dengan PyTorch Neuron ( torch-neuronx
)di Dokumentasi AWS Neuron. Untuk informasi lebih lanjut, lihat Pelatihan Terdistribusi dengan PyTorch Neuron pada instance Trn1 dan argumen SageMaker
PyTorch Estimator distribution
dalam dokumentasi Python. SageMaker SDK -
Untuk digunakan MPI SageMaker, tambahkan
distribution={"mpi": {"enabled": True}}
ke estimator Anda. Opsi MPI distribusi tersedia untuk kerangka kerja berikut:MXNet, PyTorch, dan TensorFlow. -
Untuk menggunakan server parameter di SageMaker, tambahkan
distribution={"parameter_server": {"enabled": True}}
ke estimator Anda. Opsi server parameter tersedia untuk kerangka kerja berikut:MXNet, PyTorch, dan TensorFlow.Tip
Untuk informasi lebih lanjut tentang menggunakan opsi server parameter MPI dan per kerangka kerja, gunakan tautan berikut ke dokumentasi SageMaker Python SDK.
Konsep pelatihan terdistribusi dasar
SageMakerPerpustakaan pelatihan terdistribusi menggunakan istilah dan fitur pelatihan terdistribusi berikut.
Dataset dan Batch
-
Dataset Pelatihan: Semua data yang Anda gunakan untuk melatih model.
-
Ukuran batch global: Jumlah record yang dipilih dari dataset pelatihan di setiap iterasi untuk dikirim ke GPUs dalam cluster. Ini adalah jumlah catatan di mana gradien dihitung pada setiap iterasi. Jika paralelisme data digunakan, itu sama dengan jumlah total replika model dikalikan dengan ukuran batch per replika:.
global batch size = (the number of model replicas) * (per-replica batch size)
Satu batch ukuran batch global sering disebut sebagai mini-batch dalam literatur pembelajaran mesin. -
Ukuran batch per replika: Ketika paralelisme data digunakan, ini adalah jumlah catatan yang dikirim ke setiap replika model. Setiap replika model melakukan pass maju dan mundur dengan batch ini untuk menghitung pembaruan bobot. Pembaruan bobot yang dihasilkan disinkronkan (dirata-ratakan) di semua replika sebelum kumpulan batch per replika berikutnya diproses.
-
Micro-batch: Subset dari mini-batch atau, jika model hibrida dan paralelisme data digunakan, itu adalah subset dari batch berukuran per replika. Saat Anda menggunakan SageMaker pustaka paralelisme model terdistribusi, setiap batch mikro dimasukkan ke dalam pipeline pelatihan one-by-one dan mengikuti jadwal eksekusi yang ditentukan oleh runtime pustaka.
Pelatihan
-
Epoch: Satu siklus pelatihan melalui seluruh kumpulan data. Adalah umum untuk memiliki beberapa iterasi per zaman. Jumlah epoch yang Anda gunakan dalam pelatihan unik pada model dan kasus penggunaan Anda.
-
Iterasi: Satu pass maju dan mundur dilakukan menggunakan batch data pelatihan berukuran batch global (batch mini). Jumlah iterasi yang dilakukan selama pelatihan ditentukan oleh ukuran batch global dan jumlah zaman yang digunakan untuk pelatihan. Misalnya, jika kumpulan data menyertakan 5.000 sampel, dan Anda menggunakan ukuran batch global 500, dibutuhkan 10 iterasi untuk menyelesaikan satu epoch.
-
Tingkat pembelajaran: Variabel yang mempengaruhi jumlah bobot diubah sebagai respons terhadap kesalahan model yang dihitung. Tingkat pembelajaran memainkan peran penting dalam kemampuan model untuk konvergen serta kecepatan dan optimalitas konvergensi.
Contoh dan GPUs
-
Instance: Instance komputasi pembelajaran AWS mesin
. Ini juga disebut sebagai node. -
Ukuran klaster: Saat menggunakan SageMaker pustaka pelatihan terdistribusi, ini adalah jumlah instance yang dikalikan dengan jumlah GPUs di setiap instance. Misalnya, jika Anda menggunakan dua instance ml.p3.8xlarge dalam pekerjaan pelatihan, yang GPUs masing-masing memiliki 4, ukuran klaster adalah 8. Sementara peningkatan ukuran cluster dapat menyebabkan waktu pelatihan yang lebih cepat, komunikasi antar instance harus dioptimalkan; Jika tidak, komunikasi antar node dapat menambah overhead dan menyebabkan waktu pelatihan lebih lambat. Pustaka pelatihan SageMaker terdistribusi dirancang untuk mengoptimalkan komunikasi antara instans komputasi Amazon EC2 ML, yang mengarah ke pemanfaatan perangkat yang lebih tinggi dan waktu pelatihan yang lebih cepat.
Solusi Pelatihan Terdistribusi
-
Paralelisme data: Strategi dalam pelatihan terdistribusi di mana kumpulan data pelatihan dibagi menjadi beberapa GPUs dalam klaster komputasi, yang terdiri dari beberapa Instans Amazon ML. EC2 Masing-masing GPU berisi replika model, menerima batch data pelatihan yang berbeda, melakukan pass maju dan mundur, dan berbagi pembaruan bobot dengan node lain untuk sinkronisasi sebelum pindah ke batch berikutnya dan akhirnya zaman lain.
-
Paralelisme model: Strategi dalam pelatihan terdistribusi di mana model dipartisi GPUs di beberapa klaster komputasi, yang terdiri dari beberapa Instans Amazon ML. EC2 Modelnya mungkin rumit dan memiliki sejumlah besar lapisan dan bobot tersembunyi, sehingga tidak dapat masuk ke dalam memori satu instance. Masing-masing GPU membawa subset dari model, di mana aliran data dan transformasi dibagikan dan dikompilasi. Efisiensi paralelisme model, dalam hal GPU pemanfaatan dan waktu pelatihan, sangat tergantung pada bagaimana model dipartisi dan jadwal eksekusi yang digunakan untuk melakukan operan maju dan mundur.
-
Jadwal Eksekusi Pipeline (Pipelining): Jadwal eksekusi pipeline menentukan urutan pembuatan komputasi (batch mikro) dan data diproses di seluruh perangkat selama pelatihan model. Pipelining adalah teknik untuk mencapai paralelisasi sejati dalam paralelisme model dan mengatasi kehilangan kinerja karena komputasi sekuensial dengan memiliki komputasi secara bersamaan pada sampel data yang berbeda. GPUs Untuk mempelajari selengkapnya, lihat Jadwal Eksekusi Pipeline.
Konsep lanjutan
Praktisi Machine Learning (ML) biasanya menghadapi dua tantangan penskalaan saat model pelatihan: ukuran model penskalaan dan penskalaan data pelatihan. Meskipun ukuran dan kompleksitas model dapat menghasilkan akurasi yang lebih baik, ada batasan untuk ukuran model yang dapat Anda masukkan ke dalam satu CPU atauGPU. Selain itu, ukuran model penskalaan dapat menghasilkan lebih banyak perhitungan dan waktu pelatihan yang lebih lama.
Tidak semua model menangani penskalaan data pelatihan dengan sama baiknya karena mereka perlu menelan semua data pelatihan dalam memori untuk pelatihan. Mereka hanya menskalakan secara vertikal, dan ke jenis instance yang lebih besar dan lebih besar. Dalam kebanyakan kasus, penskalaan data pelatihan menghasilkan waktu pelatihan yang lebih lama.
Deep Learning (DL) adalah keluarga spesifik algoritma ML yang terdiri dari beberapa lapisan jaringan saraf tiruan. Metode pelatihan yang paling umum adalah dengan mini-batch Stochastic Gradient Descent (). SGD Dalam mini-batchSGD, model dilatih dengan melakukan perubahan iteratif kecil dari koefisiennya ke arah yang mengurangi kesalahannya. Iterasi tersebut dilakukan pada subsampel berukuran sama dari kumpulan data pelatihan yang disebut mini-batch. Untuk setiap mini-batch, model dijalankan di setiap catatan mini-batch, kesalahannya diukur dan gradien kesalahan diperkirakan. Kemudian gradien rata-rata diukur di semua catatan mini-batch dan memberikan arah pembaruan untuk setiap koefisien model. Satu lintasan penuh atas kumpulan data pelatihan disebut zaman. Pelatihan model biasanya terdiri dari puluhan hingga ratusan zaman. Mini-batch SGD memiliki beberapa manfaat: Pertama, desain iteratifnya membuat waktu pelatihan secara teoritis linier dari ukuran dataset. Kedua, dalam mini-batch tertentu setiap rekaman diproses secara individual oleh model tanpa perlu komunikasi antar-rekaman selain rata-rata gradien akhir. Pemrosesan batch mini akibatnya sangat cocok untuk paralelisasi dan distribusi.
SGDPelatihan paralelisasi dengan mendistribusikan catatan mini-batch melalui perangkat komputasi yang berbeda disebut pelatihan terdistribusi paralel data, dan merupakan paradigma distribusi DL yang paling umum digunakan. Pelatihan paralel data adalah strategi distribusi yang relevan untuk menskalakan ukuran batch mini dan memproses setiap batch mini lebih cepat. Namun, pelatihan paralel data hadir dengan kompleksitas ekstra karena harus menghitung rata-rata gradien batch mini dengan gradien yang berasal dari semua pekerja dan mengkomunikasikannya ke semua pekerja, sebuah langkah yang disebut allreduce yang dapat mewakili overhead yang berkembang, karena cluster pelatihan diskalakan, dan itu juga dapat secara drastis menghukum waktu pelatihan jika diterapkan atau diimplementasikan secara tidak benar pada pengurangan perangkat keras yang tidak tepat.
Data parallel SGD masih mengharuskan pengembang untuk dapat menyesuaikan setidaknya model dan satu catatan dalam perangkat komputasi, seperti satu CPU atauGPU. Saat melatih model yang sangat besar seperti transformator besar di Natural Language Processing (NLP), atau model segmentasi pada gambar resolusi tinggi, mungkin ada situasi di mana hal ini tidak layak. Cara alternatif untuk memecah beban kerja adalah dengan mempartisi model melalui beberapa perangkat komputasi, sebuah pendekatan yang disebut pelatihan terdistribusi model-paralel.
Strategi
Pelatihan terdistribusi biasanya dibagi oleh dua pendekatan: data parallel dan model parallel. Data parallel adalah pendekatan yang paling umum untuk pelatihan terdistribusi: Anda memiliki banyak data, menggabungkannya, dan mengirim blok data ke beberapa CPUs atau GPUs (node) untuk diproses oleh jaringan saraf atau algoritma ML. kemudian menggabungkan hasilnya. Jaringan saraf sama pada setiap node. Pendekatan paralel model digunakan dengan model besar yang tidak akan muat dalam memori node dalam satu bagian; itu memecah model dan menempatkan bagian yang berbeda pada node yang berbeda. Dalam situasi ini, Anda perlu mengirim batch data Anda ke setiap node sehingga data diproses pada semua bagian model.
Istilah jaringan dan model sering digunakan secara bergantian: Model besar benar-benar jaringan besar dengan banyak lapisan dan parameter. Pelatihan dengan jaringan besar menghasilkan model yang besar, dan memuat model kembali ke jaringan dengan semua parameter Anda yang telah dilatih sebelumnya dan bobotnya memuat model besar ke dalam memori. Saat Anda memecah model untuk membaginya di seluruh node, Anda juga memecah jaringan yang mendasarinya. Jaringan terdiri dari lapisan, dan untuk membagi jaringan, Anda menempatkan lapisan pada perangkat komputasi yang berbeda.
Perangkap umum dari lapisan yang membelah secara naif di seluruh perangkat adalah kurangnya pemanfaatan yang parah. GPU Pelatihan secara inheren berurutan baik dalam operan maju maupun mundur, dan pada waktu tertentu, hanya satu yang GPU dapat secara aktif menghitung, sementara yang lain menunggu aktivasi yang akan dikirim. Pustaka paralel model modern memecahkan masalah ini dengan menggunakan jadwal eksekusi pipeline untuk meningkatkan pemanfaatan perangkat. Namun, hanya perpustakaan paralel model SageMaker terdistribusi Amazon yang menyertakan pemisahan model otomatis. Dua fitur inti perpustakaan, pemisahan model otomatis dan penjadwalan eksekusi pipa, menyederhanakan proses penerapan paralelisme model dengan membuat keputusan otomatis yang mengarah pada pemanfaatan perangkat yang efisien.
Berlatih dengan data parallel dan model parallel
Jika Anda berlatih dengan kumpulan data besar, mulailah dengan pendekatan paralel data. Jika Anda kehabisan memori selama pelatihan, Anda mungkin ingin beralih ke pendekatan paralel model, atau mencoba model hibrida dan paralelisme data. Anda juga dapat mencoba yang berikut ini untuk meningkatkan kinerja dengan data parallel:
-
Ubah hiperparameter model Anda.
-
Kurangi ukuran batch.
-
Terus kurangi ukuran batch hingga pas. Jika Anda mengurangi ukuran batch menjadi 1, dan masih kehabisan memori, maka Anda harus mencoba pelatihan model-paralel.
Coba kompresi gradien (FP16,INT8):
-
Pada perangkat keras NVIDIA TensorCore yang dilengkapi, menggunakan pelatihan presisi campuran
menciptakan pengurangan kecepatan dan konsumsi memori. -
SageMakerpustaka paralelisme data terdistribusi mendukung Automatic Mixed Precision (AMP) di luar kotak. Tidak ada tindakan tambahan yang diperlukan untuk mengaktifkan AMP selain modifikasi tingkat kerangka kerja pada skrip pelatihan Anda. Jika gradien masukFP16, pustaka paralelisme SageMaker data menjalankan operasinya
AllReduce
di. FP16 Untuk informasi selengkapnya tentang penerapan AMP APIs skrip pelatihan Anda, lihat sumber daya berikut:-
Kerangka kerja - PyTorch
dalam dokumentasi Kinerja NVIDIA Pembelajaran Mendalam -
Kerangka kerja - TensorFlow
dalam dokumentasi Kinerja NVIDIA Pembelajaran Mendalam -
Presisi Campuran Otomatis untuk Pembelajaran Mendalam
di Dokumen NVIDIA Pengembang -
TensorFlow presisi campuran APIs
dalam TensorFlowdokumentasi
-
Coba kurangi ukuran input:
-
Kurangi panjang NLP urutan jika Anda menambah tautan urutan, perlu menyesuaikan ukuran batch ke bawah, atau menyesuaikan bagian GPUs atas untuk menyebarkan batch.
-
Kurangi resolusi gambar.
Periksa apakah Anda menggunakan normalisasi batch, karena ini dapat memengaruhi konvergensi. Saat Anda menggunakan pelatihan terdistribusi, batch Anda dibagi GPUs dan efek dari ukuran batch yang jauh lebih rendah bisa menjadi tingkat kesalahan yang lebih tinggi sehingga mengganggu model dari konvergen. Misalnya, jika Anda membuat prototipe jaringan Anda pada satu GPU dengan ukuran batch 64, kemudian ditingkatkan hingga menggunakan empat p3dn.24xlarge, Anda sekarang memiliki 32 GPUs dan ukuran per batch Anda turun dari 64 menjadi 2. GPU Ini kemungkinan akan mematahkan konvergensi yang Anda lihat dengan satu simpul.
Mulailah dengan pelatihan model-paralel ketika:
-
Model Anda tidak muat pada satu perangkat.
-
Karena ukuran model Anda, Anda menghadapi keterbatasan dalam memilih ukuran batch yang lebih besar, seperti jika bobot model Anda menghabiskan sebagian besar GPU memori Anda dan Anda terpaksa memilih ukuran batch yang lebih kecil dan kurang optimal.
Untuk mempelajari lebih lanjut tentang pustaka SageMaker terdistribusi, lihat yang berikut ini:
Optimalkan pelatihan terdistribusi
Sesuaikan hyperparameters untuk kasus penggunaan dan data Anda untuk mendapatkan efisiensi penskalaan terbaik. Dalam diskusi berikut, kami menyoroti beberapa variabel pelatihan yang paling berdampak dan memberikan referensi untuk state-of-the-art implementasi sehingga Anda dapat mempelajari lebih lanjut tentang opsi Anda. Selain itu, kami menyarankan Anda merujuk ke dokumentasi pelatihan terdistribusi kerangka kerja pilihan Anda.
Ukuran Batch
SageMaker toolkit terdistribusi umumnya memungkinkan Anda untuk berlatih pada batch yang lebih besar. Misalnya, jika model cocok dalam satu perangkat tetapi hanya dapat dilatih dengan ukuran batch kecil, menggunakan pelatihan paralel model atau pelatihan paralel data memungkinkan Anda bereksperimen dengan ukuran batch yang lebih besar.
Ketahuilah bahwa ukuran batch secara langsung memengaruhi akurasi model dengan mengontrol jumlah noise dalam pembaruan model pada setiap iterasi. Meningkatkan ukuran batch mengurangi jumlah noise dalam estimasi gradien, yang dapat bermanfaat ketika meningkat dari ukuran batch yang sangat kecil, tetapi dapat menghasilkan akurasi model yang terdegradasi karena ukuran batch meningkat ke nilai yang besar.
Tip
Sesuaikan hyperparameters Anda untuk memastikan bahwa model Anda berlatih ke konvergensi yang memuaskan saat Anda meningkatkan ukuran batch.
Sejumlah teknik telah dikembangkan untuk mempertahankan konvergensi model yang baik ketika batch ditingkatkan.
Ukuran mini-batch
DalamSGD, ukuran mini-batch mengukur jumlah noise yang ada dalam estimasi gradien. Batch mini kecil menghasilkan gradien batch mini yang sangat bising, yang tidak mewakili gradien sebenarnya di atas kumpulan data. Batch mini yang besar menghasilkan gradien batch mini yang mendekati gradien sebenarnya di atas kumpulan data dan berpotensi tidak cukup berisik — kemungkinan akan tetap terkunci dalam minimum yang tidak relevan.
Untuk mempelajari lebih lanjut tentang teknik ini, lihat makalah berikut:
-
Akurat, Minibatch Besar: Pelatihan SGD dalam ImageNet 1 Jam
, Goya et al. -
PowerAI DDL
, Cho dkk. -
Skala Keluar untuk Minibatch BesarSGD: Pelatihan Jaringan Sisa pada ImageNet -1K dengan Peningkatan Akurasi dan Pengurangan Waktu untuk
Melatih, Codreanu et al. -
ImageNet Pelatihan dalam Menit
, You et al. -
Pelatihan Batch Besar Jaringan Konvolusional
, You et al. -
Optimasi Batch Besar untuk Pembelajaran Mendalam: Pelatihan BERT dalam 76 Menit
, You et al. -
Optimalisasi Batch Besar yang Dipercepat dari BERT Pretraining dalam 54 menit
, Zheng et al. -
Kompresi Gradien Dalam
, Lin et al.
Skenario
Bagian berikut mencakup skenario di mana Anda mungkin ingin meningkatkan pelatihan, dan bagaimana Anda dapat melakukannya menggunakan AWS sumber daya.
Penskalaan dari Satu GPU ke Banyak GPUs
Jumlah data atau ukuran model yang digunakan dalam pembelajaran mesin dapat menciptakan situasi di mana waktu untuk melatih model lebih lama sehingga Anda bersedia menunggu. Terkadang, pelatihan tidak berfungsi sama sekali karena model atau data pelatihan terlalu besar. Salah satu solusinya adalah meningkatkan jumlah yang GPUs Anda gunakan untuk pelatihan. Pada contoh dengan beberapaGPUs, seperti p3.16xlarge
yang memiliki delapanGPUs, data dan pemrosesan dibagi menjadi delapanGPUs. Saat Anda menggunakan pustaka pelatihan terdistribusi, ini dapat menghasilkan percepatan hampir linier dalam waktu yang diperlukan untuk melatih model Anda. Dibutuhkan sedikit lebih dari 1/8 waktu yang akan diambil p3.2xlarge
dengan satuGPU.
Jenis instans | GPUs |
---|---|
p3.2xlarge | 1 |
p3.8xlarge | 4 |
p3.16xlarge | 8 |
p3dn.24xlarge | 8 |
catatan
Jenis instans mL yang digunakan oleh SageMaker pelatihan memiliki jumlah yang sama dengan jenis instance p3 yang sesuai. GPUs Misalnya, ml.p3.8xlarge
memiliki jumlah yang sama dengan GPUs p3.8xlarge
- 4.
Penskalaan dari satu instance ke beberapa instance
Jika Anda ingin meningkatkan skala pelatihan Anda lebih jauh, Anda dapat menggunakan lebih banyak contoh. Namun, Anda harus memilih jenis instans yang lebih besar sebelum menambahkan lebih banyak instance. Tinjau tabel sebelumnya untuk melihat berapa GPUs banyak di setiap jenis instans p3.
Jika Anda telah melakukan lompatan dari satu p3.2xlarge
ke empat GPU GPUs pada ap3.8xlarge
, tetapi memutuskan bahwa Anda memerlukan lebih banyak daya pemrosesan, Anda mungkin melihat kinerja yang lebih baik dan mengeluarkan biaya yang lebih rendah jika Anda memilih p3.16xlarge
sebelum mencoba meningkatkan jumlah instans. Bergantung pada pustaka yang Anda gunakan, ketika Anda mempertahankan pelatihan Anda pada satu instance, kinerja lebih baik dan biaya lebih rendah daripada skenario di mana Anda menggunakan beberapa instance.
Ketika Anda siap untuk skala jumlah instance, Anda dapat melakukan ini dengan fungsi SageMaker SDK estimator
Python dengan mengatur. instance_count
Misalnya, Anda dapat mengatur instance_type = p3.16xlarge
daninstance_count =
2
. Alih-alih delapan GPUs pada satup3.16xlarge
, Anda memiliki 16 GPUs di dua contoh yang identik. Bagan berikut menunjukkan penskalaan dan throughput dimulai dengan delapan GPUs
Skrip pelatihan khusus
Meskipun SageMaker membuatnya mudah untuk menyebarkan dan menskalakan jumlah instance danGPUs, tergantung pada kerangka kerja pilihan Anda, mengelola data dan hasil bisa sangat menantang, itulah sebabnya pustaka pendukung eksternal sering digunakan. Bentuk pelatihan terdistribusi yang paling dasar ini memerlukan modifikasi skrip pelatihan Anda untuk mengelola distribusi data.
SageMaker juga mendukung Horovod dan implementasi pelatihan terdistribusi asli untuk setiap kerangka pembelajaran mendalam utama. Jika Anda memilih untuk menggunakan contoh dari kerangka kerja ini, Anda dapat mengikuti SageMaker panduan kontainer untuk Deep Learning Containers, dan berbagai contoh notebook