Addestramento utilizzando un cluster eterogeneo - Amazon SageMaker

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à.

Addestramento utilizzando un cluster eterogeneo

Utilizzando la funzionalità di cluster eterogeneo di SageMaker Training, puoi eseguire un processo di formazione con più tipi di istanze di machine learning per una migliore scalabilità e utilizzo delle risorse per diverse attività e scopi di formazione ML. Ad esempio, se il processo di formazione su un cluster con GPU istanze presenta problemi di basso GPU utilizzo e CPU rallentamenti a causa di attività che richiedono un uso CPU intensivo, l'utilizzo di un cluster eterogeneo può contribuire a ridurre il carico delle attività ad CPU alta intensità aggiungendo gruppi di CPU istanze più convenienti, risolvere tali problemi e ottenere un GPU utilizzo migliore.

Nota

Questa funzionalità è disponibile in SageMaker Python SDK v2.98.0 e versioni successive.

Nota

Questa funzionalità è disponibile tramite le classi SageMaker PyTorche TensorFlowframework estimator. I framework supportati sono la versione PyTorch 1.10 o successiva e la versione 2.6 o successiva. TensorFlow

Come configurare un cluster eterogeneo

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

Usare SageMaker Python SDK

Segui le istruzioni su come configurare i gruppi di istanze per un cluster eterogeneo usando Python. SageMaker 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. InstanceGroupnella documentazione di SageMakerPython 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. InstanceGroupAPI

    Il seguente esempio di codice mostra come impostare due gruppi di istanze composti da due ml.c5.18xlarge CPU sole istanze denominate instance_group_1 e un'ml.p3dn.24xlargeGPUistanza denominatainstance_group_2, come illustrato nel diagramma seguente.

    Un esempio concettuale di come i dati possono essere assegnati in SageMaker Training Job.

    Il diagramma precedente mostra un esempio concettuale di come i processi di pre-addestramento, come la preelaborazione dei dati, possono essere assegnati al gruppo di istanze e trasmettere i dati preelaborati al gruppo di CPU istanze. 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, impostate i canali di input di addestramento e assegnate i gruppi di istanze ai canali tramite l'argomento di sagemaker.inputs. instance_group_names TrainingInputclasse. 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 SageMaker stimatore con l'instance_groupsargomento come mostrato nel seguente esempio di codice. L’argomento instance_groups accetta un elenco di oggetti InstanceGroup.

    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 instance_type coppia di instance_count argomenti e l'instance_groupsargomento della classe SageMaker estimator 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 contenitori del framework, delle versioni del framework e delle versioni Python disponibili, consulta SageMaker Framework Containers nel repository AWS Deep Learning Container GitHub .

  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 } )

Utilizzo del Low-Level SageMaker APIs

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

Addestramento distribuito con un cluster eterogeneo

Tramite l'distributionargomento della classe SageMaker estimator, è possibile assegnare un gruppo di istanze specifico per eseguire l'addestramento distribuito. Ad esempio, supponiamo di avere i seguenti due gruppi di istanze e di voler eseguire un GPU training multiplo su uno di essi.

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)

Puoi impostare la configurazione di addestramento distribuito per uno dei gruppi di istanze. Ad esempio, i seguenti esempi di codice mostrano come assegnare training_group_2 con due istanze ml.p3dn.24xlarge alla configurazione di addestramento distribuito.

Nota

Attualmente, è possibile specificare solo un gruppo di istanze di un cluster eterogeneo per la configurazione di distribuzione.

Con MPI

PyTorch
from sagemaker.pytorch import PyTorch estimator = PyTorch( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "mpi": { "enabled": True, "processes_per_host": 8 }, "instance_groups": [instance_group_2] } )
TensorFlow
from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "mpi": { "enabled": True, "processes_per_host": 8 }, "instance_groups": [instance_group_2] } )

Con la libreria SageMaker data parallel

PyTorch
from sagemaker.pytorch import PyTorch estimator = PyTorch( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "dataparallel": { "enabled": True } }, "instance_groups": [instance_group_2] } )
TensorFlow
from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "dataparallel": { "enabled": True } }, "instance_groups": [instance_group_2] } )
Nota

Quando usi la libreria SageMaker data parallel, assicurati che il gruppo di istanze sia composto dai tipi di istanze supportati dalla libreria.

Per ulteriori informazioni sulla libreria parallela di SageMaker dati, consulta SageMaker Data Parallel Training.

Con la libreria SageMaker model parallel

