

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Parallele Problembehebung bei Modellen
<a name="distributed-troubleshooting-model-parallel"></a>

Wenn Sie auf einen Fehler stoßen, können Sie anhand der folgenden Liste versuchen, Probleme mit Ihrem Trainingsjob zu beheben. Wenn das Problem weiterhin besteht, wenden Sie sich an den [AWS Support](https://aws.amazon.com/premiumsupport). 

**Topics**
+ [Überlegungen zur Verwendung des SageMaker Debuggers mit der SageMaker Model Parallelism Library](#distributed-ts-model-parallel-debugger)
+ [Speichern von Prüfpunkten](#distributed-ts-model-parallel-checkpoints)
+ [Konvergenz unter Verwendung von Model Parallel und TensorFlow](#distributed-ts-model-parallel-tf-convergence)
+ [Blockieren oder Abstürzen von verteilten Trainingsaufträgen](#distributed-ts-model-parallel-training-issues)
+ [Empfangen eines NCCL-Fehlers für einen Schulungsjob PyTorch](#distributed-ts-model-parallel-nccl-error)
+ [Empfang `RecursionError` für eine PyTorch Ausbildungsstelle](#distributed-ts-model-parallel-super-forward-not-supported)

## Überlegungen zur Verwendung des SageMaker Debuggers mit der SageMaker Model Parallelism Library
<a name="distributed-ts-model-parallel-debugger"></a>

SageMaker Der Debugger ist für die Modellparallelismus-Bibliothek nicht verfügbar. SageMaker Der Debugger ist standardmäßig für alle PyTorch Trainingsjobs aktiviert, SageMaker TensorFlow und es wird möglicherweise ein Fehler angezeigt, der wie folgt aussieht: 

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

Um dieses Problem zu beheben, deaktivieren Sie den Debugger, indem Sie `debugger_hook_config=False` beim Erstellen eines Frameworks `estimator` übergeben, wie im folgenden Beispiel gezeigt.

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

## Speichern von Prüfpunkten
<a name="distributed-ts-model-parallel-checkpoints"></a>

Beim Speichern von Checkpoints eines großen Modells auf SageMaker KI kann der folgende Fehler auftreten: 

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

Dies könnte durch eine SageMaker KI-Einschränkung beim Hochladen des lokalen Checkpoints auf Amazon S3 während des Trainings verursacht werden. Um Checkpointing in SageMaker AI zu deaktivieren, verwenden Sie das folgende Beispiel, um die Checkpoints explizit hochzuladen.

Wenn Sie auf den vorherigen Fehler stoßen, verwenden Sie ihn nicht `checkpoint_s3_uri` zusammen mit dem SageMaker `estimator` Aufruf. Beim Speichern von Checkpoints für größere Modelle empfehlen wir, Checkpoints in einem benutzerdefinierten Verzeichnis zu speichern und dieses an die Hilfsfunktion (als ein `local_path` Argument) zu übergeben.

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

Verwendung von Hilfsfunktionen:

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

## Konvergenz unter Verwendung von Model Parallel und TensorFlow
<a name="distributed-ts-model-parallel-tf-convergence"></a>

Wenn Sie das SageMaker KI-Training mit mehreren Knoten TensorFlow und der Modellparallelitätsbibliothek verwenden, konvergiert der Verlust möglicherweise nicht wie erwartet, da die Reihenfolge der Trainingseingabedateien auf jedem Knoten unterschiedlich sein kann. Dies kann dazu führen, dass unterschiedliche Ränge in derselben Modellparallelgruppe mit unterschiedlichen Eingabedateien arbeiten, was zu Inkonsistenzen führen kann. Um dies zu verhindern, stellen Sie sicher, dass die Eingabedateien in allen Rängen gleich angeordnet sind, bevor sie in Datensätze konvertiert werden. TensorFlow Eine Möglichkeit, dies zu erreichen, besteht darin, die Namen der Eingabedateien im Trainingsskript zu sortieren.

## Blockieren oder Abstürzen von verteilten Trainingsaufträgen
<a name="distributed-ts-model-parallel-training-issues"></a>

Falls es bei Ihrem Trainingsjob zu Problemen kommt, die zum Stillstand kommen, abstürzen oder nicht reagieren, lesen Sie sich die folgenden Hinweise zur Problembehebung durch, um herauszufinden, was die Ursache des Problems ist. Wenn Sie weitere Unterstützung benötigen, wenden Sie sich über den [AWS Support](https://aws.amazon.com/premiumsupport) an das SageMaker verteilte Schulungsteam.
+  Wenn Sie feststellen, dass **ein verteilter Trainingsjob beim NCCL-Initialisierungsschritt ins Stocken** gerät, sollten Sie Folgendes beachten: 
  + Wenn Sie eine der EFA-fähigen Instances ( `ml.p4d` oder `ml.p3dn` Instances) mit einer benutzerdefinierten VPC und ihrem Subnetz verwenden, stellen Sie sicher, dass die verwendete Sicherheitsgruppe eingehende und ausgehende Verbindungen für alle Ports zu und von derselben SG hat. In der Regel benötigen Sie außerdem ausgehende Verbindungen zu einer beliebigen IP als separate Regel (für den Internetzugang). Anweisungen zum Hinzufügen von Regeln für eingehenden und ausgehenden Datenverkehr für die EFA-Kommunikation finden Sie unter [SageMaker KI verteilte Trainingsaufgaben, die während der Initialisierung ins Stocken geraten](distributed-troubleshooting-data-parallel.md#distributed-ts-data-parallel-efa-sg).
+ Wenn Sie feststellen, dass ein **verteilter Trainingsjob beim Checkpoint des vollständigen Modells ins Stocken** gerät, kann das daran liegen, dass der `state_dict()` Aufruf des Modells oder Optimierers nicht auf allen Rängen mit `rdp_rank()==0` (bei Verwendung von Tensorparallelität) oder `dp_rank()==0` (bei ausschließlicher Verwendung von Pipeline-Parallelität) erfolgt ist. Diese Ränge müssen miteinander kommunizieren, um den Checkpoint zu erstellen, der gespeichert werden soll. Ähnliche Probleme können auch beim Checkpointing des partiellen Optimierers auftreten, wenn `shard_optimizer_state` aktiviert ist. 

  Weitere Informationen zum Checkpointing eines Modells mit Modellparallelität finden Sie unter [Allgemeine Anweisungen](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smp_versions/latest/smd_model_parallel_pytorch.html#general-instruction-for-saving-and-loading) zum Speichern und Laden und [Checkpointing für ein verteiltes PyTorch Modell (für die SageMaker Modellparallelitätsbibliothek zwischen v1.6.0 und v1.9.0)](distributed-model-parallel-checkpointing-and-finetuning.md#model-parallel-extended-features-pytorch-saving-loading-checkpoints).
+ Wenn der Trainingsjob mit dem **Fehler CUDA Out of Memory** abstürzt, bedeutet dies, dass die verteilte Trainingskonfiguration an das Modell auf dem GPU-Cluster angepasst werden muss. Weitere Informationen und bewährte Verfahren finden Sie unter [Die richtige Konfiguration für ein bestimmtes Modell einrichten](model-parallel-best-practices.md#model-parallel-best-practices-configuration).
+ Wenn der Trainingsjob mit einem **nicht behebbaren [ECC-Fehler](https://docs.nvidia.com/deploy/a100-gpu-mem-error-mgmt/index.html)** abstürzt, bedeutet dies, dass einer der Aufgaben GPUs im Cluster fehlerhaft geworden ist. Wenn Sie technischen Support benötigen, teilen Sie den Job-ARN mit dem AWS -Team und starten Sie Ihren Trainingsjob, wenn möglich, von einem Checkpoint aus neu.
+ In seltenen Fällen kann es vorkommen, dass eine Jobkonfiguration, die zuvor funktioniert hat, aber nahe an den Grenzen des GPU-Speichers liegt, später mit einem anderen Cluster aufgrund eines **CUDA-Fehlers Nicht genügend Arbeitsspeicher** fehlschlägt. Dies könnte daran liegen, dass einige GPUs aufgrund von ECC-Fehlern über weniger verfügbaren Arbeitsspeicher als gewöhnlich verfügen.
+ Ein **Netzwerk-Timeout-Absturz** kann auftreten, wenn ein Job mit mehreren Knoten ausgeführt wird, der nicht alle Knoten im Knoten verwendet. GPUs Um dieses Problem zu umgehen, verwenden Sie all GPUs auf dem Knoten, indem Sie sicherstellen, dass der `processes_per_host` Parameter auf die Anzahl von GPUs in jeder Instanz gesetzt ist. Zum Beispiel ist dies `processes_per_host=8` für `ml.p3.16xlarge`, `ml.p3dn.24xlarge` und `ml.p4d.24xlarge`-Instances.
+ Wenn Sie feststellen, dass Ihr Schulungsjob während des Herunterladens der Daten viel Zeit in Anspruch nimmt, stellen Sie sicher, dass der Amazon S3 S3-Pfad, den Sie `checkpoint_s3_uri` für den SageMaker `Estimator` Kurs angegeben haben, für den aktuellen Schulungsjob eindeutig ist. Wenn dieser Pfad für mehrere Trainingsjobs, die gleichzeitig ausgeführt werden, wiederverwendet wird, werden all diese Checkpoints auf denselben Amazon S3-Pfad hoch- und heruntergeladen, was die Ladezeit der Checkpoints erheblich verlängern kann.
+ Verwenden Sie FSx Lustre, wenn Sie mit großen Datenmengen und Modellen arbeiten.
  + Wenn Ihr Datensatz groß ist und das Abrufen lange dauert, empfehlen wir, Ihren Datensatz [FSx für](https://aws.amazon.com/fsx/lustre/) Lustre zu verwenden.
  + Wenn Trainingsmodelle mehr als 10 Milliarden Parameter enthalten, empfehlen wir die Verwendung von FSx for Lustre für das Checkpointing.
  + Nachdem Sie ein Dateisystem erstellt haben, warten Sie, bis der Status **verfügbar** ist, bevor Sie einen Trainingsjob mit diesem Dateisystem starten. 

## Empfangen eines NCCL-Fehlers für einen Schulungsjob PyTorch
<a name="distributed-ts-model-parallel-nccl-error"></a>

Wenn Sie auf den folgenden Fehler gestoßen sind, liegt dies möglicherweise daran, dass bei einem Prozess nicht mehr genügend GPU-Speicher zur Verfügung steht.

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

Sie können dieses Problem beheben, indem Sie die Batchgröße reduzieren oder`active_microbatches`. Wenn die auto Partitionierung nicht zu einer ausgewogenen Partitionierung führt, müssen Sie möglicherweise eine manuelle Partitionierung in Betracht ziehen. Weitere Informationen finden Sie unter [Pipeline-Parallelität zwischen Knoten](model-parallel-best-practices.md#model-parallel-best-practices-configuration-pipeline-across-nodes).

## Empfang `RecursionError` für eine PyTorch Ausbildungsstelle
<a name="distributed-ts-model-parallel-super-forward-not-supported"></a>

Die Bibliothek unterstützt das Aufrufen `super.forward()` innerhalb des Forward-Aufrufs eines Moduls nicht. Wenn Sie `super.forward()` verwenden, erhalten Sie möglicherweise die folgende Fehlermeldung. 

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

Um den Fehler zu beheben, sollten Sie nicht `super.forward()` anrufen, sondern `super()._orig_forward()`. 