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.
Trainieren Sie mit einem heterogenen Cluster
Mit dem heterogenen Cluster-Feature SageMaker Training können Sie einen Trainingsauftrag mit mehreren Arten von ML-Instances ausführen, um eine bessere Ressourcenskalierung und -auslastung für verschiedene ML-Trainingsaufgaben und -zwecke zu erzielen. Wenn bei Ihrem Trainingsauftrag auf einem Cluster mit GPU-Instances beispielsweise eine geringe GPU-Auslastung und CPU-Engpässe aufgrund von CPU-intensiven Aufgaben auftreten, kann die Verwendung eines heterogenen Clusters dazu beitragen, CPU-intensive Aufgaben auszulagern, indem kostengünstigere CPU-Instanzgruppen hinzugefügt, solche Engpässe behoben und eine bessere GPU-Auslastung erreicht werden.
Anmerkung
Diese Funktion ist im SageMaker Python SDK v2.98.0 und höher verfügbar.
Anmerkung
Diese Funktion ist über die SageMaker PyTorch
Themen
Wie konfiguriert man einen heterogenen Cluster
Dieser Abschnitt enthält Anweisungen zum Ausführen eines Trainingsauftrags mit einem heterogenen Cluster, der aus mehreren Instance-Typen besteht.
Verwenden des SageMaker Python SDK
Folgen Sie den Anweisungen zum Konfigurieren von Instance-Gruppen für einen heterogenen Cluster mit dem SageMaker Python-SDK.
-
Verwenden Sie die
sagemaker.instance_group.InstanceGroup
Klasse, um Instanzgruppen eines heterogenen Clusters für einen Trainingsauftrages zu konfigurieren. Sie können für jede Instance-Gruppe einen benutzerdefinierten Namen, den Instance-Typ und die Anzahl der Instances für jede Instance-Gruppe angeben. Weitere Informationen finden Sie unter sagemaker.instance_group inInstanceGroupder SageMaker Python-SDK-Dokumentation. Anmerkung
Weitere Informationen zu verfügbaren Instance-Typen und zur maximalen Anzahl von Instance-Gruppen, die Sie in einem heterogenen Cluster konfigurieren können, finden Sie in der InstanceGroup -API-Referenz.
Das folgende Codebeispiel zeigt, wie Sie zwei Instance-Gruppen einrichten, die aus zwei
ml.c5.18xlarge
reinen CPU-Instanzen mit Nameninstance_group_1
und einer benanntenml.p3dn.24xlarge
GPU-Instanz besteheninstance_group_2
, wie im folgenden Diagramm dargestellt.from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup( "
instance_group_1
", "ml.c5.18xlarge
",2
) instance_group_2 = InstanceGroup( "instance_group_2
", "ml.p3dn.24xlarge
",1
) -
Richten Sie mithilfe der Instance-Gruppenobjekte Trainingseingabekanäle ein und weisen Sie den Kanälen über das Argument der Klasse sagemaker.inputsTrainingInput
Instance instance_group_names
-Gruppen zu. Dasinstance_group_names
Argument akzeptiert eine Liste von Strings mit Instance-Gruppennamen.Das folgende Beispiel zeigt, wie zwei Trainingseingangskanäle eingerichtet und die im Beispiel des vorherigen Schritts erstellten Instance-Gruppen zugewiesen werden. Sie können auch Amazon S3-Bucket-Pfade für das
s3_data
Argument angeben, damit die Instance-Gruppen Daten für Ihre Verwendungszwecke verarbeiten.from sagemaker.inputs import TrainingInput training_input_channel_1 = TrainingInput( s3_data_type='
S3Prefix
', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile s3_data='s3://your-training-data-storage/folder1
', distribution='FullyReplicated
', # Available Options: FullyReplicated | ShardedByS3Key input_mode='File
', # Available Options: File | Pipe | FastFile instance_groups=["instance_group_1
"] ) training_input_channel_2 = TrainingInput( s3_data_type='S3Prefix
', s3_data='s3://your-training-data-storage/folder2
', distribution='FullyReplicated
', input_mode='File
', instance_groups=["instance_group_2
"] )Weitere Informationen zu den Argumenten von
TrainingInput
, finden Sie unter den folgenden Links.-
Die Klasse sagemaker.inputs.TrainingInput
in der SageMaker Python-SDK-Dokumentation -
Die S3DataSource-API in der SageMaker API-Referenz zu
-
-
Konfigurieren Sie einen SageMaker Schätzer mit dem Argument
instance_groups
, wie im folgenden Codebeispiel gezeigt. Dasinstance_groups
Argument akzeptiert eine Liste vonInstanceGroup
Objekten.Anmerkung
Das
instance_count
Argumentpaarinstance_type
und und dasinstance_groups
Argument der SageMaker Schätzerklasse schließen sich gegenseitig aus. Verwenden Sie für ein homogenes Clustertschulung das Argumentpaarinstance_type
undinstance_count
. Verwenden Sieinstance_groups
für heterogenes Clusterschulung.Anmerkung
Eine vollständige Liste der verfügbaren Framework-Container, Framework-Versionen und Python-Versionen finden Sie unter SageMaker Framework-Container
im AWS Deep Learning Container- GitHub Repository. -
Konfigurieren Sie die
estimator.fit
Methode mit den Schulungseingabekanälen, die mit den Instance-Gruppen konfiguriert sind, und starten Sie den Schulungsaufträge.estimator.fit( inputs={ 'training':
training_input_channel_1
, 'dummy-input-channel
':training_input_channel_2
} )
Verwenden der Low-Level SageMaker-APIs
Wenn Sie die AWS Command Line Interface oder verwenden AWS SDK for Python (Boto3) und Low-Level- SageMaker APIs zum Senden einer Trainingsauftragsanforderung mit einem heterogenen Cluster verwenden möchten, lesen Sie die folgenden API-Referenzen.
Verteilte Schulung mit einem heterogenen Cluster
Über das distribution
Argument der SageMaker Schätzerklasse können Sie eine bestimmte Instance-Gruppe zuweisen, um verteiltes Training durchzuführen. Nehmen wir beispielsweise an, dass Sie über die folgenden zwei Instance-Gruppe verfügen und für eine davon ein Multi-GPU-Schulung durchführen möchten.
from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup("instance_group_1", "ml.c5.18xlarge", 1) instance_group_2 = InstanceGroup("instance_group_2", "ml.p3dn.24xlarge", 2)
Sie können die verteilte Schulungskonfiguration für eine der Instance-Gruppen festlegen. Die folgenden Codebeispiele zeigen beispielsweise, wie training_group_2
mit zwei ml.p3dn.24xlarge
Instanzen der verteilten Trainingskonfiguration zugewiesen wird.
Anmerkung
Derzeit kann nur eine Instance-Gruppe eines heterogenen Clusters für die Verteilungskonfiguration angegeben werden.
Mit MPI
Mit der SageMaker Datenparallelbibliothek
Anmerkung
Wenn Sie die SageMaker datenparallele Bibliothek verwenden, stellen Sie sicher, dass die Instance-Gruppe aus den von der Bibliothek unterstützten Instance-Typen besteht.
Weitere Informationen zur SageMaker Datenparallelbibliothek finden Sie unter SageMaker Datenparalleltraining.
Mit der SageMaker Modellparallelbibliothek
Weitere Informationen zur SageMaker Modellparallelbibliothek finden Sie unter SageMaker Modellparalleltraining.
Ändern Sie Ihr Schulungsskript, um Instance-Gruppen zuzuweisen
Mit der heterogenen Clusterkonfiguration in den vorherigen Abschnitten haben Sie die SageMaker Trainingsumgebung und die Instances für Ihren Trainingsauftrag vorbereitet. Um die Instance-Gruppen weiter bestimmten Schulung- und Datenverarbeitungsaufgaben zuzuweisen, müssen Sie im nächsten Schritt Ihr Schulungsskript ändern. Standardmäßig erstellt der Schulungsauftrag einfach Schulungsskriptreplikate für alle Knoten, unabhängig von der Größe der Instance, was zu Leistungsverlusten führen kann.
Wenn Sie beispielsweise CPU-Instances und GPU-Instances in einem heterogenen Cluster mischen und dabei ein tiefes neuronales Netzwerktrainingsskript an das Argument des SageMaker Schätzers übergeben, wird das entry_point
entry_point
Skript auf jede Instance repliziert. Das bedeutet, dass CPU-Instances ohne korrekte Aufgabenzuweisungen auch das gesamte Skript ausführen und den Schulungsauftrag starten, der für verteilte Schulung auf GPU-Instances konzipiert ist. Daher müssen Sie Änderungen an bestimmten Verarbeitungsfunktionen vornehmen, die Sie auslagern und auf den CPU-Instances ausführen möchten. Sie können die SageMaker Umgebungsvariablen verwenden, um die Informationen des heterogenen Clusters abzurufen und bestimmte Prozesse entsprechend ausführen zu lassen.
Abfragen von Instance-Gruppeninformationen während der Initialisierungsphase eines SageMaker Trainingsauftrags
Wenn Ihr Trainingsauftrag beginnt, liest Ihr Trainingsskript Informationen zur SageMaker Trainingsumgebung, die eine heterogene Clusterkonfiguration beinhalten. Die Konfiguration enthält Informationen wie die aktuellen Instance-Gruppe, die aktuellen Hosts in jeder Gruppe und die Gruppe, in der sich der aktuelle Host befindet.
Sie können Instance-Gruppeninformationen wie folgt abrufen.
(Empfohlen) Lesen von Instance-Gruppeninformationen mit dem SageMaker Trainings-Toolkit
Verwenden Sie das Python-Umgebungsmodul, das die SageMaker Trainings-Toolkit-Bibliothek
from sagemaker_training import environment env = environment.Environment()
Umgebungsvariablen im Zusammenhang mit allgemeinem SageMaker Training und heterogenen Clustern:
-
env.is_hetero
— Gibt ein boolesches Ergebnis zurück, unabhängig davon, ob ein heterogener Cluster konfiguriert ist oder nicht. -
env.current_host
— Gibt den aktuellen Host zurück. -
env.current_instance_type
— Gibt den Instance-Typ des aktuellen Hosts zurück. -
env.current_instance_group
— Gibt den Namen der aktuellen Instance-Gruppe zurück. -
env.current_instance_group_hosts
— Gibt eine Liste der Hosts in der aktuellen Instance-Gruppe zurück. -
env.instance_groups
— Gibt eine Liste von Instance-Gruppennamen zurück, die für die Schulung verwendet werden. -
env.instance_groups_dict
— Gibt die gesamte heterogene Clusterkonfiguration des Schulungsauftrages zurück. -
env.distribution_instance_groups
– Gibt eine Liste der Instance-Gruppen zurück, die demdistribution
Parameter der SageMaker Schätzerklasse zugewiesen sind. -
env.distribution_hosts
– Gibt eine Liste der Hosts zurück, die zu den Instance-Gruppen gehören, die demdistribution
Parameter der SageMaker Schätzerklasse zugewiesen sind.
Betrachten Sie zum Beispiel das folgende Beispiel für einen heterogenen Cluster, der aus zwei Instance-Gruppen besteht.
from sagemaker.instance_group import InstanceGroup instance_group_1 = InstanceGroup( "instance_group_1", "ml.c5.18xlarge", 1) instance_group_2 = InstanceGroup( "instance_group_2", "ml.p3dn.24xlarge", 2)
Die Ausgabe des env.instance_groups_dict
heterogenen Beispielclusters sollte folgendermaßen oder ähnlich aussehen.
{ "instance_group_1": { "hosts": [ "algo-2" ], "instance_group_name": "instance_group_1", "instance_type": "ml.c5.18xlarge" }, "instance_group_2": { "hosts": [ "algo-3", "algo-1" ], "instance_group_name": "instance_group_2", "instance_type": "ml.p3dn.24xlarge" } }
(Optional) Lesen von Instace-Gruppeninformationen aus der JSON-Datei mit der Ressourcenkonfiguration
Wenn Sie die Umgebungsvariablen lieber im JSON-Format abrufen möchten, können Sie die JSON-Datei für die Ressourcenkonfiguration direkt verwenden. Die JSON-Datei in einer SageMaker Trainings-Instance befindet sich /opt/ml/input/config/resourceconfig.json
standardmäßig unter .
file_path = '/opt/ml/input/config/resourceconfig.json' config = read_file_as_json(file_path) print(json.dumps(config, indent=4, sort_keys=True))
Überlegungen
Beachten Sie die folgenden Elemente, wenn Sie die Funktion für heterogene Cluster verwenden.
-
Alle Instance-Gruppen verwenden dasselbe Docker-Image und dasselbe Schulungsskript. Daher sollte Ihr Schulungsskript so geändert werden, dass erkannt wird, zu welcher Instance-Gruppe es gehört, und die Ausführung entsprechend aufgeteilt werden.
-
Das heterogene Cluster-Feature wird im SageMaker lokalen Modus nicht unterstützt.
-
Die Amazon- CloudWatch Protokollstreams eines heterogenen Cluster-Trainingsauftrags sind nicht nach Instance-Gruppen gruppiert. Sie müssen anhand der Protokolle herausfinden, welche Knoten zu welcher Gruppe gehören.
-
Das heterogene Cluster-Feature ist über die SageMaker PyTorch
TensorFlow Framework-Schätzerklassen und verfügbar. Unterstützte Frameworks sind PyTorch v1.10 oder höher und TensorFlow v2.6 oder höher. Eine vollständige Liste der verfügbaren Framework-Container, Framework-Versionen und Python-Versionen finden Sie unter SageMaker Framework-Container im AWS Deep Learning Container- GitHub Repository. -
Eine verteilte Schulungsstrategie kann nur auf eine Instance-Gruppe angewendet werden.
Beispiele, Blogs und Fallstudien
Der folgende Blog behandelt Fallstudien zur Verwendung des SageMaker heterogenen Clustertrainings.