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 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.
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 TransformersHuggingFace
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
Argomenti
Utilizzo di Keras
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.
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()
-
Scegli la giusta strategia di addestramento distribuito.
-
Per una GPU multipla a nodo singolo, usa
tf.distribute.MirroredStrategy
per impostare la strategia.strategy = tf.distribute.MirroredStrategy()
-
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()
-
-
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.