

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à.

# SageMaker Best practice per il parallelismo dei modelli distribuiti
<a name="model-parallel-best-practices"></a>

Utilizza le seguenti linee guida quando esegui un processo di formazione distribuito con la libreria SageMaker model parallel.

## Impostazione della configurazione corretta per un determinato modello
<a name="model-parallel-best-practices-configuration"></a>

Quando si ridimensiona un modello, si consiglia di consultare il seguente elenco in ordine. Ogni voce dell'elenco illustra i vantaggi dell'utilizzo delle tecniche della libreria insieme ai compromessi che potrebbero sorgere. 

**Suggerimento**  
Se un modello può adattarsi bene utilizzando un sottoinsieme delle funzionalità della libreria, l'aggiunta di ulteriori funzionalità di parallelismo del modello o di risparmio di memoria di solito non migliora le prestazioni.

**Utilizzo di tipi di istanze GPU di grandi dimensioni**
+ Nell'ambito del parallelismo dei modelli, è preferibile utilizzare istanze potenti con memorie GPU di grandi dimensioni per gestire il sovraccarico dovuto alle operazioni di parallelismo dei modelli, come il partizionamento dei modelli su più modelli. GPUs Consigliamo di utilizzare le nostre istanze `ml.p4d` o `ml.p3dn` per addestrare modelli DL di grandi dimensioni. Queste istanze sono inoltre dotate di Elastic Fabric Adapter (EFA), che fornisce una maggiore larghezza di banda di rete e consente un addestramento su larga scala con parallelismo dei modelli.

