

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
<a name="training-compiler-troubleshooting"></a>

**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 ](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/support-policy.html)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 ](https://console.aws.amazon.com/support/) atau [AWS Pengembang untuk Amazon SageMaker AI](https://forums.aws.amazon.com/forum.jspa?forumID=285).

## Pekerjaan pelatihan tidak konvergen seperti yang diharapkan jika dibandingkan dengan pekerjaan pelatihan kerangka kerja asli
<a name="training-compiler-troubleshooting-convergence-issue"></a>

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.

1. Mendistribusikan data input ke semua pekerja.

1. 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.](https://docs.aws.amazon.com/id_id/sagemaker/latest/dg/images/training-compiler-troubleshooting-convergence-flow.jpg)


### Masalah konvergensi yang terjadi dalam pelatihan GPU tunggal
<a name="training-compiler-troubleshooting-convergence-issue-single-gpu"></a>

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 kembali`NaN`). 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

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

1. Pembaruan model

1. 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 ](https://docs.aws.amazon.com/sagemaker/latest/dg/training-compiler-pytorch-models.html) 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 ](https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning.html) untuk menyetel hyperparameter Anda. Anda dapat merujuk ke [ contoh notebook tentang menyetel hyperparameter dengan Tra SageMaker ining Com ](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-training-compiler/tensorflow/single_gpu_single_node/hyper-parameter-tuning.ipynb) piler. 

### Masalah konvergensi yang terjadi dalam pelatihan terdistribusi
<a name="training-compiler-troubleshooting-convergence-issue-distributed-training"></a>

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](https://docs.aws.amazon.com/sagemaker/latest/dg/training-compiler-pytorch-models.html), 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

1. Sinkronisasi gradien di semua pekerja

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

1. Pembaruan model

1. 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
<a name="training-compiler-troubleshooting-missing-xla-config"></a>

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 adalah`GPU_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()
     ```

  1. 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 ](https://aws.amazon.com/ec2/instance-types/#Accelerated_Computing) di halaman * Jenis Instans * Amazon EC2. 

## SageMaker Training Compiler tidak mengurangi total waktu pelatihan
<a name="training-compiler-troubleshooting-no-improved-training-time"></a>

Jika total waktu pelatihan tidak berkurang dengan Tra SageMaker ining Compiler, kami sangat menyarankan Anda untuk memeriksa [SageMaker Praktik dan Pertimbangan Terbaik Kompiler Pelatihan](training-compiler-tips-pitfalls.md) halaman untuk memeriksa konfigurasi pelatihan Anda, strategi padding untuk bentuk tensor input, dan hyperparameter. 