View a markdown version of this page

SageMaker Pemecahan Masalah Kompiler Pelatihan - Amazon SageMaker AI

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

SageMaker Pemecahan Masalah Kompiler Pelatihan

penting

Amazon Web Services (AWS) mengumumkan bahwa tidak akan ada rilis baru atau versi Tra SageMaker ining Compiler. Anda dapat terus menggunakan Tra SageMaker ining Compiler melalui AWS Deep Learning Containers (DLC) yang ada untuk SageMaker Pelatihan. Penting untuk dicatat bahwa sementara DLC yang ada tetap dapat diakses, mereka tidak akan lagi menerima tambalan atau pembaruan dari AWS, sesuai dengan Kebijakan Dukungan Kerangka Kon AWS tainer Pembelajaran Mendalam.

Jika Anda mengalami kesalahan, Anda dapat menggunakan daftar berikut untuk mencoba memecahkan masalah pekerjaan pelatihan Anda. Jika Anda memerlukan dukungan lebih lanjut, hubungi tim SageMaker AI melalui Forum AWS Dukungan atau AWS Pengembang untuk Amazon SageMaker AI.

Pekerjaan pelatihan tidak konvergen seperti yang diharapkan jika dibandingkan dengan pekerjaan pelatihan kerangka kerja asli

Masalah konvergensi berkisar dari “model tidak belajar ketika SageMaker Kompiler Pelatihan dihidupkan” hingga “model belajar tetapi lebih lambat dari kerangka kerja asli”. Dalam panduan pemecahan masalah ini, kami menganggap konvergensi Anda baik-baik saja tanpa Tra SageMaker ining Compiler (dalam kerangka kerja asli) dan menganggap ini sebagai dasar.

Ketika dihadapkan dengan masalah konvergensi seperti itu, langkah pertama adalah mengidentifikasi apakah masalah tersebut terbatas pada pelatihan terdistribusi atau berasal dari pelatihan GPU tunggal. Pelatihan terdistribusi dengan SageMaker Training Compiler adalah perpanjangan dari pelatihan GPU tunggal dengan langkah-langkah tambahan.

  1. Siapkan cluster dengan beberapa instance atau GPU.

  2. Mendistribusikan data input ke semua pekerja.

  3. Sinkronkan pembaruan model dari semua pekerja.

Oleh karena itu, setiap masalah konvergensi dalam pelatihan GPU tunggal menyebar ke pelatihan terdistribusi dengan banyak pekerja.

Diagram alir untuk memecahkan masalah konvergensi dalam pekerjaan pelatihan saat menggunakan Tra SageMaker ining Compiler.

Masalah konvergensi yang terjadi dalam pelatihan GPU tunggal

Jika masalah konvergensi Anda berasal dari pelatihan GPU tunggal, ini kemungkinan karena pengaturan yang tidak tepat untuk hyperparameter atau API. torch_xla

Periksa hyperparameter

Pel SageMaker atihan dengan Training Compiler mengarah pada perubahan jejak memori model. Kompiler secara cerdas menengahi antara penggunaan kembali dan komputasi ulang yang mengarah ke peningkatan atau penurunan konsumsi memori yang sesuai. Untuk memanfaatkan ini, penting untuk menyetel ulang ukuran batch dan hyperparameter terkait saat memigrasikan pekerjaan pelatihan ke SageMaker Training Compiler. Namun, pengaturan hiperparameter yang salah sering menyebabkan osilasi dalam kehilangan pelatihan dan kemungkinan konvergensi yang lebih lambat sebagai hasilnya. Dalam kasus yang jarang terjadi, hiperparameter agresif dapat mengakibatkan model tidak belajar (metrik kerugian pelatihan tidak berkurang atau kembaliNaN). Untuk mengidentifikasi apakah masalah konvergensi disebabkan oleh hyperparameter, lakukan tes berdampingan dari dua pekerjaan pelatihan dengan dan tanpa Tra SageMaker ining Compiler sambil menjaga semua hyperparameter tetap sama.

Periksa apakah torch_xla API diatur dengan benar untuk pelatihan GPU tunggal

