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à.
Se riscontri un errore, puoi utilizzare il seguente elenco per provare a risolvere il tuo processo di addestramento. Se il problema persiste, contatta l’Assistenza AWS
Argomenti
Considerazioni sull'utilizzo di SageMaker Debugger con la Model Parallelism Library SageMaker
SageMaker Debugger non è disponibile per la libreria di parallelismo dei modelli. SageMaker Il debugger è abilitato per impostazione predefinita per tutti i processi di PyTorch formazione SageMaker TensorFlow e potresti visualizzare un errore simile al seguente:
FileNotFoundError: [Errno 2] No such file or directory: '/opt/ml/checkpoints/metadata.json.sagemaker-uploading
Per risolvere questo problema, disabilita Debugger passando debugger_hook_config=False
durante la creazione di un framework estimator
, come mostrato nell'esempio seguente.
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": {"modelparallel": { "enabled": True }}},
checkpoint_s3_uri=checkpoint_s3_bucket,
checkpoint_local_path="/opt/ml/checkpoints",
debugger_hook_config=False
)
Salvataggio dei checkpoint
Potresti riscontrare il seguente errore durante il salvataggio dei checkpoint di un modello di grandi dimensioni su AI: SageMaker
InternalServerError: We encountered an internal error. Please try again
Ciò potrebbe essere causato da una limitazione dell' SageMaker IA durante il caricamento del checkpoint locale su Amazon S3 durante la formazione. Per disabilitare il checkpoint nell' SageMaker IA, usa il seguente esempio per caricare esplicitamente i checkpoint.
Se riscontrate l'errore precedente, non utilizzatelo con la chiamata. checkpoint_s3_uri
SageMaker estimator
Durante il salvataggio dei checkpoint per modelli più grandi, consigliamo di salvare i checkpoint in una directory personalizzata e di passarli alla funzione di supporto (come argomento local_path
).
import os
def aws_s3_sync(source, destination):
"""aws s3 sync in quiet mode and time profile"""
import time, subprocess
cmd = ["aws", "s3", "sync", "--quiet", source, destination]
print(f"Syncing files from {source} to {destination}")
start_time = time.time()
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.wait()
end_time = time.time()
print("Time Taken to Sync: ", (end_time-start_time))
return
def sync_local_checkpoints_to_s3(local_path="/opt/ml/checkpoints", s3_uri=os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))+'/checkpoints'):
""" sample function to sync checkpoints from local path to s3 """
import boto3
#check if local path exists
if not os.path.exists(local_path):
raise RuntimeError("Provided local path {local_path} does not exist. Please check")
#check if s3 bucket exists
s3 = boto3.resource('s3')
if not s3_uri.startswith("s3://"):
raise ValueError(f"Provided s3 uri {s3_uri} is not valid.")
s3_bucket = s3_uri.replace('s3://','').split('/')[0]
print(f"S3 Bucket: {s3_bucket}")
try:
s3.meta.client.head_bucket(Bucket=s3_bucket)
except Exception as e:
raise e
aws_s3_sync(local_path, s3_uri)
return
def sync_s3_checkpoints_to_local(local_path="/opt/ml/checkpoints", s3_uri=os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))+'/checkpoints'):
""" sample function to sync checkpoints from s3 to local path """
import boto3
#try to create local path if it does not exist
if not os.path.exists(local_path):
print(f"Provided local path {local_path} does not exist. Creating...")
try:
os.makedirs(local_path)
except Exception as e:
raise RuntimeError(f"Failed to create {local_path}")
#check if s3 bucket exists
s3 = boto3.resource('s3')
if not s3_uri.startswith("s3://"):
raise ValueError(f"Provided s3 uri {s3_uri} is not valid.")
s3_bucket = s3_uri.replace('s3://','').split('/')[0]
print(f"S3 Bucket: {s3_bucket}")
try:
s3.meta.client.head_bucket(Bucket=s3_bucket)
except Exception as e:
raise e
aws_s3_sync(s3_uri, local_path)
return
Utilizzo delle funzioni di supporto:
#base_s3_uri - user input s3 uri or save to model directory (default)
#curr_host - to save checkpoints of current host
#iteration - current step/epoch during which checkpoint is saved
# save checkpoints on every node using local_rank
if smp.local_rank() == 0:
base_s3_uri = os.path.dirname(os.path.dirname(os.getenv('SM_MODULE_DIR', '')))
curr_host = os.environ['SM_CURRENT_HOST']
full_s3_uri = f'{base_s3_uri}/checkpoints/{curr_host}/{iteration}'
sync_local_checkpoints_to_s3(local_path=checkpoint_dir, s3_uri=full_s3_uri)
Convergenza utilizzando Model Parallel e TensorFlow
Quando si utilizza l' SageMaker intelligenza artificiale multinodo TensorFlow e la libreria di parallelismo dei modelli, la perdita potrebbe non convergere come previsto perché l'ordine dei file di input di addestramento potrebbe essere diverso su ciascun nodo. Ciò può far sì che ranghi diversi nello stesso gruppo parallelo del modello lavorino su file di input diversi, causando incongruenze. Per evitare ciò, assicurati che i file di input siano ordinati allo stesso modo in tutti i ranghi prima che vengano convertiti in set di dati. TensorFlow Un modo per raggiungere questo obiettivo è ordinare i nomi dei file di input nello script di addestramento.
Blocco o arresto anomalo dei processi di addestramento distribuiti
Se il processo di addestramento presenta problemi di blocco, arresto anomalo o mancata risposta, leggi i seguenti articoli per la risoluzione dei problemi per identificare la causa del problema. Se hai bisogno di ulteriore assistenza, contatta il team di formazione SageMaker distribuito tramite AWS Support
-
Se vedi un processo di addestramento distribuito che si blocca durante la fase di inizializzazione NCCL, considera quanto segue:
-
Se utilizzi una delle istanze (istanze
ml.p4d
oml.p3dn
) abilitate per EFA con un VPC personalizzato e relativa sottorete, assicurati che il gruppo di sicurezza utilizzato disponga di connessioni in entrata e in uscita per tutte le porte da e verso lo stesso SG. In genere sono inoltre necessarie connessioni in uscita a qualsiasi IP come regola separata (per l'accesso a Internet). Per trovare istruzioni su come aggiungere regole in entrata e in uscita per le comunicazioni EFA, consulta SageMaker L'intelligenza artificiale distribuita si blocca durante l'inizializzazione.
-
-
Se noti che un processo di addestramento distribuito si blocca durante il checkpoint del modello completo, ciò potrebbe essere dovuto al fatto che la chiamata
state_dict()
al modello o all'ottimizzatore non è stata effettuata a tutti i livelli conrdp_rank()==0
(quando si utilizza il parallelismo tensoriale) odp_rank()==0
(quando si utilizza solo il parallelismo delle pipeline). Questi livelli devono comunicare per costruire il checkpoint da salvare. Problemi di stallo simili possono verificarsi anche quando l'ottimizzatore parziale di checkpointshard_optimizer_state
è abilitato.Per ulteriori informazioni sul checkpoint di un modello con parallelismo del modello, vedere Istruzioni generali per il salvataggio e il caricamento
eControllo di un PyTorch modello distribuito (per la libreria di parallelismo dei modelli tra v1.6.0 e SageMaker v1.9.0). -
Se il processo di addestramento si blocca con un errore CUDA Memoria esaurita, significa che la configurazione di addestramento distribuito deve essere adattata al modello sul cluster GPU. Per ulteriori informazioni e best practice, consulta Impostazione della configurazione corretta per un determinato modello.
-
Se il processo di formazione si blocca con un errore ECC
non correggibile, significa che uno dei componenti del GPUs cluster non funziona correttamente. Se hai bisogno di supporto tecnico, condividi l'ARN del processo con il AWS team e, se possibile, riavvia il processo di addestramento da un checkpoint. -
In rari casi, la configurazione di un processo che funzionava in precedenza ma che è vicina ai limiti della memoria della GPU potrebbe fallire in seguito con un cluster diverso a causa di un errore CUDA Memoria esaurita. Ciò potrebbe essere dovuto al fatto che alcune GPU hanno una memoria disponibile inferiore al solito a causa di errori ECC.
-
Un arresto anomalo del timeout di rete potrebbe verificarsi quando si esegue un processo multinodo che non utilizza tutto il nodo. GPUs Per ovviare a questo problema, usa all GPUs on the node assicurandoti che il
processes_per_host
parametro sia impostato sul numero di GPUs in ogni istanza. Ad esempio, questo èprocesses_per_host=8
per le istanzeml.p3.16xlarge
,ml.p3dn.24xlarge
, eml.p4d.24xlarge
. -
Se ritieni che il tuo processo di formazione richieda molto tempo durante la fase di download dei dati, assicurati che il percorso Amazon S3 che hai fornito
checkpoint_s3_uri
per il SageMakerEstimator
corso sia unico per il corso di formazione corrente. Se questo percorso viene riutilizzato in più processi di addestramento eseguiti contemporaneamente, tutti i checkpoint vengono caricati e scaricati sullo stesso percorso Amazon S3 e potrebbero aumentare significativamente il tempo di caricamento dei checkpoint. -
Utilizzalo FSx per Lustre quando gestisci dati e modelli di grandi dimensioni.
-
Quando i modelli di addestramento superano i 10 miliardi di parametri, consigliamo di utilizzare Lustre FSx per il checkpoint.
-
Dopo aver creato un file system, assicurati di attendere che lo status diventi disponibile prima di iniziare un processo di addestramento che lo utilizzi.
Ricezione di un errore NCCL per un job di formazione PyTorch
Se hai riscontrato il seguente errore, potrebbe essere dovuto a un processo che sta esaurendo la memoria della GPU.
NCCL error in: ../torch/lib/c10d/ProcessGroupNCCL.cpp:825, unhandled system error, NCCL version 2.7.8
ncclSystemError: System call (socket, malloc, munmap, etc) failed.
È possibile risolvere questo problema riducendo la dimensione del batch o active_microbatches
. Se il partizionamento automatico non porta a un partizionamento ben bilanciato, potrebbe essere necessario prendere in considerazione il partizionamento manuale. Per ulteriori informazioni, consulta Parallelismo delle pipeline tra i nodi.
Ricevimento RecursionError
per un PyTorch tirocinio
La libreria non supporta le chiamate super.forward()
all'interno della chiamata inoltrata di un modulo. Se utilizzi super.forward()
, potresti visualizzare il seguente messaggio di errore:
RecursionError: maximum recursion depth exceeded
Per correggere l'errore, invece di chiamare super.forward()
, dovresti chiamare super()._orig_forward()
.