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

TensorFlow

Implementa il tuo TensorFlow modello all' SageMaker intelligenza artificiale ed esegui il processo di formazione con Training Compiler SageMaker .

TensorFlow Modelli

SageMaker Training Compiler ottimizza automaticamente i carichi di lavoro di addestramento dei modelli basati sull' TensorFlow API nativa o sull'API Keras di alto livello.

Suggerimento

Per la preelaborazione del set di dati di input, assicurati di utilizzare una forma di input statica. La forma di input dinamica può avviare la ricompilazione del modello e aumentare il tempo totale di addestramento.

Utilizzo di Keras (consigliato)

Per la migliore accelerazione del compilatore, consigliamo di utilizzare modelli che sono sottoclassi di Keras (tf.keras.Model). TensorFlow

Per l’addestramento su una singola GPU

Non è necessario apportare ulteriori modifiche allo script di addestramento.

Senza Keras

SageMaker Training Compiler non supporta l'esecuzione rapida in. TensorFlow Di conseguenza, è necessario avvolgere il modello e i cicli di addestramento con la TensorFlow funzione decorator (@tf.function) per sfruttare l'accelerazione del compilatore.

SageMaker Training Compiler esegue un'ottimizzazione a livello di grafico e utilizza il decoratore per assicurarsi che le funzioni siano impostate per l'esecuzione TensorFlow in modalità grafico.

Per l’addestramento su una singola GPU

TensorFlow La versione 2.0 o successiva ha l'esecuzione eager attiva per impostazione predefinita, quindi è necessario aggiungere il @tf.function decoratore davanti a ogni funzione che si utilizza per costruire un modello. TensorFlow

TensorFlow Modelli con Hugging Face Transformers

TensorFlow i modelli con Hugging Face Transformers si basano sull'API tf.keras.Model. TensorFlow Hugging Face Transformers fornisce anche classi di modelli preaddestrate per aiutare TensorFlow a ridurre lo sforzo di configurazione dei modelli di elaborazione del linguaggio naturale (NLP). Dopo aver creato il tuo script di addestramento utilizzando la libreria Transformers, puoi eseguire lo script di addestramento utilizzando lo HuggingFace stimatore SageMaker AI con la classe di configurazione Training Compiler, come mostrato nell'argomento precedente all'indirizzo SageMaker . Esegui lavori TensorFlow di formazione con SageMaker Training Compiler

SageMaker Training Compiler ottimizza automaticamente i carichi di lavoro di addestramento dei modelli basati sull' TensorFlow API nativa o sull'API Keras di alto livello, come i modelli Transformer. TensorFlow

Suggerimento

Quando si crea un tokenizzatore per un modello NLP utilizzando 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.

Utilizzo di Keras

Per la migliore accelerazione del compilatore, consigliamo di utilizzare modelli che sono sottoclassi di Keras (tf.keras.Model). TensorFlow Come indicato nella pagina Quick tour nella documentazione di Hugging Face Transformers, è possibile utilizzare i modelli come normali modelli Keras. TensorFlow

Per l’addestramento su una singola GPU

Non è necessario apportare ulteriori modifiche allo script di addestramento.

Per l’addestramento distribuito

SageMaker L'accelerazione di Training Compiler funziona in modo trasparente per i carichi di lavoro con più GPU quando il modello viene costruito e addestrato utilizzando Keras nell'ambito richiesto. APIs tf.distribute.Strategy.scope()

  1. Scegli la giusta strategia di addestramento distribuito.

    1. Per una GPU multipla a nodo singolo, usa tf.distribute.MirroredStrategy per impostare la strategia.

      strategy = tf.distribute.MirroredStrategy()
    2. Per una GPU multi-nodo, aggiungi il codice seguente per impostare correttamente la configurazione di addestramento distribuito prima di creare la strategia. TensorFlow

      def set_sm_dist_config(): DEFAULT_PORT = '8890' DEFAULT_CONFIG_FILE = '/opt/ml/input/config/resourceconfig.json' with open(DEFAULT_CONFIG_FILE) as f: config = json.loads(f.read()) current_host = config['current_host'] tf_config = { 'cluster': { 'worker': [] }, 'task': {'type': 'worker', 'index': -1} } for i, host in enumerate(config['hosts']): tf_config['cluster']['worker'].append("%s:%s" % (host, DEFAULT_PORT)) if current_host == host: tf_config['task']['index'] = i os.environ['TF_CONFIG'] = json.dumps(tf_config) set_sm_dist_config()

      Usa tf.distribute.MultiWorkerMirroredStrategy per impostare la strategia.

      strategy = tf.distribute.MultiWorkerMirroredStrategy()
  2. Utilizzando la strategia che preferisci, esegui il wrapping del modello.

    with strategy.scope(): # create a model and do fit

Senza Keras

Se desideri portare modelli personalizzati con cicli di allenamento personalizzati utilizzando TensorFlow senza Keras, dovresti avvolgere il modello e il ciclo di allenamento con la TensorFlow funzione decorator () @tf.function per sfruttare l'accelerazione del compilatore.

SageMaker Training Compiler esegue un'ottimizzazione a livello di grafico e utilizza il decoratore per assicurarsi che le funzioni siano impostate per l'esecuzione in modalità grafico. TensorFlow

Per l’addestramento su una singola GPU

TensorFlow La versione 2.0 o successiva ha l'esecuzione eager attiva per impostazione predefinita, quindi è necessario aggiungere il @tf.function decoratore davanti a ogni funzione che si utilizza per costruire un modello. TensorFlow

Per l’addestramento distribuito

Oltre alle modifiche necessarie per l'utilizzo di Keras per l'addestramento distribuito, è necessario assicurarsi che le funzioni da eseguire su ciascuna GPU siano annotate con @tf.function, mentre le funzioni di comunicazione tra GPU non siano annotate. Il codice di addestramento deve essere simile a quello riportato nell'esempio:

@tf.function() def compiled_step(inputs, outputs): with tf.GradientTape() as tape: pred=model(inputs, training=True) total_loss=loss_object(outputs, pred)/args.batch_size gradients=tape.gradient(total_loss, model.trainable_variables) return total_loss, pred, gradients def train_step(inputs, outputs): total_loss, pred, gradients=compiled_step(inputs, outputs) if args.weight_decay > 0.: gradients=[g+v*args.weight_decay for g,v in zip(gradients, model.trainable_variables)] optimizer.apply_gradients(zip(gradients, model.trainable_variables)) train_loss.update_state(total_loss) train_accuracy.update_state(outputs, pred) @tf.function() def train_step_dist(inputs, outputs): strategy.run(train_step, args= (inputs, outputs))

Tieni presente che questa istruzione può essere utilizzata sia per multi-GPU a nodo singolo che per multi-GPU multi-nodo.