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 Buone pratiche e considerazioni su Training Compiler
Importante
Amazon Web Services (AWS) annuncia che non ci saranno nuove release o versioni di SageMaker Training Compiler. Puoi continuare a utilizzare SageMaker Training Compiler tramite gli esistenti AWS Deep Learning Containers (DLCs) for SageMaker Training. È importante notare che, sebbene gli esistenti DLCs rimangano accessibili, non riceveranno più patch o aggiornamenti da AWS, in conformità con la politica di supporto del AWS Deep Learning Containers Framework.
Consulta le seguenti best practice e considerazioni quando usi SageMaker Training Compiler.
Best practice
Utilizza le seguenti linee guida per ottenere i migliori risultati quando esegui lavori di formazione con Training Compiler SageMaker .
Best practice generali
-
Assicurarsi di utilizzare uno tra Tipi di istanze supportati e Modelli testati.
-
Quando si crea un tokenizzatore per un modello NLP utilizzando la libreria Hugging Face Transformers nello script di addestramento, assicurarsi di utilizzare una forma di tensore di input statica specificando.
padding='max_length'
Non utilizzarepadding='longest'
, in quanto il padding sulla sequenza più lunga del batch può modificare la forma del tensore per ogni batch di addestramento. La forma di input dinamica può avviare la ricompilazione del modello e aumentare il tempo totale di addestramento. Per ulteriori informazioni sulle opzioni di riempimento dei tokenizzatori Transformers, vedere Padding and troncationnella documentazione di Hugging Face Transformers. -
Misurare l'utilizzo della memoria della GPU per assicurarsi di utilizzare le dimensioni massime del batch che può contenere la memoria della GPU. Amazon SageMaker Training Compiler riduce l'ingombro di memoria del modello durante l'allenamento, il che in genere consente di inserire una memoria più grande
batch_size
nella memoria della GPU. L'utilizzo di unbatch_size
più grande consente un migliore utilizzo della GPU e riduce il tempo totale di addestramento.Quando si modificano le dimensioni del batch è necessario modificare anche il
learning_rate
in modo appropriato. Ad esempio, se la dimensione del batch è stata aumentata di un fattore pari ak
, è necessario eseguire la rettifica dilearning_rate
in modo lineare (semplice moltiplicazione perk
) o moltiplicare per la radice quadrata dik
. Questo serve a ottenere un comportamento di convergenza identico o simile nel tempo di addestramento ridotto. Per un riferimento ai modellibatch_size
testati per i modelli più diffusi, vedere Modelli testati. -
Per eseguire il debug del processo di addestramento accelerato dal compilatore, abilitare il flag
debug
nel parametrocompiler_config
. Ciò consente all' SageMaker intelligenza artificiale di inserire i log di debug nei registri dei lavori di formazione. SageMakerhuggingface_estimator=HuggingFace( ... compiler_config=TrainingCompilerConfig(debug=True) )
Si noti che se si abilita il debug completo del processo di addestramento con il compilatore, ciò potrebbe comportare un sovraccarico.
Le migliori pratiche per PyTorch
-
Se porti un PyTorch modello e vuoi controllarlo, assicurati di utilizzare la funzione di salvataggio del modello di PyTorch /XLA per effettuare il checkpoint corretto del tuo modello. Per ulteriori informazioni sulla funzione,
torch_xla.core.xla_model.save
consultate la documentazione PyTorch su XLA Devices. Per informazioni su come aggiungere le modifiche allo PyTorch script, consulta. Modelli linguistici di grandi dimensioni utilizzati PyTorch direttamente (senza l'API Hugging Face Transformers Trainer)
Per ulteriori informazioni sull'applicazione effettiva dell'uso della funzione di salvataggio del modello, vedere Checkpoint Writing and Loading
in the Hugging Face PyTorch su TPUs /XLA: Faster and cheap training blog. -
Per ottenere il tempo di addestramento ottimale per l'addestramento distribuito, considerare quanto segue.
-
Usa istanze con più istanze invece di usare istanze a GPU singola GPUs . Ad esempio, una singola istanza
ml.p3dn.24xlarge
ha tempi di addestramento più rapidi rispetto a 8 xml.p3.2xlarge
istanze. -
Utilizzare istanze con supporto EFA come
ml.p3dn.24xlarge
eml.p4d.24xlarge
. Questi tipi di istanze hanno una velocità di rete accelerata e riducono i tempi di addestramento. -
Ottimizzare il parametro
preprocessing_num_workers
per i set di dati, in modo che l'addestramento del modello non venga ritardato da una lenta preelaborazione.
-
Considerazioni
Considerate quanto segue quando utilizzate Training Compiler. SageMaker
Degrado delle prestazioni dovuto al log, al checkpoint e alla profilazione
-
Evitare la registrazione, il checkpoint e la profilazione dei tensori del modello che determinano valutazioni esplicite. Per capire cos'è una valutazione esplicita, considerare il seguente esempio di compilazione del codice.
a = b+c e = a+d
Un compilatore interpreta il codice come segue e riduce l'ingombro di memoria per la variabile
a
:e = b+c+d
Consideriamo ora il seguente caso in cui il codice viene modificato per aggiungere una funzione di stampa per la variabile
a
.a = b+c e = a+d print(a)
Il compilatore effettua una valutazione esplicita della variabile
a
nel modo seguente.e = b+c+d a = b+c # Explicit evaluation print(a)
Ad esempio PyTorch, evita di usare torch.tensor.items ()
, che potrebbe introdurre valutazioni esplicite. Nel deep learning, tali valutazioni esplicite possono causare sovraccarichi perché interrompono le operazioni fuse in un grafico di compilazione di un modello e determinano il ricalcolo dei tensori. Se desideri comunque valutare periodicamente il modello durante l'addestramento mentre usi SageMaker Training Compiler, ti consigliamo di effettuare la registrazione e il checkpoint con una frequenza inferiore per ridurre il sovraccarico dovuto a valutazioni esplicite. Ad esempio, eseguire il logging ogni 10 epoche anziché ogni epoca.
-
La compilazione del grafico viene eseguita durante le prime fasi dell'addestramento. Di conseguenza, le prime fasi dovrebbero essere eccezionalmente lente. Tuttavia, si tratta di un costo di compilazione una tantum e può essere ammortizzato mediante un addestramento di durata maggiore, poiché la compilazione rende le fasi future molto più veloci. Il sovraccarico iniziale di compilazione dipende dalla dimensione del modello, dalla dimensione dei tensori di input e dalla distribuzione delle forme dei tensori di input.
Uso errato di /XLA quando si utilizza direttamente PyTorch APIs PyTorch
PyTorch/XLA definisce un set di strumenti APIs per sostituire parte della formazione esistente. PyTorch APIs Il mancato utilizzo corretto porta al fallimento dell' PyTorch addestramento.
-
Uno degli errori più comuni nella compilazione di un PyTorch modello è dovuto a un tipo di dispositivo errato per operatori e tensori. Per compilare correttamente un PyTorch modello, assicuratevi di utilizzare dispositivi XLA (
xm.xla_device()
) anziché utilizzare CUDA o combinare dispositivi CUDA e dispositivi XLA. -
mark_step()
è una barriera solo per XLA. La mancata impostazione corretta causa l'interruzione del processo di addestramento. -
PyTorch/XLA offre una formazione distribuita aggiuntiva. APIs Se non si esegue una programmazione APIs corretta, i gradienti vengono raccolti in modo errato, con conseguente errore di convergenza dell'addestramento.
Per configurare correttamente PyTorch lo script ed evitare i suddetti utilizzi errati dell'API, consulta. Modelli linguistici di grandi dimensioni utilizzati PyTorch direttamente (senza l'API Hugging Face Transformers Trainer)