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.
Verteiltes Rechnen mit Best Practices für SageMaker KI
Auf dieser Seite mit bewährten Methoden werden verschiedene Varianten der verteilten Datenverarbeitung für Aufgaben im Bereich Machine Learning (ML) im Allgemeinen vorgestellt. Der Begriff verteiltes Rechnen auf dieser Seite umfasst verteiltes Training für Aufgaben des maschinellen Lernens und paralleles Rechnen für Datenverarbeitung, Datengenerierung, Feature-Engineering und Reinforcement-Learning. Auf dieser Seite besprechen wir die häufigsten Herausforderungen bei der verteilten Datenverarbeitung und die verfügbaren Optionen im Bereich SageMaker Training and SageMaker Processing. Weiteres Lesematerial zum Thema verteiltes Rechnen finden Sie unter Was ist verteiltes Rechnen?
Sie können ML-Aufgaben so konfigurieren, dass sie verteilt auf mehrere Knoten (Instanzen), Beschleuniger (NVIDIA GPUs, AWS Trainium-Chips) und vCPU-Kerne ausgeführt werden. Durch die Ausführung verteilter Berechnungen können Sie eine Vielzahl von Zielen erreichen, z. B. schnellere Rechenoperationen, die Verarbeitung großer Datensätze oder das Training großer ML-Modelle.
In der folgenden Liste werden häufig auftretende Herausforderungen behandelt, mit denen Sie konfrontiert werden können, wenn Sie einen ML-Trainingsjob in großem Umfang durchführen.
-
Sie müssen Entscheidungen darüber treffen, wie Sie die Berechnungen je nach ML-Aufgaben, Softwarebibliotheken, die Sie verwenden möchten, und Rechenressourcen verteilen.
-
Nicht alle ML-Aufgaben sind einfach zu verteilen. Außerdem unterstützen nicht alle ML-Bibliotheken verteilte Berechnungen.
-
Verteilte Berechnungen führen möglicherweise nicht immer zu einer linearen Steigerung der Recheneffizienz. Insbesondere müssen Sie herausfinden, ob Daten-I/O und Kommunikation zwischen den GPUs zu Engpässen führen oder Mehraufwand verursachen.
-
Verteilte Berechnungen können numerische Prozesse stören und die Modellgenauigkeit verändern. Insbesondere beim Training mit datenparallelen neuronalen Netzwerken müssen Sie, wenn Sie die globale Batchgröße ändern und gleichzeitig auf einen größeren Rechencluster skalieren, auch die Lernrate entsprechend anpassen.
SageMaker KI bietet verteilte Schulungslösungen, um solche Herausforderungen für verschiedene Anwendungsfälle zu bewältigen. Wählen Sie eine der folgenden Optionen, die am besten zu Ihrem Anwendungsfall passt.
Themen
Option 1: Verwenden Sie einen integrierten SageMaker KI-Algorithmus, der verteiltes Training unterstützt
SageMaker KI bietet integrierte Algorithmen, die Sie sofort über die SageMaker KI-Konsole oder das SageMaker Python-SDK verwenden können. Mithilfe der integrierten Algorithmen müssen Sie keine Zeit für die Anpassung des Codes, das Verständnis der Wissenschaft hinter den Modellen oder die Ausführung von Docker auf bereitgestellten EC2 Amazon-Instances aufwenden.
Ein Teil der integrierten SageMaker KI-Algorithmen unterstützt verteiltes Training. Informationen darüber, ob der Algorithmus Ihrer Wahl verteiltes Training unterstützt, finden Sie in der Spalte Parallelisierbar in der Tabelle Allgemeine Informationen zu integrierten Algorithmen. Einige der Algorithmen unterstützen verteiltes Training mit mehreren Instanzen, während die übrigen parallelisierbaren Algorithmen die Parallelisierung über mehrere Instanzen hinweg unterstützen, wie GPUs in der Spalte Parallelisierbar angegeben.
Option 2: Führen Sie einen benutzerdefinierten ML-Code in der KI-verwalteten Trainings- oder Verarbeitungsumgebung aus SageMaker
SageMaker KI-Jobs können eine verteilte Trainingsumgebung für bestimmte Anwendungsfälle und Frameworks instanziieren. Diese Umgebung fungiert als ready-to-use Whiteboard, in das Sie Ihren eigenen ML-Code einbringen und ausführen können.
Wenn Ihr ML-Code ein Deep-Learning-Framework verwendet
Sie können verteilte Trainingsjobs mithilfe der Deep Learning Containers (DLC)
-
Die SageMaker KI verteilte Schulungsbibliotheken
Die von SageMaker KI verteilten Trainingsbibliotheken bieten AWS verwalteten Code für Datenparallelität und Modellparallelität neuronaler Netzwerke. SageMaker Die verteilte KI-Schulung umfasst auch Launcher-Clients, die in das SageMaker Python-SDK integriert sind, sodass Sie keinen parallelen Startcode erstellen müssen. Weitere Informationen finden Sie in der Datenparallelismus-Bibliothek von SageMaker KI und der Modellparallelismus-Bibliothek von SageMaker AI.
-
Verteilte Open-Source-Trainingsbibliotheken
Open-Source-Frameworks haben ihre eigenen Vertriebsmechanismen wie DistributedDataParallelism (DDP)
in oder Module in. PyTorch tf.distribute
TensorFlow Sie können sich dafür entscheiden, diese verteilten Schulungs-Frameworks in den SageMaker KI-verwalteten Framework-Containern auszuführen. Der Beispielcode für das Training von MaskRCNN in SageMaker KI zeigt beispielsweise, wie sowohl PyTorch DDP im KI-Framework-Containerals auch Horovod SageMaker im PyTorch Framework-Container verwendet werden. SageMaker TensorFlow
SageMaker In AI ML-Containern ist MPI auch vorinstalliert, sodass Sie Ihr Einstiegspunktskript mit mpi4py
Hinweise für das Training datenparalleler neuronaler Netzwerke am GPUs
-
Skalieren Sie gegebenenfalls auf Parallelität mit mehreren GPUs und mehreren Computern
Wir führen häufig Trainingsjobs für neuronale Netzwerke auf Instances mit mehreren CPUs oder mehreren GPUs durch. Jede GPU-basierte Instance enthält normalerweise mehrere GPU-Geräte. Folglich kann verteiltes GPU-Computing entweder innerhalb einer einzelnen GPU-Instanz mit mehreren GPUs (Einzelknoten-Multi-GPU-Training) oder über mehrere GPU-Instanzen mit jeweils mehreren GPU-Kernen (Multi-GPU-Training mit mehreren Knoten) erfolgen. Das Schreiben und Debuggen von Einzelinstanzen ist einfacher, Code zu schreiben und zu debuggen, und der Durchsatz innerhalb der Knoten ist normalerweise schneller als der GPU-to-GPU Durchsatz zwischen den Knoten. GPU-to-GPU Daher ist es eine gute Idee, die Datenparallelität zunächst vertikal zu skalieren (verwenden Sie eine GPU-Instanz mit mehreren GPUs) und bei Bedarf auf mehrere GPU-Instanzen zu erweitern. Dies gilt möglicherweise nicht für Fälle, in denen das CPU-Budget hoch ist (z. B. eine enorme Arbeitslast für die Datenvorverarbeitung) und wenn das CPU-to-GPU Verhältnis einer Multi-GPU-Instanz zu niedrig ist. In allen Fällen müssen Sie mit verschiedenen Kombinationen von Instance-Typen experimentieren, die auf Ihren eigenen ML-Trainingsanforderungen und Ihres Workloads basieren.
-
Überwachen Sie die Qualität der Konvergenz
Wenn ein neuronales Netzwerk mit Datenparallelität trainiert wird, führt die Erhöhung der Anzahl von GPUs bei gleichbleibender Mini-Batch-Größe pro GPU zu einer Erhöhung der Größe des globalen Mini-Batches für den Mini-Batch-Prozess mit stochastischem Gradientenabstieg (MSGD). Es ist bekannt, dass sich die Größe der Mini-Batches für MSGD auf das Abstiegsgeräusch und die Konvergenz auswirkt. Für eine korrekte Skalierung unter Beibehaltung der Genauigkeit müssen Sie andere Hyperparameter wie die Lernrate anpassen [Goyal et al.
(2017). -
Überwachen von E/A-MerkMALEN
Wenn Sie die Anzahl der erhöhen, sollte auch der Durchsatz für den GPUs Lese- und Schreibspeicher steigen. Stellen Sie sicher, dass Ihre Datenquelle und Pipeline nicht zu Engpässen führen.
-
Ändern Sie Ihr Trainingsskript nach Bedarf
Trainingsskripte, die für das Training mit einer GPU geschrieben wurden, müssen für das Training mit mehreren Knoten und mehreren GPUs geändert werden. In den meisten Datenparallelitätsbibliotheken ist eine Änderung des Skripts erforderlich, um Folgendes zu erreichen.
-
Weisen Sie jeder GPU Stapel von Trainingsdaten zu.
-
Verwenden Sie einen Optimierer, der Gradientenberechnungen und Parameteraktualisierungen über mehrere hinweg verarbeiten kann. GPUs
-
Weisen Sie einem bestimmten Host und einer bestimmten GPU die Verantwortung für das Checkpointing zu.
-
Wenn Ihr ML-Code tabellarische Datenverarbeitung beinhaltet
PySpark ist ein Python-Frontend von Apache Spark, einem Open-Source-Framework für verteilte Datenverarbeitung. PySpark wurde weithin für die verteilte tabellarische Datenverarbeitung für umfangreiche Produktionsworkloads eingesetzt. Wenn Sie tabellarischen Datenverarbeitungscode ausführen möchten, sollten Sie die SageMaker PySpark Verarbeitungscontainer verwenden und parallel Jobs ausführen. Mithilfe von SageMaker Training and Processing in Amazon SageMaker Studio Classic, das APIs in Amazon EMR
Option 3: Schreiben Sie Ihren eigenen benutzerdefinierten verteilten Trainingscode
Wenn Sie einen Schulungs- oder Verarbeitungsjob bei SageMaker AI einreichen, APIs starten SageMaker Training and SageMaker AI Processing EC2 Amazon-Compute-Instances. Sie können die Schulungs- und Verarbeitungsumgebung in den Instances anpassen, indem Sie Ihren eigenen Docker-Container ausführen oder zusätzliche Bibliotheken in den AWS verwalteten Containern installieren. Weitere Informationen zu Docker with SageMaker Training finden Sie unter Anpassen Ihres eigenen Docker-Containers an die Arbeit mit SageMaker KI und Erstellen Sie einen Container mit Ihren eigenen Algorithmen und Modellen. Weitere Informationen zu Docker mit SageMaker KI-Verarbeitung finden Sie unter Verwenden Sie Ihren eigenen Verarbeitungscode.
Jede SageMaker Trainings-Job-Umgebung enthält eine Konfigurationsdatei unter/opt/ml/input/config/resourceconfig.json
, und jede SageMaker Processing-Job-Umgebung enthält eine ähnliche Konfigurationsdatei unter/opt/ml/config/resourceconfig.json
. Ihr Code kann diese Datei lesen, um die Kommunikation zwischen den Knoten und hostnames
zu finden und herzustellen. Weitere Informationen, einschließlich des Schemas der JSON-Datei, finden Sie unter Distributed Training Configuration und How Amazon SageMaker Processing Configure Your Processing Container. Sie können auch Distributed-Computing-Bibliotheken von Drittanbietern wie Ray
Sie können SageMaker Training and SageMaker Processing auch verwenden, um benutzerdefinierte verteilte Berechnungen auszuführen, für die keine Kommunikation zwischen Mitarbeitern erforderlich ist. In der Computerliteratur werden diese Aufgaben oft als peinlich parallel oder ohne gemeinsame Nutzung beschrieben. Beispiele hierfür sind die parallel Verarbeitung von Datendateien, das parallel Training von Modellen in verschiedenen Konfigurationen oder das Ausführen von Batch-Inferenzen für eine Sammlung von Datensätzen. Sie können solche Share-Nothing-Anwendungsfälle trivial mit Amazon AI parallelisieren. SageMaker Wenn Sie einen SageMaker Trainings- oder SageMaker Verarbeitungsjob auf einem Cluster mit mehreren Knoten starten, repliziert SageMaker KI standardmäßig Ihren Trainingscode (in Python oder Docker) und startet ihn auf allen Knoten. Aufgaben, die eine zufällige Verteilung der Eingabedaten über so viele Knoten erfordern, können erleichtert werden, indem S3DataDistributionType=ShardedByS3Key
die Dateneingabekonfiguration der SageMaker TrainingInput
KI-API festgelegt wird.
Option 4: Starten Sie mehrere Jobs parallel oder nacheinander
Sie können einen ML-Berechnungsworkflow auch in kleinere parallel oder sequentielle Rechenaufgaben aufteilen, die jeweils durch einen eigenen SageMaker Trainings- oder SageMaker Verarbeitungsjob repräsentiert werden. Das Aufteilen einer Aufgabe in mehrere Jobs kann in den folgenden Situationen oder Aufgaben von Vorteil sein:
-
Wenn Sie über spezifische Datenkanäle und Metadateneinträge (wie Hyperparameter, Modellkonfiguration oder Instance-Typen) für jede Unteraufgabe verfügen.
-
Wenn Sie Wiederholungsschritte auf Unteraufgabenebene implementieren.
-
Wenn Sie die Konfiguration der Unteraufgaben im Laufe der Workload variieren, z. B. beim Training für steigende Batchgrößen.
-
Wenn Sie eine ML-Aufgabe ausführen müssen, die länger dauert als die maximal zulässige Trainingszeit für einen einzelnen Trainingsjob (maximal 28 Tage).
-
Wenn für verschiedene Schritte eines Rechen-Workflows unterschiedliche Instance-Typen erforderlich sind.
Verwenden Sie für den speziellen Fall der Hyperparametersuche SageMaker AI Automated Model Tuning. SageMaker AI Automated Model Tuning ist ein serverloser Orchestrator für die Parametersuche, der in Ihrem Namen mehrere Trainingsjobs startet. Dabei wird eine Suchlogik verwendet, die zufällig, Bayes'sch oder. HyperBand
Darüber hinaus können Sie zur Orchestrierung mehrerer Schulungsaufgaben auch Tools zur Workflow-Orchestrierung wie SageMaker Pipelines