Kiat konfigurasi untuk pustaka paralelisme data SageMaker terdistribusi - Amazon SageMaker

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

Kiat konfigurasi untuk pustaka paralelisme data SageMaker terdistribusi

Tinjau tips berikut sebelum menggunakan perpustakaan paralelisme data SageMaker terdistribusi (SMDDP). Daftar ini mencakup tips yang berlaku di seluruh kerangka kerja.

Prapemrosesan data

Jika Anda melakukan pra-proses data selama pelatihan menggunakan pustaka eksternal yang menggunakan CPU, Anda mungkin mengalami kemacetan CPU karena SageMaker data terdistribusi paralel menggunakan CPU untuk operasi. AllReduce Anda mungkin dapat meningkatkan waktu pelatihan dengan memindahkan langkah-langkah pra-pemrosesan ke perpustakaan yang menggunakan GPU atau dengan menyelesaikan semua pra-pemrosesan sebelum pelatihan.

Tunggal versus beberapa node

Kami menyarankan Anda menggunakan perpustakaan ini dengan beberapa node. Pustaka dapat digunakan dengan satu host, penyiapan multi-perangkat (misalnya, satu instance komputasi ML dengan beberapa GPU); Namun, ketika Anda menggunakan dua atau lebih node, AllReduce operasi perpustakaan memberi Anda peningkatan kinerja yang signifikan. Juga, pada satu host, NVLink sudah berkontribusi pada efisiensi AllReduce in-node.

Efisiensi penskalaan debug dengan Debugger

Anda dapat menggunakan Amazon SageMaker Debugger untuk memantau dan memvisualisasikan pemanfaatan CPU dan GPU serta metrik lain yang menarik selama pelatihan. Anda dapat menggunakan aturan bawaan Debugger untuk memantau masalah kinerja komputasi, sepertiCPUBottleneck,, dan. LoadBalancing LowGPUUtilization Anda dapat menentukan aturan ini dengan konfigurasi Debugger saat menentukan estimator Amazon Python SageMaker SDK. Jika Anda menggunakan AWS CLI dan AWS SDK for Python (Boto3) untuk pelatihan SageMaker, Anda dapat mengaktifkan Debugger seperti yang ditunjukkan pada Konfigurasi SageMaker Debugger Menggunakan Amazon API. SageMaker

Untuk melihat contoh menggunakan Debugger dalam pekerjaan SageMaker pelatihan, Anda dapat mereferensikan salah satu contoh buku catatan di repositori Contoh SageMaker GitHub Notebook. Untuk mempelajari lebih lanjut tentang Debugger, lihat Amazon SageMaker Debugger.

Ukuran batch

Dalam pelatihan terdistribusi, karena lebih banyak node ditambahkan, ukuran batch harus meningkat secara proporsional. Untuk meningkatkan kecepatan konvergensi saat Anda menambahkan lebih banyak node ke pekerjaan pelatihan Anda dan meningkatkan ukuran batch global, tingkatkan tingkat pembelajaran.

Salah satu cara untuk mencapai hal ini adalah dengan menggunakan pemanasan tingkat pembelajaran bertahap di mana tingkat pembelajaran ditingkatkan dari nilai kecil ke nilai besar saat pekerjaan pelatihan berlangsung. Jalan ini menghindari peningkatan kecepatan belajar yang tiba-tiba, memungkinkan konvergensi yang sehat pada awal pelatihan. Misalnya, Anda dapat menggunakan Aturan Penskalaan Linear di mana setiap kali ukuran mini-batch dikalikan dengan k, tingkat pembelajaran juga dikalikan dengan k. Untuk mempelajari lebih lanjut tentang teknik ini, lihat paper penelitian, Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour, Section 2 dan 3.

Opsi MPI kustom

Pustaka paralel data SageMaker terdistribusi menggunakan Message Passing Interface (MPI), standar populer untuk mengelola komunikasi antar node dalam cluster berkinerja tinggi, dan menggunakan perpustakaan NCCL NVIDIA untuk komunikasi tingkat GPU. Saat Anda menggunakan pustaka paralel data dengan TensorFlow atau PytorchEstimator, wadah masing-masing mengatur lingkungan MPI dan menjalankan mpirun perintah untuk memulai pekerjaan di node cluster.