Jika masalah konvergensi berlanjut dengan hyperparameter dasar, Anda perlu memeriksa apakah ada penggunaan torch_xla API yang tidak tepat, khususnya yang untuk memperbarui model. Pada dasarnya, torch_xla terus mengakumulasi instruksi (menunda eksekusi) dalam bentuk grafik sampai secara eksplisit diinstruksikan untuk menjalankan grafik akumulasi. torch_xla.core.xla_model.mark_step()Fungsi ini memfasilitasi eksekusi grafik yang terakumulasi. Eksekusi grafik harus disinkronkan menggunakan fungsi ini setelah setiap pembaruan model dan sebelum mencetak dan mencatat variabel apa pun . Jika tidak memiliki langkah sinkronisasi, model mungkin menggunakan nilai basi dari memori selama pencetakan, log, dan pass maju berikutnya, alih-alih menggunakan nilai terbaru yang harus disinkronkan setelah setiap iterasi dan pembaruan model.

Ini bisa lebih rumit ketika menggunakan Tra SageMaker ining Compiler dengan penskalaan gradien (mungkin dari penggunaan AMP) atau teknik kliping gradien. Urutan perhitungan gradien yang sesuai dengan AMP adalah sebagai berikut.

  1. Perhitungan gradien dengan penskalaan

  2. Penghapusan skala gradien, kliping gradien, dan kemudian penskalaan

  3. Pembaruan model

  4. Menyinkronkan eksekusi grafik dengan mark_step()

Untuk menemukan API yang tepat untuk operasi yang disebutkan dalam daftar, lihat panduan untuk memi grasikan skrip pelatihan Anda ke Tra SageMaker ining Com piler.

Pertimbangkan untuk menggunakan Penyetelan Model Otomatis

Jika masalah konvergensi muncul saat menyetel ulang ukuran batch dan hyperparameter terkait seperti laju pembelajaran saat menggunakan Tra SageMaker ining Compiler, pertimbangkan untuk menggunakan Penyetelan Model Otomatis untuk menyetel hyperparameter Anda. Anda dapat merujuk ke contoh notebook tentang menyetel hyperparameter dengan Tra SageMaker ining Com piler.

Masalah konvergensi yang terjadi dalam pelatihan terdistribusi

Jika masalah konvergensi Anda berlanjut dalam pelatihan terdistribusi, ini kemungkinan karena pengaturan yang tidak tepat untuk inisialisasi bobot atau torch_xla API.

Periksa inisialisasi bobot di seluruh pekerja

Jika masalah konvergensi muncul saat menjalankan pekerjaan pelatihan terdistribusi dengan beberapa pekerja, pastikan ada perilaku deterministik yang seragam di semua pekerja dengan menetapkan benih konstan jika memungkinkan. Waspadalah terhadap teknik seperti inisialisasi bobot, yang melibatkan pengacakan. Setiap pekerja mungkin akhirnya melatih model yang berbeda tanpa adanya benih yang konstan.

Periksa apakah torch_xla API diatur dengan benar untuk pelatihan terdistribusi

Jika masalah masih berlanjut, ini kemungkinan karena penggunaan torch_xla API yang tidak tepat untuk pelatihan terdistribusi. Pastikan Anda menambahkan yang berikut ini untuk menyiapkan cluster ModelTrainer untuk pelatihan terdistribusi dengan Tra SageMaker ining Compiler.

distribution={'torchxla': {'enabled': True}}

Ini harus disertai dengan fungsi _mp_fn(index) dalam skrip pelatihan Anda, yang dipanggil sekali per pekerja. Tanpa mp_fn(index) fungsi tersebut, Anda mungkin akan membiarkan masing-masing pekerja melatih model secara independen tanpa berbagi pembaruan model.

Selanjutnya, pastikan Anda menggunakan torch_xla.distributed.parallel_loader.MpDeviceLoader API bersama dengan sampler data terdistribusi, seperti yang dipandu dalam dokumentasi tentang migrasi skrip pelatihan Anda ke Tra SageMaker ining Compiler, seperti pada contoh berikut.

torch.utils.data.distributed.DistributedSampler()

Ini memastikan bahwa data input didistribusikan dengan benar di semua pekerja.

Terakhir, untuk menyinkronkan pembaruan model dari semua pekerja, gunakan torch_xla.core.xla_model._fetch_gradients untuk mengumpulkan gradien dari semua pekerja dan torch_xla.core.xla_model.all_reduce untuk menggabungkan semua gradien yang dikumpulkan menjadi satu pembaruan.