PyTorch
from sagemaker.pytorch import PyTorch estimator = PyTorch( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # SageMaker model parallel parameters } } }, "instance_groups": [instance_group_2] } )
TensorFlow
from sagemaker.tensorflow import TensorFlow estimator = TensorFlow( ... instance_groups=[instance_group_1, instance_group_2], distribution={ "smdistributed": { "modelparallel": { "enabled":True, "parameters": { ... # SageMaker model parallel parameters } } }, "instance_groups": [instance_group_2] } )

Per ulteriori informazioni sulla libreria parallela del SageMaker modello, vedere SageMaker Model Parallel Training.

Modifica lo script di addestramento per assegnare gruppi di istanze

Con la configurazione eterogenea del cluster illustrata nelle sezioni precedenti, avete preparato l'ambiente e le istanze di SageMaker formazione per il vostro lavoro di formazione. Per assegnare ulteriormente i gruppi di istanze a determinati processi di addestramento ed elaborazione dei dati, la fase successiva consiste nel modificare lo script di addestramento. Per impostazione predefinita, il processo di addestramento crea semplicemente repliche degli script di addestramento per tutti i nodi indipendentemente dalla dimensione dell'istanza, e ciò potrebbe comportare una perdita di prestazioni.

Ad esempio, se mescoli CPU istanze e GPU istanze in un cluster eterogeneo mentre passi uno script di addestramento della rete neurale profonda all'entry_pointargomento dello estimatore, lo script viene replicato su ogni istanza. SageMaker entry_point Ciò significa che, senza un'adeguata assegnazione delle attività, CPU le istanze eseguono anche l'intero script e avviano il processo di formazione progettato per la formazione distribuita sulle istanze. GPU Pertanto, è necessario apportare modifiche alle funzioni di elaborazione specifiche che si desidera scaricare ed eseguire sulle istanze. CPU È possibile utilizzare le variabili di SageMaker ambiente per recuperare le informazioni del cluster eterogeneo e consentire l'esecuzione di processi specifici di conseguenza.

Interroga le informazioni sul gruppo di istanze durante la fase di inizializzazione di un processo di formazione SageMaker

All'inizio del processo di formazione, lo script di formazione legge le informazioni sull'ambiente di SageMaker formazione che includono la configurazione eterogenea del cluster. La configurazione contiene informazioni come i gruppi di istanze correnti, gli host correnti di ciascun gruppo e in quale gruppo risiede l'host corrente.

Puoi recuperare informazioni sul gruppo di istanze nei modi seguenti.

(Consigliato) Leggere le informazioni sui gruppi di istanze con il toolkit di formazione SageMaker

Usa il modulo di ambiente Python fornito dalla libreria di toolkit SageMaker di formazione. La libreria del toolkit è preinstallata nei contenitori del SageMaker framework per TensorFlow and PyTorch, quindi non è necessaria una fase di installazione aggiuntiva quando si utilizzano i contenitori predefiniti. Questo è il metodo consigliato per recuperare le variabili di SageMaker ambiente con un minor numero di modifiche al codice nello script di addestramento.

from sagemaker_training import environment env = environment.Environment()

Variabili di ambiente relative alla SageMaker formazione generale e ai cluster eterogenei:

  • env.is_hetero— Restituisce un risultato booleano indipendentemente dal fatto che un cluster eterogeneo sia configurato o meno.

  • env.current_host— Restituisce l'host corrente.

  • env.current_instance_type— Restituisce il tipo di istanza dell'host corrente.

  • env.current_instance_group— Restituisce il nome del gruppo di istanze corrente.

  • env.current_instance_group_hosts— Restituisce un elenco di host nel gruppo di istanze corrente.

  • env.instance_groups— Restituisce un elenco di nomi di gruppi di istanze utilizzati per l'addestramento.

  • env.instance_groups_dict— Restituisce l'intera configurazione del cluster eterogeneo del processo di addestramento.

  • env.distribution_instance_groups— Restituisce un elenco di gruppi di istanze assegnati al distribution parametro della classe estimator. SageMaker

  • env.distribution_hosts— Restituisce un elenco di host appartenenti ai gruppi di istanze assegnati al distribution parametro della classe SageMaker estimator.

Ad esempio, si consideri il seguente esempio di cluster eterogeneo costituito da due gruppi di istanze.

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)

L'output di env.instance_groups_dict del cluster eterogeneo di esempio deve essere simile al seguente.

{ "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" } }

(Facoltativo) Lettura delle informazioni sul gruppo di istanze dal file di configurazione JSON delle risorse

Se si preferisce recuperare le variabili di ambiente in JSON formato, è possibile utilizzare direttamente il JSON file di configurazione delle risorse. Per impostazione predefinita, il JSON file in un'istanza di SageMaker formazione si trova /opt/ml/input/config/resourceconfig.json in.

file_path = '/opt/ml/input/config/resourceconfig.json' config = read_file_as_json(file_path) print(json.dumps(config, indent=4, sort_keys=True))

Considerazioni

Considera i seguenti elementi durante l'utilizzo della funzionalità di cluster eterogeneo.

  • 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 è supportata in SageMaker modalità locale.

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

  • La funzionalità di cluster eterogeneo è disponibile tramite le classi e framework estimator. SageMaker PyTorchTensorFlow I framework supportati sono la versione PyTorch 1.10 o successiva e la versione 2.6 o successiva. TensorFlow Per trovare un elenco completo dei contenitori del framework, delle versioni del framework e delle versioni Python disponibili, consulta SageMaker Framework Containers nel repository AWS Deep Learning Container GitHub .

  • Una strategia di addestramento distribuito può essere applicata solo a un gruppo di istanze.

Esempi, blog e casi di studio

Il seguente blog illustra i casi di studio sull'utilizzo della formazione su cluster SageMaker eterogenei.