**Ripartizione dello stato dell'ottimizzatore**
+ L'impatto dello stato dell'ottimizzatore di ripartizione dipende dal numero di ranghi paralleli dei dati. In genere, un grado più elevato di parallelismo dei dati (proporzionale alla dimensione del nodo di calcolo) può migliorare l'efficienza dell'utilizzo della memoria.

  Quando desideri ridimensionare un cluster, assicurati di controllare la configurazione dello stato di ripartizione dell'ottimizzatore. Ad esempio, un modello DL di grandi dimensioni con ripartizione dello stato dell'ottimizzatore che si adatta a un cluster di elaborazione con 16 GPUs (ad esempio, due istanze P4d o P4de) potrebbe non adattarsi sempre a un nodo con 8 GPUs (ad esempio, una singola istanza P4d o P4de). Questo perché la memoria combinata di 8 GPUs è inferiore alla memoria combinata di 16 GPUs e la memoria richiesta per GPU per lo sharding di oltre 8 GPUs è anche superiore alla memoria per GPU per lo sharding nello scenario a 16 GPU. Di conseguenza, l'aumento del fabbisogno di memoria potrebbe non essere adatto al cluster più piccolo.

  Per ulteriori informazioni, consulta [Partizione dello stato dell'ottimizzatore](model-parallel-extended-features-pytorch-optimizer-state-sharding.md).

**Checkpoint di attivazione**
+ L'efficienza della memoria può essere migliorata utilizzando il checkpoint di attivazione per un gruppo di moduli. Più si raggruppano i moduli, più efficiente è l'utilizzo della memoria. Quando si effettuano il checkpoint dei moduli sequenziali per i livelli, l'argomento `strategy` della funzione `smp.set_activation_checkpointing` raggruppa i livelli per il checkpoint. Ad esempio, il raggruppamento di due o più livelli per il checkpoint è più efficiente in termini di memoria rispetto al checkpoint di un livello alla volta, e ciò consente di rinunciare a un tempo di calcolo aggiuntivo con un utilizzo ridotto della memoria.

  Per ulteriori informazioni, consulta [Checkpoint di attivazione](model-parallel-extended-features-pytorch-activation-checkpointing.md).

**Parallelizzazione tensoriale**
+ Il grado di parallelismo tensoriale deve essere una potenza di due (2, 4, 8,..., 2 n), dove il grado massimo deve essere uguale al numero di per nodo. GPUs Ad esempio, se si utilizza un nodo con 8 GPUs, i numeri possibili per il grado di parallelismo tensoriale sono 2, 4 e 8. Non consigliamo numeri arbitrari (come 3, 5, 6 e 7) per il grado di parallelismo tensoriale. Quando si utilizzano più nodi, una configurazione errata del grado di parallelismo tensoriale potrebbe comportare l'esecuzione del parallelismo tensoriale tra i nodi. Ciò comporta un notevole sovraccarico derivante dalla comunicazione delle attivazioni tra i nodi e può diventare costoso dal punto di vista computazionale.

  Per ulteriori informazioni, consulta [Parallelismo tensoriale](model-parallel-extended-features-pytorch-tensor-parallelism.md).<a name="model-parallel-best-practices-configuration-pipeline-across-nodes"></a>

**Parallelismo delle pipeline tra i nodi**
+ È possibile eseguire il parallelismo delle pipeline sia all'interno di un singolo nodo che su più nodi. Quando utilizzi il parallelismo delle pipeline in combinazione con il parallelismo tensoriale, ti consigliamo di eseguire il parallelismo della pipeline su più nodi e di mantenere il parallelismo tensoriale all'interno dei singoli nodi. 
+ Il parallelismo della pipeline viene fornito con le seguenti tre manopole: `microbatches`, `active_microbatches` e `prescaled_batch`.
  + Quando si utilizza il parallelismo tensoriale con il parallelismo della pipeline, si consiglia di attivare `prescaled_batch` modo da aumentare la dimensione del batch per gruppo parallelo del modello per una pipeline efficiente. Con `prescaled_batch` attivato, la dimensione del batch impostata nello script di addestramento diventa `tp_size` moltiplicata per la dimensione del batch impostata per ogni classificazione senza `prescaled_batch`.
  + L'aumento del numero di `microbatches` consente di ottenere una pipelining efficiente e prestazioni migliori. Si noti che la dimensione effettiva dei microbatch è la dimensione del batch divisa per il numero di microbatch. Se si aumenta il numero di microbatch mantenendo costante la dimensione del batch, ogni microbatch elabora un numero inferiore di campioni.
  + Il numero di `active_microbatches` è il numero massimo di microbatch che vengono processati contemporaneamente durante la pipeline. Per ogni microbatch attivo in corso, le relative attivazioni e i gradienti occupano la memoria della GPU. Pertanto, l'aumento di `active_microbatches` richiede più memoria GPU.
+ Se sia la memoria della GPU che quella della GPU sono sottoutilizzate, aumenta `active_microbatches` per una migliore parallelizzazione durante la pipeline.
+ Per ulteriori informazioni su come utilizzare il parallelismo tensoriale con il parallelismo della pipeline, consulta [Parallelismo tensoriale combinato con parallelismo di pipeline](model-parallel-extended-features-pytorch-tensor-parallelism-examples.md#model-parallel-extended-features-pytorch-tensor-and-pipeline-parallelism).
+ Per trovare le descrizioni dei parametri sopra menzionati, consulta [Parameters for `smdistributed` nella documentazione](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel_general.html#parameters-for-smdistributed) di *SageMaker Python* SDK.

**Trasferimento delle attivazioni sulla CPU**
+ Assicurati che venga utilizzato in combinazione con il checkpoint di attivazione e il parallelismo della pipeline. Per garantire che l'offload e il preload avvengano in background, specifica un valore maggiore di 1 per il parametro microbatch. 
+ Durante lo scaricamento delle attivazioni, è possibile aumentare `active_microbatches` e talvolta far corrispondere il numero totale di microbatch. Ciò dipende da quali moduli sono sottoposti a checkpoint e da come è partizionato il modello.

  Per ulteriori informazioni, consulta [Offload di attivazione](model-parallel-extended-features-pytorch-activation-offloading.md).

### Configurazioni di riferimento
<a name="model-parallel-best-practices-configuration-reference"></a>

Il team di formazione sul parallelismo dei SageMaker modelli fornisce i seguenti punti di riferimento basati su esperimenti con il modello GPT-2, sulla lunghezza della sequenza di 512 e sulla dimensione del vocabolario di 50.000. 


| Il numero di parametri del modello | Tipo di istanza | Parallelismo della pipeline | Parallelismo tensoriale | Ripartizione dello stato dell'ottimizzatore | Checkpoint di attivazione | Batch pre-ridimensionato | Dimensione batch | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 10 miliardi | 16 ml.p4d.24xlarge | 1 | 4 | True | Ogni livello del trasformatore | True | batch\$1size=40 | 
| 30 miliardi | 16 ml.p4d.24xlarge | 1 | 8 | True | Ogni livello del trasformatore | True | batch\$1size=32 | 
| 60 miliardi | 32 ml.p4d.24xlarge | 2 | 8 | True | Ogni livello del trasformatore | True | batch\$1size=56, microbatches=4, active\$1microbatches=2 | 

È possibile estrapolare le configurazioni precedenti per stimare l'utilizzo della memoria GPU per la configurazione del modello. Ad esempio, se aumenti la lunghezza della sequenza per un modello da 10 miliardi di parametri o aumenti le dimensioni del modello a 20 miliardi, potresti voler ridurre prima la dimensione del batch. Se il modello continua a non adattarsi, prova ad aumentare il grado di parallelismo tensoriale.

## Modifica dello script di addestramento
<a name="model-parallel-best-practices-modify-training-script"></a>
+ Prima di utilizzare le funzionalità della libreria SageMaker model parallel nello script di addestramento, rivedi[Suggerimenti e insidie per la configurazione della SageMaker Distributed Model Parallelism Library](model-parallel-customize-tips-pitfalls.md).
+ Per avviare più rapidamente un processo di formazione, utilizza la [modalità locale SageMaker AI](https://sagemaker.readthedocs.io/en/v2.199.0/overview.html?highlight=local%20mode#local-mode). Ciò consente di eseguire rapidamente un processo di formazione localmente su un'istanza di SageMaker notebook. A seconda della scala dell'istanza di ML su cui è in esecuzione l'istanza del SageMaker notebook, potrebbe essere necessario regolare le dimensioni del modello modificando le configurazioni del modello, ad esempio la larghezza nascosta, il numero di livelli del trasformatore e le testine di attenzione. Verifica se il modello ridotto funziona bene sull'istanza del notebook prima di utilizzare un cluster di grandi dimensioni per addestrare il modello completo. 

## Monitoraggio e registrazione di un lavoro di formazione utilizzando la console SageMaker AI e Amazon CloudWatch
<a name="model-parallel-best-practices-monitoring"></a>

[Per monitorare metriche a livello di sistema come l'utilizzo della memoria CPU, l'utilizzo della memoria GPU e l'utilizzo della GPU, utilizza la visualizzazione fornita tramite la console AI. SageMaker ](https://console.aws.amazon.com/sagemaker/)

1. Nel pannello di navigazione a sinistra scegli **Addestramento**.

1. Scegli **Processi di addestramento**.

1. Nel riquadro principale, scegli il nome del processo di addestramento per il quale desideri visualizzare ulteriori dettagli.

1. Sfoglia il pannello principale e trova la sezione **Monitora** per vedere la visualizzazione automatizzata.

1. Per visualizzare i log dei processi di addestramento , scegli **Visualizza log** nella sezione **Monitora**. È possibile accedere ai registri distribuiti dei lavori di formazione relativi al processo di formazione in. CloudWatch Se hai avviato l’addestramento distribuito su più nodi, dovresti vedere più flussi di log con tag nel formato **algo-n-1234567890**. Il flusso di log **algo-1** tiene traccia dei log di addestramento dal nodo principale (0°).

Per ulteriori informazioni, consulta [Amazon CloudWatch Metrics per il monitoraggio e l'analisi dei lavori di formazione](training-metrics.md).

## Permissions
<a name="model-parallel-best-practices-permissions"></a>

Per eseguire un processo di SageMaker formazione con il parallelismo dei modelli o i [notebook di esempio di formazione SageMaker distribuiti](https://sagemaker-examples.readthedocs.io/en/latest/training/distributed_training/index.html), assicurati di disporre delle autorizzazioni giuste nel tuo ruolo IAM, come le seguenti:
+ [Da usare per Lustre, aggiungi. FSx [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonFSxFullAccess)](https://aws.amazon.com/fsx/)
+ Per utilizzare Amazon S3 come canale dati, aggiungi [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonS3FullAccess).
+ Per utilizzare Docker, creare il tuo container e inviarlo ad Amazon ECR, aggiungi [https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonEC2ContainerRegistryFullAccess).
+ Per avere accesso completo all'intera suite di funzionalità di SageMaker intelligenza artificiale, aggiungi [https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#/policies/iam/home#/policies/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2FAmazonSageMakerFullAccess). 