

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

# Pemecahan Masalah Model Paralel
<a name="distributed-troubleshooting-model-parallel"></a>

Jika Anda mengalami kesalahan, Anda dapat menggunakan daftar berikut untuk mencoba memecahkan masalah pekerjaan pelatihan Anda. Jika masalah berlanjut, hubungi [AWS Dukungan](https://aws.amazon.com/premiumsupport). 

**Topics**
+ [Pertimbangan untuk Menggunakan SageMaker Debugger dengan SageMaker Model Parallelism Library](#distributed-ts-model-parallel-debugger)
+ [Menyimpan Pos Pemeriksaan](#distributed-ts-model-parallel-checkpoints)
+ [Konvergensi Menggunakan Model Paralel dan TensorFlow](#distributed-ts-model-parallel-tf-convergence)
+ [Menghentikan atau Menghancurkan Pekerjaan Pelatihan Terdistribusi](#distributed-ts-model-parallel-training-issues)
+ [Menerima Kesalahan NCCL untuk Pekerjaan Pelatihan PyTorch](#distributed-ts-model-parallel-nccl-error)
+ [Mener `RecursionError` ima untuk PyTorch Pekerjaan Pelatihan](#distributed-ts-model-parallel-super-forward-not-supported)

## Pertimbangan untuk Menggunakan SageMaker Debugger dengan SageMaker Model Parallelism Library
<a name="distributed-ts-model-parallel-debugger"></a>

SageMaker Debugger tidak tersedia untuk pustaka paralel SageMaker isme model. Debugger diaktifkan secara default untuk semua pekerjaan SageMaker TensorFlow dan PyTorch pelatihan, dan Anda mungkin melihat kesalahan yang terlihat seperti berikut: 

```
FileNotFoundError: [Errno 2] No such file or directory: '/opt/ml/checkpoints/metadata.json.sagemaker-uploading
```

Untuk memperbaiki masalah ini, nonaktifkan Debugger dengan melewati `debugger_hook_config=False` saat membuat kerangka kerja `ModelTrainer` seperti yang ditunjukkan pada contoh berikut.

```
bucket=Session().default_bucket()
base_job_name="sagemaker-checkpoint-test"
checkpoint_in_bucket="checkpoints"

# The S3 URI to store the checkpoints
checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket)

model_trainer = ModelTrainer(
    ...

    distribution={"smdistributed": {"modelparallel": { "enabled": True }}},
    checkpoint_s3_uri=checkpoint_s3_bucket,
    checkpoint_local_path="/opt/ml/checkpoints",
    debugger_hook_config=False
)
```

## Menyimpan Pos Pemeriksaan
<a name="distributed-ts-model-parallel-checkpoints"></a>

Anda mungkin mengalami kesalahan berikut saat menyimpan pos pemeriksaan model besar di SageMaker AI: 

```
InternalServerError: We encountered an internal error. Please try again
```

Hal ini dapat disebabkan oleh keterbatasan SageMaker AI saat mengunggah pos pemeriksaan lokal ke Amazon S3 selama pelatihan. Untuk menonaktifkan checkpointing di SageMaker AI, gunakan contoh berikut untuk mengunggah pos pemeriksaan secara eksplisit.

Jika Anda mengalami kesalahan sebelumnya, jangan gunakan `checkpoint_s3_uri` dengan SageMaker `ModelTrainer` panggilan. Saat menyimpan pos pemeriksaan untuk model yang lebih besar, kami sarankan menyimpan pos pemeriksaan ke direktori khusus dan meneruskannya ke fungsi pembantu (sebagai `local_path` argumen).

```
import os

def aws_s3_sync(source, destination):
    """aws s3 sync in quiet mode and time profile"""
    import time, subprocess
    cmd = ["aws", "s3", "sync", "--quiet", source, destination]
    print(f"Syncing files from {source} to {destination}")
    start_time = time.time()
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    p.wait()
    end_time = time.time()
    print("Time Taken to Sync: ", (end_time-start_time))
    return

def sync_local_checkpoints_to_s3(local_path="/opt/ml/checkpoints", s3_uri=os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))+'/checkpoints'):
    """ sample function to sync checkpoints from local path to s3 """

    import boto3
    #check if local path exists
    if not os.path.exists(local_path):
        raise RuntimeError("Provided local path {local_path} does not exist. Please check")

    #check if s3 bucket exists
    s3 = boto3.resource('s3')
    if not s3_uri.startswith("s3://"):
        raise ValueError(f"Provided s3 uri {s3_uri} is not valid.")

    s3_bucket = s3_uri.replace('s3://','').split('/')[0]
    print(f"S3 Bucket: {s3_bucket}")
    try:
        s3.meta.client.head_bucket(Bucket=s3_bucket)
    except Exception as e:
        raise e
    aws_s3_sync(local_path, s3_uri)
    return

def sync_s3_checkpoints_to_local(local_path="/opt/ml/checkpoints", s3_uri=os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))+'/checkpoints'):
    """ sample function to sync checkpoints from s3 to local path """

    import boto3
    #try to create local path if it does not exist
    if not os.path.exists(local_path):
        print(f"Provided local path {local_path} does not exist. Creating...")
        try:
            os.makedirs(local_path)
        except Exception as e:
            raise RuntimeError(f"Failed to create {local_path}")

    #check if s3 bucket exists
    s3 = boto3.resource('s3')
    if not s3_uri.startswith("s3://"):
        raise ValueError(f"Provided s3 uri {s3_uri} is not valid.")

    s3_bucket = s3_uri.replace('s3://','').split('/')[0]
    print(f"S3 Bucket: {s3_bucket}")
    try:
        s3.meta.client.head_bucket(Bucket=s3_bucket)
    except Exception as e:
        raise e
    aws_s3_sync(s3_uri, local_path)
    return
```

Penggunaan fungsi pembantu:

```
#base_s3_uri - user input s3 uri or save to model directory (default)
#curr_host - to save checkpoints of current host
#iteration - current step/epoch during which checkpoint is saved

# save checkpoints on every node using local_rank
if smp.local_rank() == 0:
    base_s3_uri = os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))
    curr_host = os.environ['SM_CURRENT_HOST']
    full_s3_uri = f'{base_s3_uri}/checkpoints/{curr_host}/{iteration}'
    sync_local_checkpoints_to_s3(local_path=checkpoint_dir, s3_uri=full_s3_uri)
```

## Konvergensi Menggunakan Model Paralel dan TensorFlow
<a name="distributed-ts-model-parallel-tf-convergence"></a>

Saat Anda menggunakan pelatihan multi-node SageMaker AI dengan TensorFlow dan pustaka paralelisme model, kerugian mungkin tidak menyatu seperti yang diharapkan karena urutan file input pelatihan mungkin berbeda pada setiap node. Hal ini dapat menyebabkan peringkat yang berbeda dalam grup paralel model yang sama bekerja pada file input yang berbeda, menyebabkan inkonsistensi. Untuk mencegah hal ini, pastikan file input diurutkan dengan cara yang sama di semua peringkat sebelum dikonversi ke TensorFlow kumpulan data. Salah satu cara untuk mencapai ini adalah dengan mengurutkan nama file input dalam skrip pelatihan.

## Menghentikan atau Menghancurkan Pekerjaan Pelatihan Terdistribusi
<a name="distributed-ts-model-parallel-training-issues"></a>

Jika pekerjaan pelatihan Anda mengalami masalah yang macet, mogok, atau tidak merespons, baca item pemecahan masalah berikut untuk mengidentifikasi apa penyebab masalah tersebut. Jika Anda memerlukan dukungan lebih lanjut, hubungi tim pelatihan SageMaker yang didistribusikan melalui [AWS Dukungan](https://aws.amazon.com/premiumsupport).
+  Jika Anda melihat pekerjaan pelatihan ** terdistribusi terhenti pada langkah inisialisasi NCCL**, pertimbangkan hal berikut: 
  + Jika Anda menggunakan salah satu EFA-enabled instans (`ml.p4d`atau `ml.p3dn` instance) dengan VPC kustom dan subnetnya, pastikan grup keamanan yang digunakan memiliki koneksi masuk dan keluar untuk semua port ke dan dari SG yang sama. Anda juga umumnya memerlukan koneksi keluar ke IP apa pun sebagai aturan terpisah (untuk akses internet). Untuk menemukan petunjuk tentang cara menambahkan aturan masuk dan keluar untuk komunikasi EFA, lihat. [SageMaker Pekerjaan pelatihan terdistribusi AI terhenti selama inisialisasi](distributed-troubleshooting-data-parallel.md#distributed-ts-data-parallel-efa-sg)
+ Jika Anda melihat pekerjaan pelatihan ter ** distribusi terhenti saat memeriksa ** model lengkap, ini mungkin karena `state_dict()` panggilan pada model atau pengoptimal tidak dilakukan pada semua peringkat dengan `rdp_rank()==0` (saat menggunakan paralelisme tensor) atau `dp_rank()==0` (saat hanya menggunakan paralelisme pipa). Pangkat ini perlu berkomunikasi untuk membangun pos pemeriksaan yang akan diselamatkan. Masalah penundaan serupa juga dapat terjadi saat pengoptimal parSIAL checkpoint jika `shard_optimizer_state` diaktifkan. 

  Untuk informasi lebih lanjut tentang checkpointing model dengan paralelisme model, lihat Instruksi [ Umum untuk Menyimpan dan Memuat dan. ](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html#general-instruction-for-saving-and-loading) [Checkpointing PyTorch model terdistribusi (untuk pustaka paralelisme SageMaker model antara v1.6.0 dan v1.9.0)](distributed-model-parallel-checkpointing-and-finetuning.md#model-parallel-extended-features-pytorch-saving-loading-checkpoints)
+ Jika pekerjaan pelatihan mogok dengan kesalahan ** CUDA Out of Memory**, ini berarti bahwa konfigurasi pelatihan terdistribusi perlu disesuaikan agar sesuai dengan model pada cluster GPU. Untuk informasi selengkapnya dan praktik terbaik, lihat[Menyiapkan Konfigurasi yang Tepat untuk Model yang Diberikan](model-parallel-best-practices.md#model-parallel-best-practices-configuration).
+ Jika pekerjaan pelatihan mogok dengan kesalahan ** [ ECC yang tidak dapat diperbaiki ](https://docs.nvidia.com/deploy/a100-gpu-mem-error-mgmt/index.html)**, ini berarti bahwa salah satu GPU di cluster telah rusak. Jika Anda membutuhkan dukungan teknis, bagikan ARN pekerjaan dengan AWS tim dan mulai kembali pekerjaan pelatihan Anda dari pos pemeriksaan jika memungkinkan.
+ Dalam kasus yang jarang terjadi, konfigurasi pekerjaan yang bekerja sebelumnya tetapi mendekati batas memori GPU mungkin gagal nanti dengan cluster yang berbeda karena kesalahan ** CUDA Out of Memory**. Ini bisa jadi karena beberapa GPU memiliki memori yang tersedia lebih rendah dari biasanya karena kesalahan ECC.
+ **Kerusakan batas waktu jaringan ** mungkin terjadi saat menjalankan pekerjaan multinode yang tidak menggunakan semua GPU di node. Untuk menyiasatinya, gunakan semua GPU pada node dengan memastikan bahwa `processes_per_host` parameter diatur ke jumlah GPU di setiap instance. Misalnya, ini `processes_per_host=8` untuk`ml.p3.16xlarge`,`ml.p3dn.24xlarge`, dan `ml.p4d.24xlarge` contoh.
+ Jika Anda menemukan bahwa pekerjaan pelatihan Anda membutuhkan waktu lama selama tahap pengunduhan data, pastikan jalur Amazon S3 yang Anda berikan `checkpoint_s3_uri` untuk SageMaker `ModelTrainer` kelas tersebut unik untuk pekerjaan pelatihan saat ini. Jika jalur ini digunakan kembali di beberapa pekerjaan pelatihan yang berjalan secara bersamaan, semua pos pemeriksaan tersebut diunggah dan diunduh ke jalur Amazon S3 yang sama dan dapat meningkatkan waktu pemuatan pos pemeriksaan secara signifikan.
+ Gunakan FSx untuk Lustre saat Anda berurusan dengan data dan model yang besar.
  + Jika dataset Anda besar dan pengambilan membutuhkan waktu lama, sebaiknya simpan dataset Anda di [ FSx for Lustre. ](https://aws.amazon.com/fsx/lustre/)
  + Ketika model pelatihan melebihi 10 miliar parameter, kami sarankan menggunakan FSx for Lustre untuk checkpoint.
  + Setelah Anda membuat sistem file, pastikan untuk menunggu status ** tersedia ** sebelum memulai pekerjaan pelatihan menggunakannya. 

## Menerima Kesalahan NCCL untuk Pekerjaan Pelatihan PyTorch
<a name="distributed-ts-model-parallel-nccl-error"></a>

Jika Anda mengalami kesalahan berikut, itu mungkin karena proses kehabisan memori GPU.

```
NCCL error in: ../torch/lib/c10d/ProcessGroupNCCL.cpp:825, unhandled system error, NCCL version 2.7.8
ncclSystemError: System call (socket, malloc, munmap, etc) failed.
```

Anda dapat mengatasinya dengan mengurangi ukuran batch atau`active_microbatches`. Jika partisi otomatis tidak menghasilkan partisi yang seimbang, Anda mungkin harus mempertimbangkan partisi manual. Untuk informasi selengkapnya, lihat [Paralelisme pipa di seluruh node](model-parallel-best-practices.md#model-parallel-best-practices-configuration-pipeline-across-nodes).

## Mener `RecursionError` ima untuk PyTorch Pekerjaan Pelatihan
<a name="distributed-ts-model-parallel-super-forward-not-supported"></a>

Pustaka tidak mendukung panggilan `super.forward()` di dalam panggilan teruskan modul. Jika Anda menggunakan`super.forward()`, Anda mungkin menerima pesan kesalahan berikut. 

```
RecursionError: maximum recursion depth exceeded
```

Untuk memperbaiki kesalahan, alih-alih menelepon`super.forward()`, Anda harus menelepon`super()._orig_forward()`. 