Konfigurieren eines Trainingsjobs mit einem heterogenen Cluster in Amazon SageMaker AI - Amazon SageMaker KI

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.

Konfigurieren eines Trainingsjobs mit einem heterogenen Cluster in Amazon SageMaker AI

Dieser Abschnitt enthält Anweisungen zum Ausführen eines Trainingsauftrags mit einem heterogenen Cluster, der aus mehreren Instance-Typen besteht.

Bevor Sie beginnen, beachten Sie Folgendes.

  • Alle Instance-Gruppen verwenden dasselbe Docker-Image und dasselbe Trainingsskript. Daher sollte Ihr Trainingsskript so geändert werden, dass erkannt wird, zu welcher Instance-Gruppe es gehört, und die Ausführung entsprechend aufgeteilt werden.

  • Die Funktion für heterogene Cluster ist mit dem lokalen Modus von SageMaker AI nicht kompatibel.

  • Die Amazon CloudWatch-Protokollstreams eines heterogenen Cluster-Trainingsauftrages sind nicht nach Instance-Gruppen gruppiert. Sie müssen anhand der Protokolle herausfinden, welche Knoten zu welcher Gruppe gehören.

Option 1: Verwendung des SageMaker Python SDK

Folgen Sie den Anweisungen zur Konfiguration von Instance-Gruppen für einen heterogenen Cluster mithilfe des SageMaker Python SDK.

  1. Verwenden Sie die sagemaker.instance_group.InstanceGroup Klasse, um Instance-Gruppen 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.InstanceGroup in der Dokumentation zum SageMaker AI Python SDK.

    Anmerkung

    Weitere Informationen zu verfügbaren Instance-Typen und der 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-Instances mit Namen instance_group_1 und einer benannten ml.p3dn.24xlarge GPU-Instance bestehen instance_group_2, wie im folgenden Diagramm dargestellt.

    Ein konzeptionelles Beispiel dafür, wie Daten in SageMaker-Trainingsjob zugewiesen werden können

    Das obige Diagramm zeigt ein konzeptionelles Beispiel dafür, wie Prozesse vor dem Training, wie z. B. die Datenvorverarbeitung, der CPU-Instance-Gruppe zugewiesen und die vorverarbeiteten Daten an die GPU-Instance-Gruppe gestreamt werden können.

    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 )
  2. Richten Sie mit Hilfe der Instance-Gruppenobjekte Trainingseingangskanäle ein und weisen Sie den Kanälen über das instance_group_names-Argument der Klasse sagemaker.inputs.TrainingInput Instance-Gruppen zu. Das instance_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.

  3. Konfigurieren Sie einen SageMaker-AI-Schätzer mit dem instance_groups-Argument, wie im folgenden Codebeispiel gezeigt. Das instance_groups-Argument akzeptiert eine Liste von InstanceGroup-Objekten.

    Anmerkung

    Diese Funktion ist über die Framework-Schätzerklassen PyTorch und TensorFlow von SageMaker AI 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 AI Framework Containers im GitHub-Repository für Deep-Learning-Container von AWS.

    PyTorch
    from sagemaker.pytorch import PyTorch estimator = PyTorch( ... entry_point='my-training-script.py', framework_version='x.y.z', # 1.10.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    TensorFlow
    from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... entry_point='my-training-script.py', framework_version='x.y.z', # 2.6.0 or later py_version='pyxy', job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    Anmerkung

    Das Argumentpaar instance_type und instance_count und das instance_groups-Argument der SageMaker-AI-Schätzerklasse schließen sich gegenseitig aus. Verwenden Sie für ein homogenes Clusterttraining das Argumentpaar instance_type und instance_count. Verwenden Sie instance_groups für heterogenes Clustertraining.

    Anmerkung

    Eine vollständige Liste der verfügbaren Framework-Container, Framework-Versionen und Python-Versionen finden Sie unter SageMaker AI Framework Containers im GitHub-Repository für Deep-Learning-Container von AWS.

  4. Konfigurieren Sie die estimator.fit Methode mit den Trainingseingabekanälen, die mit den Instance-Gruppen konfiguriert sind, und starten Sie den Trainingsaufträge.

    estimator.fit( inputs={ 'training': training_input_channel_1, 'dummy-input-channel': training_input_channel_2 } )

Option 2: Verwendung der SageMaker-APIs auf niedriger Ebene

Wenn Sie das AWS Command Line Interface oder AWS SDK für Python (Boto3) verwenden und SageMaker-APIs auf niedriger Ebene verwenden möchten, um eine Trainingsanfrage mit einem heterogenen Cluster einzureichen, finden Sie weitere Informationen in den folgenden API-Referenzen.