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 PyTorch
Argomenti
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
-
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 denominateinstance_group_1
e un'ml.p3dn.24xlarge
GPUistanza denominatainstance_group_2
, come illustrato nel diagramma seguente.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
) -
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.-
Il sagemaker.inputs. TrainingInput
classe nella documentazione di SageMaker Python SDK -
La S3 DataSource API nel Reference SageMaker API
-
-
Configura uno SageMaker stimatore con l'
instance_groups
argomento come mostrato nel seguente esempio di codice. L’argomentoinstance_groups
accetta un elenco di oggettiInstanceGroup
.Nota
La
instance_type
coppia diinstance_count
argomenti e l'instance_groups
argomento della classe SageMaker estimator si escludono a vicenda. Per un addestramento omogeneo dei cluster, utilizza la coppia di argomentiinstance_type
einstance_count
. Per un addestramento eterogeneo su cluster, usainstance_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 . -
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'distribution
argomento 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
Con la libreria SageMaker data parallel
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
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_point
argomento 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
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 aldistribution
parametro della classe estimator. SageMaker -
env.distribution_hosts
— Restituisce un elenco di host appartenenti ai gruppi di istanze assegnati aldistribution
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.