Risoluzione dei problemi per l’addestramento distribuito in Amazon SageMaker AI - Amazon SageMaker AI

Risoluzione dei problemi per l’addestramento distribuito in Amazon SageMaker AI

Se hai problemi nell'esecuzione di un processo di addestramento quando usi la libreria, usa il seguente elenco per provare a risolvere il problema. Se hai bisogno di ulteriore supporto, contatta il team di SageMaker tramite Centro di supporto AWS o Forum per gli sviluppatori AWS per Amazon SageMaker AI.

Utilizzo di SageMaker AI Distributed Data Parallel con Amazon SageMaker Debugger e checkpoint

Per monitorare i colli di bottiglia del sistema, le operazioni del framework dei profili e il debug dei tensori di output del modello per i job di addestramento con la parallelizzazione dei dati distribuiti di SageMaker AI, utilizza Amazon SageMaker Debugger.

Tuttavia, quando utilizzi SageMaker Debugger, SageMaker AI Distribute Data Parallel e i checkpoint SageMaker AI, è possibile che venga visualizzato un errore simile a quello nel seguente esempio.

SMDebug Does Not Currently Support Distributed Training Jobs With Checkpointing Enabled

Ciò è dovuto a un errore interno tra Debugger e i checkpoint, che si verifica quando si abilita la parallelizzazione dei dati distribuiti da SageMaker AI.

  • Se si abilitano tutte e tre le funzionalità, SageMaker Python SDK disattiva automaticamente Debugger passando debugger_hook_config=False, il che equivale al seguente esempio estimator di framework.

    bucket=sagemaker.Session().default_bucket() base_job_name="sagemaker-checkpoint-test" checkpoint_in_bucket="checkpoints" # The S3 URI to store the checkpoints checkpoint_s3_bucket="s3://{}/{}/{}".format(bucket, base_job_name, checkpoint_in_bucket) estimator = TensorFlow( ... distribution={"smdistributed": {"dataparallel": { "enabled": True }}}, checkpoint_s3_uri=checkpoint_s3_bucket, checkpoint_local_path="/opt/ml/checkpoints", debugger_hook_config=False )
  • Se desideri continuare a utilizzare sia SageMaker AI Distributed Data Parallel che SageMaker Debugger, una soluzione alternativa consiste nell’aggiungere manualmente le funzioni di checkpointing allo script di addestramento anziché specificare i parametri checkpoint_s3_uri e checkpoint_local_path dallo strumento di stima. Per ulteriori informazioni sui checkpoint manuali in uno script di addestramento, consulta Salvataggio dei checkpoint.

Prefisso inaspettato collegato alle chiavi dei parametri del modello

Per i processi di addestramento distribuito con PyTorch, potrebbe essere collegato un prefisso inaspettato (model ad esempio) alle chiavi state_dict (parametri del modello). La libreria parallela di dati SageMaker AI non altera o antepone direttamente i nomi dei parametri del modello quando i job di addestramento PyTorch salvano artefatti del modello. L'addestramento distribuito di PyTorch modifica i nomi in modo che vengano trasmessi alla rete, anteponendo il prefisso state_dict. Se si riscontrano problemi di errore del modello a causa di nomi di parametri diversi durante l’utilizzo della libreria di parallelizzazione dei dati SageMaker AI e del checkpointing per l’addestramento con PyTorch, adatta il codice di esempio indicato di seguito per rimuovere il prefisso durante la fase di caricamento dei checkpoint nello script di addestramento.

state_dict = {k.partition('model.')[2]:state_dict[k] for k in state_dict.keys()}

Questo prende ogni chiave state_dict come valore di stringa, separa la stringa alla prima occorrenza di 'model.' e prende il terzo elemento dell'elenco (con indice 2) della stringa partizionata.

Per ulteriori informazioni sul problema del prefisso, consulta un thread di discussione su Nomi dei parametri di prefisso in un modello salvato se addestrato da multi-GPU? nel forum di discussione di PyTorch.

Per ulteriori informazioni sui metodi PyTorch per il salvataggio e il caricamento dei modelli, consulta Salvataggio e caricamento tra i dispositivi nella documentazione di PyTorch.

Il job di addestramento distribuito di SageMaker AI si blocca durante l’inizializzazione

Se il job di addestramento SageMaker AI Distributed Data Parallel si blocca durante l’inizializzazione quando si utilizzano istanze abilitate per EFA, la causa potrebbe essere una configurazione errata nel gruppo di sicurezza della sottorete VPC utilizzata per il job di addestramento. EFA richiede una corretta configurazione del gruppo di sicurezza per abilitare il traffico tra i nodi.

