

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

# Parallelizzazione tensoriale
<a name="model-parallel-core-features-v2-tensor-parallelism"></a>

La *parallelizzazione tensoriale* è un tipo di parallelizzazione del modello in cui pesi, gradienti e stati dell’ottimizzatore specifici del modello vengono suddivisi tra i dispositivi. A differenza della parallelizzazione delle pipeline, che mantiene intatti i singoli pesi ma partiziona il *set* di pesi, gradienti o l’ottimizzatore tra i dispositivi, la parallelizzazione tensoriale esegue lo sharding dei pesi *individuali*. Ciò comporta in genere il calcolo distribuito di operazioni, moduli o livelli specifici del modello.

Il parallelismo tensoriale è necessario nei casi in cui un singolo parametro consuma la maggior parte della memoria della GPU (ad esempio tabelle di incorporamento di grandi dimensioni con un vocabolario di grandi dimensioni un livello softmax di grandi dimensioni con un numero elevato di classi). In questo caso, trattare questo tensore o operazione di grandi dimensioni come un’unità atomica è inefficiente e impedisce l’equilibrio del carico di memoria.

SMP v2 si integra con [Transformer Engine](https://docs.nvidia.com/deeplearning/transformer-engine/index.html) per l'implementazione del parallelismo tensoriale e funziona su FSDP. PyTorch APIs È possibile abilitare contemporaneamente il parallelismo PyTorch tensoriale FSDP e SMP e determinare il miglior parallelismo del modello per le migliori prestazioni.

In pratica, la parallelizzazione tensoriale è particolarmente utile nei seguenti scenari:
+ In caso di addestramento con contesti di notevole lunghezza, poiché questo conduce a un’elevata memoria di attivazione con il solo FSDP.
+ In caso di addestramento con cluster molto grandi, in cui la dimensione globale del batch supera i limiti desiderati.

## Modelli di Hugging Face Transformers compatibili con la parallelizzazione tensoriale SMP
<a name="model-parallel-core-features-v2-tensor-parallelism-supported-models"></a>

SMP v2 offre attualmente il supporto per la parallelizzazione tensoriale per i seguenti modelli di Hugging Face Transformers.
+ GPT-NeoX
+ Llama 2
+ Llama 3
+ [Mistral 7B](https://huggingface.co/mistralai/Mistral-7B-v0.3)
+ [Mixtral 8x7B](https://huggingface.co/mistralai/Mixtral-8x7B-v0.1)
+ [Mixtral 8x22B](https://huggingface.co/mistralai/Mixtral-8x22B-v0.1)

Per la configurazione di riferimento relativa all’applicazione della parallelizzazione tensoriale su questi modelli, vedi [Consigli per la configurazione](model-parallel-best-practices-v2.md#model-parallel-best-practices-v2-config-tips).

## Configurazione della parallelizzazione tensoriale
<a name="model-parallel-core-features-v2-tensor-parallelism-configuration"></a>

Per `tensor_parallel_degree`, seleziona un valore per il grado di parallelizzazione tensoriale. Il valore deve dividere equamente il numero di nel cluster. GPUs Ad esempio, per suddividere il modello utilizzando un'istanza con 8 GPUs, scegliete 2, 4 o 8. È consigliabile iniziare con un numero piccolo e aumentarlo gradualmente fino a quando il modello risulta adatto alla memoria della GPU.

I seguenti frammenti di codice mostrano come aggiungere il modulo di inizializzazione SMP `torch.sagemaker.init()` allo script di addestramento e impostare il dizionario di configurazione di SMP in formato JSON per il programma di avvio del job di addestramento seguendo il processo in due fasi introdotto in [Usa la libreria di parallelismo dei SageMaker modelli v2](model-parallel-use-api-v2.md). Non è necessario apportare modifiche al PyTorch modello o alla configurazione [PyTorch FSDP](https://pytorch.org/docs/stable/fsdp.html#module-torch.distributed.fsdp). Per ulteriori informazioni sui parametri `tensor_parallel_degree` e `random_seed`, vedi [Parametri di configurazione delle funzionalità principali di SMP v2](distributed-model-parallel-v2-reference.md#distributed-model-parallel-v2-reference-init-config).

**Configurazione di SMP**

```
{
    "tensor_parallel_degree": 8,
    "random_seed": 0 
}
```

**Nello script di addestramento**

Esegui l’inizializzazione con `torch.sagemaker.init()` per attivare SMP v2 ed eseguire il wrapping del modello con l’API [`torch.sagemaker.transform`](distributed-model-parallel-v2-reference.md#model-parallel-v2-torch-sagemaker-reference-transform).

```
import torch.sagemaker as tsm
tsm.init()

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_config(..)
model = tsm.transform(model)
```

## Salvataggio e caricamento dei checkpoint Hugging Face Transformers
<a name="model-parallel-core-features-v2-tensor-parallelism-checkpoints"></a>

Dopo aver trasformato un modello, la libreria SMP ne modifica il dizionario di stato (`state_dict`). Ciò significa che il modello diventa incompatibile con le funzionalità di checkpoint originali di Hugging Face Transformers. Per gestire ciò, la libreria SMP consente di APIs salvare i checkpoint da un modello trasformato nella rappresentazione Hugging Face Transformer `torch.sagemaker.transform` e l'API di caricare un checkpoint del modello Hugging Face Transformer per la messa a punto.

Per ulteriori informazioni sul salvataggio dei checkpoint durante l’utilizzo della funzionalità di parallelizzazione tensoriale di SMP v2, vedi [Checkpointing con SMP](model-parallel-core-features-v2-checkpoints.md).

Per ulteriori informazioni sull’esecuzione del fine-tuning di un modello che applica la funzionalità di parallelizzazione tensoriale di SMP v2, vedi [Fine-tuning](model-parallel-core-features-v2-fine-tuning.md).