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à.
Parallelismo tensoriale
Il parallelismo tensoriale è un tipo di parallelismo del modello in cui pesi, gradienti e stati dell'ottimizzatore specifici del modello vengono suddivisi tra i dispositivi. A differenza del parallelismo delle pipeline, che mantiene intatti i singoli pesi ma suddivide l'insieme di pesi, gradienti o ottimizzatori tra i dispositivi, il parallelismo tensoriale suddivide i 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 GPU memoria (come tabelle di incorporamento di grandi dimensioni con un vocabolario di grandi dimensioni o un ampio livello softmax con un gran numero 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.
SMPv2 si integra con Transformer Engine
In pratica, il parallelismo tensoriale è particolarmente utile nei seguenti scenari.
-
Quando ci si allena con contesti di lunga durata, in quanto ciò porta a un'elevata memoria di attivazione con la sola persona. FSDP
-
Quando ci si allena con cluster molto grandi in cui la dimensione globale del batch supera i limiti desiderati.
Modelli Hugging Face Transformer compatibili con il parallelismo tensoriale SMP
SMPv2 offre attualmente il supporto per il parallelismo tensoriale per i seguenti modelli di trasformatori Hugging Face.
-
GPT-NeoX
-
Lama 2
Per la configurazione di riferimento per l'applicazione del parallelismo tensoriale su questi modelli, vedere. Consigli per la configurazione
Configurare il parallelismo tensoriale
Pertensor_parallel_degree
, si seleziona un valore per il grado di parallelismo tensoriale. Il valore deve dividere equamente il numero di GPUs nel cluster. Ad esempio, per suddividere il modello utilizzando un'istanza con 8GPUs, scegliete 2, 4 o 8. Ti consigliamo di iniziare con un numero piccolo e di aumentarlo gradualmente fino a quando il modello non si adatta alla GPU memoria.
I seguenti frammenti di codice mostrano come aggiungere il modulo di SMP inizializzazione torch.sagemaker.init()
allo script di training e impostare il dizionario di SMP configurazione in JSON formato training job launcher seguendo il processo in due fasi introdotto in. Usa la libreria di parallelismo dei SageMaker modelli v2 Non è necessario apportare modifiche al modello o alla configurazione. PyTorch PyTorch FSDPtensor_parallel_degree
e random_seed
, vedi SMPparametri di configurazione delle funzionalità principali di v2.
SMPconfigurazione
{ "tensor_parallel_degree": 8, "random_seed": 0 }
Nel tuo script di allenamento
Inizializza con torch.sagemaker.init()
per attivare la SMP v2 e avvolgi il tuo modello con. torch.sagemaker.transform API
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 Transformer
Dopo che la SMP libreria ha trasformato un modello, cambia il dizionario di stato () state_dict
del modello. Ciò significa che il modello diventa incompatibile con le funzionalità di checkpoint originali di Hugging Face Transformer. Per gestire ciò, la SMP libreria consente di APIs salvare i checkpoint da un modello trasformato nella rappresentazione di Hugging Face Transformer e di torch.sagemaker.transform
API caricare un checkpoint del modello Hugging Face Transformer per la messa a punto.
Per ulteriori informazioni sul salvataggio dei checkpoint durante l'utilizzo della funzione di parallelismo tensoriale della v2, vedere. SMP Checkpointing usando SMP
Per ulteriori informazioni sulla messa a punto di un modello che applica la funzionalità di parallelismo tensoriale della v2, vedere. SMP Ottimizzazione