Ini bisa lebih rumit ketika menggunakan Tra SageMaker ining Compiler dengan penskalaan gradien (mungkin dari penggunaan AMP) atau teknik kliping gradien. Urutan perhitungan gradien yang sesuai dengan AMP adalah sebagai berikut.

  1. Perhitungan gradien dengan penskalaan

  2. Sinkronisasi gradien di semua pekerja

  3. Penghapusan skala gradien, kliping gradien, dan kemudian penskalaan gradien

  4. Pembaruan model

  5. Menyinkronkan eksekusi grafik dengan mark_step()

Perhatikan bahwa daftar periksa ini memiliki item tambahan untuk menyinkronkan semua pekerja, dibandingkan dengan daftar periksa untuk pelatihan GPU tunggal.

Pekerjaan pelatihan gagal karena PyTorch/XLA konfigurasi yang hilang

Jika pekerjaan pelatihan gagal dengan pesan Missing XLA configuration kesalahan, itu mungkin karena kesalahan konfigurasi dalam jumlah GPU per instans yang Anda gunakan.

XLA memerlukan variabel lingkungan tambahan untuk mengkompilasi pekerjaan pelatihan. Variabel lingkungan yang hilang yang paling umum adalahGPU_NUM_DEVICES. Agar kompiler berfungsi dengan baik, Anda harus mengatur variabel lingkungan ini sama dengan jumlah GPU per instance.

Ada tiga pendekatan untuk mengatur variabel GPU_NUM_DEVICES lingkungan:

  • Pendekatan 1 — Gunakan environment argumen ModelTrainer kelas SageMaker AI. Misalnya, jika Anda menggunakan ml.p3.8xlarge instance yang memiliki empat GPU, lakukan hal berikut:

    # Using the SageMaker Python SDK's ModelTrainer model_trainer=ModelTrainer( ... compute=Compute(instance_type="ml.p3.8xlarge", instance_count=1), hyperparameters={...}, environment={ ... "GPU_NUM_DEVICES": "4" # corresponds to number of GPUs on the specified instance }, )
  • Pendekatan 2 — Gunakan hyperparameters argumen ModelTrainer kelas SageMaker AI dan uraikan dalam skrip pelatihan Anda.

    1. Untuk menentukan jumlah GPU, tambahkan pasangan kunci-nilai ke argumen. hyperparameters

      Misalnya, jika Anda menggunakan ml.p3.8xlarge instance yang memiliki empat GPU, lakukan hal berikut:

      # Using the SageMaker Python SDK's ModelTrainer model_trainer=ModelTrainer( ... source_code=SourceCode(entry_script="train.py"), compute=Compute(instance_type="ml.p3.8xlarge", instance_count=1), hyperparameters = { ... "n_gpus": 4 # corresponds to number of GPUs on specified instance } ) model_trainer.train()
    2. Dalam skrip pelatihan Anda, parsing n_gpus hyperparameter dan tentukan sebagai input untuk variabel GPU_NUM_DEVICES lingkungan.

      # train.py import os, argparse if __name__ == "__main__": parser = argparse.ArgumentParser() ... # Data, model, and output directories parser.add_argument("--output_data_dir", type=str, default=os.environ["SM_OUTPUT_DATA_DIR"]) parser.add_argument("--model_dir", type=str, default=os.environ["SM_MODEL_DIR"]) parser.add_argument("--training_dir", type=str, default=os.environ["SM_CHANNEL_TRAIN"]) parser.add_argument("--test_dir", type=str, default=os.environ["SM_CHANNEL_TEST"]) parser.add_argument("--n_gpus", type=str, default=os.environ["SM_NUM_GPUS"]) args, _ = parser.parse_known_args() os.environ["GPU_NUM_DEVICES"] = args.n_gpus
  • Pendekatan 3 — Hard-code variabel GPU_NUM_DEVICES lingkungan dalam skrip pelatihan Anda. Misalnya, tambahkan yang berikut ini ke skrip Anda jika Anda menggunakan instance yang memiliki empat GPU.

    # train.py import os os.environ["GPU_NUM_DEVICES"] = 4
Tip

Untuk menemukan jumlah perangkat GPU pada instans pembelajaran mesin yang ingin Anda gunakan, lihat Komputasi Tercepat di halaman Jenis Instans Amazon EC2.

SageMaker Training Compiler tidak mengurangi total waktu pelatihan

Jika total waktu pelatihan tidak berkurang dengan Tra SageMaker ining Compiler, kami sangat menyarankan Anda untuk memeriksa SageMaker Praktik dan Pertimbangan Terbaik Kompiler Pelatihan halaman untuk memeriksa konfigurasi pelatihan Anda, strategi padding untuk bentuk tensor input, dan hyperparameter.