View a markdown version of this page

Konfigurieren Sie einen Trainingsjob mit einem heterogenen Cluster in Amazon AI SageMaker - 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 Sie einen Trainingsjob mit einem heterogenen Cluster in Amazon AI SageMaker

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 nicht mit dem lokalen SageMaker KI-Modus kompatibel.

  • Die CloudWatch Amazon-Log-Streams eines heterogenen Cluster-Trainingsjobs sind nicht nach Instanzgruppen gruppiert. Sie müssen anhand der Protokolle herausfinden, welche Knoten zu welcher Gruppe gehören.

Option 1: Verwenden des SageMaker Python-SDK

Folgen Sie den Anweisungen zur Konfiguration von Instanzgruppen 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. InstanceGroupin der AI-Python-SDK-Dokumentation. SageMaker

    Anmerkung

    Weitere Informationen zu verfügbaren Instanztypen und der maximalen Anzahl von Instanzgruppen, die Sie in einem heterogenen Cluster konfigurieren können, finden Sie in der InstanceGroup API-Referenz.

    Das folgende Codebeispiel zeigt, wie zwei Instanzgruppen eingerichtet werden, die aus zwei benannten ml.c5.18xlarge CPU-only Instanzen instance_group_1 und einer benannten ml.p3dn.24xlarge GPU-Instanz besteheninstance_group_2, wie in der folgenden Abbildung dargestellt.

    Ein konzeptionelles Beispiel dafür, wie Daten in SageMaker Training Job 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 mithilfe der Instanzgruppenobjekte die Eingabekanäle für das Training ein und weisen Sie den Kanälen mithilfe des instance_group_names Arguments Instanzgruppen 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 die Instanzgruppen angeben, um Daten für Ihre Nutzungszwecke zu verarbeiten.

    from sagemaker.train.configs import InputData from sagemaker.core.shapes import Channel, DataSource, S3DataSource training_input_channel_1 = Channel( channel_name='training', data_source=DataSource( s3_data_source=S3DataSource( s3_data_type='S3Prefix', s3_uri='s3://your-training-data-storage/folder1', s3_data_distribution_type='FullyReplicated', # Available Options: FullyReplicated | ShardedByS3Key instance_group_names=["instance_group_1"], ) ), input_mode='File', # Available Options: File | Pipe | FastFile ) training_input_channel_2 = Channel( channel_name='dummy-input-channel', data_source=DataSource( s3_data_source=S3DataSource( s3_data_type='S3Prefix', s3_uri='s3://your-training-data-storage/folder2', s3_data_distribution_type='FullyReplicated', instance_group_names=["instance_group_2"], ) ), input_mode='File', )

    Weitere Informationen zu den Argumenten von InputData, finden Sie unter den folgenden Links.

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

    Anmerkung

    Die Funktion für heterogene Cluster ist über die SageMaker KI PyTorch und die TensorFlow ModelTrainer Klassen 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-Container im AWS GitHub Deep-Learning-Container-Repository.

    PyTorch

    from sagemaker.train import ModelTrainer from sagemaker.train.configs import SourceCode from sagemaker.core import image_uris training_image = image_uris.retrieve( framework="pytorch", region=region, version='x.y.z', # 1.10.0 or later py_version='pyxy', instance_type='ml.p3dn.24xlarge', image_scope="training" ) model_trainer = ModelTrainer( ... source_code=SourceCode(entry_script='my-training-script.py'), training_image=training_image, job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )

    TensorFlow

    from sagemaker.train import ModelTrainer from sagemaker.train.configs import SourceCode from sagemaker.core import image_uris training_image = image_uris.retrieve( framework="tensorflow", region=region, version='x.y.z', # 2.6.0 or later py_version='pyxy', instance_type='ml.p3dn.24xlarge', image_scope="training" ) model_trainer = ModelTrainer( ... source_code=SourceCode(entry_script='my-training-script.py'), training_image=training_image, job_name='my-training-job-with-heterogeneous-cluster', instance_groups=[instance_group_1, instance_group_2] )
    Anmerkung

    Das instance_type instance_count Argumentpaar und das instance_groups Argument der SageMaker ModelTrainer AI-Klasse 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-Container im AWS GitHub Deep-Learning-Container-Repository.

  4. Starten Sie den Trainingsjob mit den Trainingseingabekanälen, die mit den Instanzgruppen konfiguriert wurden.

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

Option 2: Verwenden der Low-Level-APIs SageMaker

Wenn Sie AWS Command Line Interface oder verwenden AWS SDK für Python (Boto3) und SageMaker Low-Level-APIs verwenden möchten, um eine Anfrage für einen Schulungsauftrag mit einem heterogenen Cluster einzureichen, lesen Sie die folgenden API-Referenzen.