Partizione dello stato dell'ottimizzatore - 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à.

Partizione dello stato dell'ottimizzatore

La partizione dello stato dell'ottimizzatore è un'utile tecnica di risparmio di memoria che partiziona lo stato dell'ottimizzatore (l'insieme di pesi che descrive lo stato dell'ottimizzatore) tra gruppi di dispositivi paralleli di dati. È possibile utilizzare la partizione dello stato dell'ottimizzatore ogni volta che si utilizza un ottimizzatore stateful (come Adam) o un ottimizzatore FP16 (che memorizza sia le copie di parametri FP16 che FP32).

Nota

La partizione dello stato dell'ottimizzatore è disponibile per PyTorch nella libreria di parallelismo dei modelli SageMaker v1.6.0 e versioni successive.

Come usare la partizione dello stato dell'ottimizzatore

È possibile attivare la partizione dello stato dell'ottimizzatore impostando "shard_optimizer_state": True nella configurazione modelparallel.

Quando questa funzione è attivata, la libreria partiziona il set di parametri del modello in base al grado di parallelismo dei dati. I gradienti corrispondenti alla partizione i vengono ridotti solo alla classificazione parallela dei dati i. Alla fine della prima chiamata a una funzione decoratrice smp.step, l'ottimizzatore racchiuso da smp.DistributedOptimizer ridefinisce i suoi parametri in modo che siano limitati solo a quelli corrispondenti alla partizione dell'attuale classificazione dei dati parallela. I parametri ridefiniti sono chiamati parametri virtuali e condividono lo spazio di archiviazione sottostante con i parametri originali. Durante la prima chiamata a optimizer.step, gli stati dell'ottimizzatore vengono creati in base a questi parametri ridefiniti, che vengono partizionati a causa della partizione originale. Dopo l'aggiornamento dell'ottimizzatore, l'operazione AllGather (come parte della chiamata optimizer.step) viene eseguita attraverso le classificazioni dei dati parallele per ottenere stati dei parametri coerenti.

Suggerimento

La partizione dello stato dell'ottimizzatore può essere utile quando il grado di parallelismo dei dati è maggiore di 1 e il modello ha più di un miliardo di parametri.

Il grado di parallelismo dei dati viene calcolato da (processes_per_host * instance_count / pipeline_parallel_degree) e la funzione smp.dp_size() gestisce il dimensionamento in background.

Configurare uno strumento di valutazione SageMaker PyTorch

mpi_options = { "enabled" : True, "processes_per_host" : 8, # 8 processes "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none " } smp_options = { "enabled":True, "parameters": { "microbatches": 4, "pipeline_parallel_degree": 2, # alias for "partitions" "placement_strategy": "cluster", "tensor_parallel_degree": 2, # tp over 2 devices "ddp": True, "shard_optimizer_state": True } }

Adatta il tuo script di addestramento PyTorch

Consulta Adatta il tuo script di addestramento PyTorch nella sezione Parallelismo tensoriale combinato con parallelismo di pipeline. Non è richiesta alcuna modifica aggiuntiva per lo script.