Configurare un job di addestramento con un cluster eterogeneo in Amazon SageMaker AI - Amazon SageMaker AI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurare un job di addestramento con un cluster eterogeneo in Amazon SageMaker AI

Questa sezione fornisce istruzioni su come eseguire un processo di addestramento utilizzando un cluster eterogeneo composto da più tipi di istanze.

Prima di iniziare, considera quanto segue.

  • Tutti i gruppi di istanze condividono la stessa immagine Docker e lo stesso script di addestramento. Pertanto, lo script di addestramento deve essere modificato per rilevare a quale gruppo di istanze appartiene e modificare di conseguenza l'esecuzione.

  • La funzionalità di cluster eterogeneo non è compatibile con la modalità locale di SageMaker AI.

  • I flussi di log di Amazon CloudWatch di un processo di addestramento su cluster eterogeneo non sono raggruppati per gruppi di istanze. È necessario capire dai log quali nodi si trovano in quale gruppo.

Opzione 1: utilizzo di SageMaker Python SDK

Segui le istruzioni su come configurare i gruppi di istanze per un cluster eterogeneo utilizzando SageMaker Python SDK.

  1. Per configurare i gruppi di istanze di un cluster eterogeneo per un processo di addestramento, usa la classe sagemaker.instance_group.InstanceGroup. Puoi specificare un nome personalizzato per ogni gruppo di istanze, il tipo di istanze e il numero di istanze per ogni gruppo di istanze. Per ulteriori informazioni, consulta sagemaker.instance_group.InstanceGroup nella documentazione di SageMaker AI Python SDK.

    Nota

    Per ulteriori informazioni sui tipi di istanze disponibili e sul numero massimo di gruppi di istanze che è possibile configurare in un cluster eterogeneo, consulta il riferimento all'API InstanceGroup.

    Il seguente esempio di codice mostra come impostare due gruppi di istanze composti da due istanze denominate solo CPU ml.c5.18xlarge denominate instance_group_1 e un’istanza GPU ml.p3dn.24xlarge denominata instance_group_2, come illustrato nel diagramma seguente.

    Un esempio concettuale di come i dati possono essere assegnati in un job di addestramento SageMaker.

    Il diagramma precedente mostra un esempio concettuale di come i processi di preaddestramento, come la pre-elaborazione dei dati, possono essere assegnati al gruppo di istanze della CPU e trasmettere i dati pre-elaborati in streaming al gruppo di istanze della GPU.

    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. Utilizzando gli oggetti del gruppo di istanze, imposta i canali di input di addestramento e assegna i gruppi di istanze ai canali tramite l'argomento instance_group_names della classe SageMaker.Inputs.TrainingInput. L'argomento instance_group_names accetta un elenco di stringhe di nomi di gruppi di istanze.

    L'esempio seguente mostra come impostare due canali di input di addestramento e assegnare i gruppi di istanze creati nell'esempio della fase precedente. Puoi anche specificare i percorsi dei bucket di Amazon S3 all'argomento s3_data affinché i gruppi di istanze elaborino i dati per i tuoi scopi di utilizzo.

    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"] )

    Per ulteriori informazioni sugli argomenti di TrainingInput, consulta i seguenti link.

  3. Configura uno strumento di stima di SageMaker AI con l’argomento instance_groups come mostrato nel seguente esempio di codice. L’argomento instance_groups accetta un elenco di oggetti InstanceGroup.

    Nota

    La funzionalità di cluster eterogeneo è disponibile tramite le classi degli strumenti di stima del framework PyTorch e TensorFlow di SageMaker AI. I framework supportati sono PyTorch v1.10 o successivo e TensorFlow v2.6 o successivo. Per trovare un elenco completo dei container framework, delle versioni del framework e delle versioni Python disponibili, consulta SageMaker AI Framework Containers nel repository GitHub dei Container AWS per il Deep Learning.

    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] )
    Nota

    La coppia di argomenti instance_type e instance_count e l’argomento instance_groups della classe dello strumento di stima di SageMaker AI si escludono a vicenda. Per un addestramento omogeneo dei cluster, utilizza la coppia di argomenti instance_type e instance_count. Per un addestramento eterogeneo su cluster, usa instance_groups.

    Nota

    Per trovare un elenco completo dei container framework, delle versioni del framework e delle versioni Python disponibili, consulta SageMaker AI Framework Containers nel repository GitHub dei Container AWS per il Deep Learning.

  4. Configura il metodo estimator.fit con i canali di input di addestramento configurati con i gruppi di istanze e avvia il processo di addestramento.

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

Opzione 2: utilizzo delle API SageMaker di basso livello

Se utilizzi AWS Command Line Interface o AWS SDK per Python (Boto3) e desideri utilizzare le API SageMaker di basso livello per inviare una richiesta di processo di addestramento con un cluster eterogeneo, consulta i seguenti riferimenti API.