SageMaker Buone pratiche e considerazioni su Training Compiler - 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à.

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 crei un tokenizer per un NLP modello utilizzando la libreria Hugging Face Transformers nello script di addestramento, assicurati di utilizzare una forma tensoriale di input statica specificando. padding='max_length' Non utilizzare padding='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 troncation nella documentazione di Hugging Face Transformers.

  • Misurate l'utilizzo della GPU memoria per assicurarvi di utilizzare la dimensione massima del batch che può contenere la memoria. GPU Amazon SageMaker Training Compiler riduce l'ingombro di memoria del modello durante l'allenamento, il che in genere consente di inserirne uno più grande batch_size nella GPU memoria. L'utilizzo di uno più batch_size grande consente un migliore GPU utilizzo e riduce il tempo totale di allenamento.

    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 a k, è necessario eseguire la rettifica di learning_rate in modo lineare (semplice moltiplicazione per k) o moltiplicare per la radice quadrata di k. Questo serve a ottenere un comportamento di convergenza identico o simile nel tempo di addestramento ridotto. Per un riferimento ai modelli batch_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 parametro compiler_config. Ciò consente di SageMaker inserire i registri di debug nei registri dei lavori di formazione. SageMaker

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

Migliori pratiche per PyTorch
  • Se porti un PyTorch modello e vuoi controllarlo, assicurati di utilizzare la funzione di salvataggio XLA del modello di PyTorch/per effettuare il checkpoint corretto del tuo modello. Per ulteriori informazioni sulla funzione, consultate la torch_xla.core.xla_model.savedocumentazione PyTorch su XLA Devices.

    Per informazioni su come aggiungere le modifiche allo PyTorch script, consultaModelli linguistici di grandi dimensioni utilizzati PyTorch direttamente (senza l'API Hugging Face Transformers Trainer).

    Per ulteriori informazioni sull'applicazione effettiva dell'utilizzo della funzione di salvataggio del modello, vedere Checkpoint Writing and Loading nel blog di formazione Hugging Face PyTorch su XLATPUs/: Faster and cheap training.

  • Per ottenere il tempo di addestramento ottimale per l'addestramento distribuito, considerare quanto segue.

    • Usa istanze con più istanze GPUs invece di usare istanze a GPU singola. Ad esempio, una singola istanza ml.p3dn.24xlarge ha tempi di addestramento più rapidi rispetto a 8 x ml.p3.2xlarge istanze.

    • Utilizza istanze con EFA supporto come e. ml.p3dn.24xlarge ml.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 SageMaker Training Compiler.

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/quando si utilizza direttamente PyTorch XLA APIs PyTorch

PyTorch/XLAdefinisce un set APIs per sostituire parte della PyTorch formazione esistenteAPIs. Il mancato utilizzo corretto porta al fallimento della PyTorch formazione.

  • 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, assicurati di utilizzare XLA devices (xm.xla_device()) invece di utilizzare CUDA o combinare CUDA dispositivi e dispositivi. XLA

  • mark_step()è una barriera solo perXLA. La mancata impostazione corretta causa l'interruzione del processo di addestramento.

  • PyTorch/XLAfornisce una formazione distribuita aggiuntivaAPIs. La mancata programmazione APIs corretta causa una raccolta errata dei gradienti, con conseguente errore di convergenza dell'addestramento.

Per configurare correttamente PyTorch lo script ed evitare gli usi scorretti sopra menzionati, consulta. API Modelli linguistici di grandi dimensioni utilizzati PyTorch direttamente (senza l'API Hugging Face Transformers Trainer)