

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

# Pemecahan Masalah Paralel Model
<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 Support](https://aws.amazon.com/premiumsupport). 

**Topics**
+ [Pertimbangan untuk Menggunakan SageMaker Debugger dengan Model Parallelism Library SageMaker](#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 Training Job PyTorch](#distributed-ts-model-parallel-nccl-error)
+ [Menerima `RecursionError` PyTorch Training Job](#distributed-ts-model-parallel-super-forward-not-supported)

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

SageMaker Debugger tidak tersedia untuk pustaka SageMaker paralelisme 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 meneruskan `debugger_hook_config=False` saat membuat kerangka kerja `estimator` seperti yang ditunjukkan pada contoh berikut.

```
bucket=sagemaker.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)

estimator = TensorFlow(
    ...

    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
```

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

Jika Anda mengalami kesalahan sebelumnya, jangan gunakan `checkpoint_s3_uri` dengan panggilan. SageMaker `estimator` Saat menyimpan pos pemeriksaan untuk model yang lebih besar, kami sarankan untuk menyimpan pos pemeriksaan ke direktori khusus dan meneruskan yang sama 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. 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 macet, mogok, atau tidak merespons, baca item pemecahan masalah berikut untuk mengidentifikasi penyebab masalah tersebut. Jika Anda membutuhkan dukungan lebih lanjut, hubungi tim pelatihan SageMaker terdistribusi melalui [AWS Support](https://aws.amazon.com/premiumsupport).
+  Jika Anda melihat **pekerjaan pelatihan terdistribusi terhenti pada langkah inisialisasi NCCL**, pertimbangkan hal berikut: 
  + Jika Anda menggunakan salah satu instans (`ml.p4d`atau `ml.p3dn` instance) yang mendukung EFA dengan VPC kustom dan subnetnya, pastikan bahwa 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 AI mendistribusikan pekerjaan pelatihan yang terhenti selama inisialisasi](distributed-troubleshooting-data-parallel.md#distributed-ts-data-parallel-efa-sg)
+ Jika Anda melihat **pekerjaan pelatihan terdistribusi terhenti saat memeriksa** model lengkap, ini mungkin karena `state_dict()` panggilan pada model atau pengoptimal tidak dilakukan di semua peringkat dengan `rdp_rank()==0` (saat menggunakan paralelisme tensor) atau `dp_rank()==0` (saat hanya menggunakan paralelisme pipa). Peringkat ini perlu berkomunikasi untuk membangun pos pemeriksaan untuk diselamatkan. Masalah penghentian serupa juga dapat terjadi saat checkpointing pengoptimal sebagian jika diaktifkan. `shard_optimizer_state` 

  Untuk informasi selengkapnya tentang checkpointing model dengan paralelisme model, lihat [Instruksi Umum untuk Menyimpan](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html#general-instruction-for-saving-and-loading) dan Memuat dan. [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 macet dengan **kesalahan CUDA Out of Memory**, ini berarti bahwa konfigurasi pelatihan terdistribusi perlu disesuaikan agar sesuai dengan model pada cluster GPU. Untuk informasi lebih lanjut 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 macet dengan **[kesalahan ECC](https://docs.nvidia.com/deploy/a100-gpu-mem-error-mgmt/index.html) yang tidak dapat diperbaiki**, ini berarti bahwa salah satu GPUs di cluster menjadi buruk. Jika Anda memerlukan dukungan teknis, bagikan pekerjaan ARN dengan AWS tim dan mulai ulang 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 GPUs di node. Untuk menyiasatinya, gunakan semua GPUs pada node dengan memastikan bahwa `processes_per_host` parameter diatur ke jumlah GPUs dalam 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 `Estimator` 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 mungkin secara signifikan meningkatkan waktu pemuatan pos pemeriksaan.
+ Gunakan FSx untuk Lustre ketika Anda berurusan dengan data besar dan model.
  + [Jika kumpulan data Anda besar dan mengambilnya membutuhkan waktu lama, kami sarankan untuk menyimpan kumpulan data Anda untuk Lustre. FSx ](https://aws.amazon.com/fsx/lustre/)
  + Ketika model pelatihan melebihi 10 miliar parameter, kami sarankan menggunakan Lustre FSx untuk pos pemeriksaan.
  + Setelah Anda membuat sistem file, pastikan untuk menunggu status **tersedia** sebelum memulai pekerjaan pelatihan menggunakannya. 

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

Jika Anda mengalami kesalahan berikut, 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 mengatasi ini 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).

## Menerima `RecursionError` PyTorch Training Job
<a name="distributed-ts-model-parallel-super-forward-not-supported"></a>

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

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

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