Buone pratiche e considerazioni su SageMaker Training Compiler - Amazon SageMaker AI

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

Buone pratiche e considerazioni su SageMaker Training Compiler

Importante

Amazon Web Services (AWS) annuncia che non sono previsti nuovi rilasci o nuove versioni di Compilatore SageMaker per l’addestramento. È possibile continuare a utilizzare Compilatore SageMaker per l’addestramento tramite i Container AWS per il Deep Learning (Container DL) esistenti per SageMaker Training. È importante notare che, sebbene i Container DL esistenti rimangano accessibili, non riceveranno più patch o aggiornamenti da AWS, in linea con la policy di supporto per i framework dei Container AWS per il Deep Learning.

Leggere le seguenti migliori pratiche e considerazioni quando si usa SageMaker Training Compiler.

Best practice

Utilizzare le seguenti linee guida per ottenere i migliori risultati quando si eseguono porocessi di addestramento con SageMaker Training Compiler.

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

  • 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'addestramento, il che in genere consente di inserire un batch_size più grande nella memoria della GPU. L'utilizzo di un batch_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 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 a SageMaker AI di inserire i log di debug nei log dei job di addestramento di 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 si importa un modello PyTorch e si desidera controllarlo, assicurarsi di utilizzare la funzione di salvataggio del modello di PyTorch/XLA per controllare correttamente il modello. Per ulteriori informazioni sulla funzione, consultare torch_xla.core.xla_model.save nella documentazione di PyTorch on XLA Devices.

    Per informazioni su come aggiungere modifiche allo script PyTorch, consultare Modelli linguistici di grandi dimensioni che utilizzano direttamente PyTorch (senza l'API Hugging Face Transformers Trainer).

    Per ulteriori informazioni sull'effettiva applicazione dell'utilizzo della funzione di salvataggio del modello, vedere Checkpoint Writing and Loading in Hugging Face on PyTorch/XLA TPUs: Faster and cheaper training blog.

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

    • Utilizzare istanze con più GPU invece di 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.

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

Quando si usa SageMaker Training Compiler, tenere presenti le informazioni seguenti.

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)

    In PyTorch, ad esempio, evitare 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 si desidera comunque valutare periodicamente il modello durante l'addestramento mentre si utilizza SageMaker Training Compiler, si consiglia di effettuare il logging e il checkpoint a 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 delle API PyTorch/XLA quando si utilizza direttamente PyTorch

PyTorch/XLA definisce un set di API per sostituire alcune delle API di addestramento PyTorch esistenti. Un utilizzo non corretto comporta il fallimento dell'addestramento su PyTorch.

  • Uno degli errori più tipici durante la compilazione di un modello PyTorch è dovuto a un tipo di dispositivo errato per operatori e tensori. Per compilare correttamente un modello PyTorch, assicurarsi di utilizzare dispositivi XLA (xm.xla_device()) invece di usare CUDA o mescolare 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 fornisce API di addestramento distribuite aggiuntive. La mancata programmazione corretta delle API causa una raccolta errata dei gradienti, il che provoca un errore di convergenza dell'addestramento.

Per configurare correttamente lo script PyTorch ed evitare i suddetti usi errati dell'API, vedere Modelli linguistici di grandi dimensioni che utilizzano direttamente PyTorch (senza l'API Hugging Face Transformers Trainer).