Anda dapat mengatur operasi MPI kustom menggunakan custom_mpi_options parameter di. Estimator mpirunBendera apa pun yang diteruskan di bidang ini ditambahkan ke mpirun perintah dan dijalankan oleh SageMaker untuk pelatihan. Misalnya, Anda dapat menentukan distribution parameter dari Estimator menggunakan berikut ini untuk menggunakan NCCL_DEBUGvariabel untuk mencetak versi NCCL di awal program:

distribution = {'smdistributed':{'dataparallel':{'enabled': True, "custom_mpi_options": "-verbose -x NCCL_DEBUG=VERSION"}}}

Gunakan Amazon FSx dan siapkan kapasitas penyimpanan dan throughput yang optimal

Saat melatih model pada beberapa node dengan paralelisme data terdistribusi, sangat disarankan untuk menggunakan FSx for Lustre. Amazon FSx adalah layanan penyimpanan yang dapat diskalakan dan berkinerja tinggi yang mendukung penyimpanan file bersama dengan throughput yang lebih cepat. Menggunakan penyimpanan Amazon FSx dalam skala besar, Anda dapat mencapai kecepatan pemuatan data yang lebih cepat di seluruh node komputasi.

Biasanya, dengan paralelisme data terdistribusi, Anda akan mengharapkan bahwa total throughput pelatihan berskala mendekati linier dengan jumlah GPU. Namun, jika Anda menggunakan penyimpanan Amazon FSx yang kurang optimal, kinerja pelatihan mungkin melambat karena throughput Amazon FSx yang rendah.

Misalnya, jika Anda menggunakan tipe penyebaran SCRATCH_2 dari sistem file Amazon FSx dengan kapasitas penyimpanan minimum 1,2 TiB, kapasitas throughput I/O adalah 240 MB/s. Penyimpanan Amazon FSx berfungsi sedemikian rupa sehingga Anda dapat menetapkan perangkat penyimpanan fisik, dan semakin banyak perangkat yang ditetapkan, semakin besar throughput yang Anda dapatkan. Peningkatan penyimpanan terkecil untuk tipe SRATCH_2 adalah 1,2 TiB, dan gain throughput yang sesuai adalah 240 MB/s.

Asumsikan bahwa Anda memiliki model untuk dilatih pada cluster 4-node lebih dari kumpulan data 100 GB. Dengan ukuran batch tertentu yang dioptimalkan ke cluster, asumsikan bahwa model dapat menyelesaikan satu epoch dalam waktu sekitar 30 detik. Dalam hal ini, kecepatan I/O minimum yang diperlukan adalah sekitar 3 GB/s (100 GB/30 detik). Ini tampaknya merupakan persyaratan throughput yang jauh lebih tinggi daripada 240 MB/s. Dengan kapasitas Amazon FSx yang terbatas, menskalakan pekerjaan pelatihan terdistribusi Anda hingga cluster yang lebih besar dapat memperburuk masalah bottleneck I/O; throughput pelatihan model mungkin meningkat di masa mendatang saat cache meningkat, tetapi throughput Amazon FSx masih bisa menjadi hambatan.

Untuk mengatasi masalah bottleneck I/O seperti itu, Anda harus meningkatkan ukuran penyimpanan Amazon FSx untuk mendapatkan kapasitas throughput yang lebih tinggi. Biasanya, untuk menemukan throughput I/O yang optimal, Anda dapat bereksperimen dengan kapasitas throughput Amazon FSx yang berbeda, menetapkan throughput yang sama atau sedikit lebih rendah dari perkiraan Anda, hingga Anda menemukan bahwa itu cukup untuk menyelesaikan masalah bottleneck I/O. Dalam kasus contoh yang disebutkan di atas, penyimpanan Amazon FSx dengan throughput 2, 4 GB/s dan cache RAM 67 GB sudah cukup. Jika sistem file memiliki throughput yang optimal, throughput pelatihan model harus mencapai maksimum baik segera atau setelah epoch pertama karena cache telah dibangun.

Untuk mempelajari selengkapnya tentang cara meningkatkan jenis penyimpanan dan penyebaran Amazon FSx, lihat halaman berikut di dokumentasi Amazon FSx for Lustre: