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

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 suddivisione dello stato di Optimizer è disponibile nella libreria di parallelismo dei modelli v1.6.0 e versioni successive PyTorch . SageMaker

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' AllGatheroperazione (come parte della optimizer.step chiamata) viene eseguita attraverso i ranghi paralleli dei dati 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.

Configura uno stimatore 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 PyTorch di allenamento

Vedi Adatta il tuo script di PyTorch formazione nella sezione Parallelismo di Tensor combinato con parallelismo della pipeline. Non è richiesta alcuna modifica aggiuntiva per lo script.