Per configurare regole in entrata e in uscita per il gruppo di sicurezza
  1. Accedi alla Console di gestione AWS e apri la console Amazon VPC all'indirizzo https://console.aws.amazon.com/vpc/.

  2. Nel riquadro di navigazione a sinistra, scegli Gruppi di sicurezza.

  3. Seleziona il gruppo di sicurezza collegato alla sottorete VPC che usi per l’addestramento.

  4. Nella sezione Dettagli, copia l’ID del gruppo di sicurezza.

  5. Nella scheda Inbound rules (Regole in entrata), seleziona Edit inbound rules (Modifica regole in entrata).

  6. Nella pagina Edit inbound rules (Modifica regole in entrata), esegui queste operazioni:

    1. Scegliere Add rule (Aggiungi regola).

    2. In Type (Tipo), selezionare All traffic (Tutto il traffico).

    3. Per Origine, scegli Personalizzato, incolla l'ID del gruppo di sicurezza nella casella di ricerca e seleziona il gruppo di sicurezza che viene visualizzato.

  7. Scegli Salva regole per completare la configurazione della regola in entrata per il gruppo di sicurezza.

  8. Dalla scheda Regole in uscita, seleziona Modifica regole in uscita.

  9. Ripeti le fasi 6 e 7 per aggiungere la stessa regola di una regola in uscita.

Dopo aver completato le fasi precedenti per configurare il gruppo di sicurezza con le regole in entrata e in uscita, esegui nuovamente il job di addestramento e verifica se il problema relativo al blocco è stato risolto.

Per ulteriori informazioni sui gruppi di sicurezza per VPC ed EFA, consulta Gruppi di sicurezza per VPC ed Elastic Fabric Adapter.

Il job di addestramento distribuito di SageMaker AI si blocca al termine dell’addestramento

Una delle cause principali dei problemi di stallo al termine dell'addestramento è la mancata corrispondenza nel numero di batch elaborati per epoca nelle diverse classificazioni. Tutti i worker (GPU) sincronizzano i gradienti locali nel passaggio a ritroso per garantire che tutti abbiano la stessa copia del modello al termine dell'iterazione del batch. Se le dimensioni dei lotti vengono assegnate in modo non uniforme ai diversi gruppi di worker durante l'ultima fase dell’addestramento, il processo di addestramento si blocca. Ad esempio, mentre un gruppo di worker (gruppo A) termina l'elaborazione di tutti i batch ed esce dal ciclo di addestramento, un altro gruppo di worker (gruppo B) inizia a elaborare un altro batch e si aspetta comunque che la comunicazione dal gruppo A sincronizzi i gradienti. Ciò fa sì che il gruppo B attenda il gruppo A, che ha già completato l'addestramento e non ha gradienti da sincronizzare.

Pertanto, quando si configura il set di dati di addestramento, è importante che ogni worker riceva lo stesso numero di campioni di dati in modo che ogni worker esegua lo stesso numero di batch durante l'addestramento. Assicurati che ogni livello riceva lo stesso numero di batch per evitare questo problema di blocco.

Osservazione del degrado dell’efficienza di dimensionamento dovuto ai colli di bottiglia del throughput di Amazon FSx

Una potenziale causa della riduzione dell'efficienza di scalabilità è il limite di throughput FSx. Se osservi un calo improvviso dell'efficienza di scalabilità quando passi a un cluster di addestramento più grande, prova a utilizzare un file system FSx for Lustre più grande con un limite di throughput più elevato. Per ulteriori informazioni, consulta Aggregare le prestazioni del file system e Gestione della capacità di archiviazione e di throughput nella Guida per l’utente di Amazon FSx for Lustre.

Il job di addestramento distribuito di SageMaker AI con PyTorch restituisce avvisi di obsolescenza

Dalla versione 1.4.0, la libreria SageMaker AI Distributed Data Parallelism funziona come backend di PyTorch distribuito. A causa dell'importante modifica apportata all'uso della libreria con PyTorch, potresti ricevere un messaggio di avviso che indica che le API smdistributed per il pacchetto distribuito PyTorch sono obsolete. Il messaggio di avviso visualizzato dovrebbe essere simile al seguente:

smdistributed.dataparallel.torch.dist is deprecated in the SageMaker AI distributed data parallel library v1.4.0+. Please use torch.distributed and specify 'smddp' as a backend when initializing process group as follows: torch.distributed.init_process_group(backend='smddp') For more information, see the library's API documentation at https://docs.aws.amazon.com/sagemaker/latest/dg/data-parallel-modify-sdp-pt.html

Nella versione 1.4.0 e successive, la libreria deve essere importata solo una volta nella parte superiore dello script di addestramento e impostata come backend durante l'inizializzazione distribuita di PyTorch. Con la singola riga di specifiche di backend, puoi mantenere invariato lo script di addestramento di PyTorch e utilizzare direttamente i moduli distribuiti PyTorch. Consulta Utilizzare la libreria SMDDP in uno script di addestramento PyTorch per scoprire le modifiche rivoluzionarie e il nuovo modo di usare la libreria con PyTorch.