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à.
Usa la SMDDP libreria nello script di TensorFlow formazione (obsoleto)
Importante
La SMDDP libreria ha interrotto il supporto TensorFlow e non è più disponibile nelle TensorFlow versioni successive DLCs alla v2.11.0. Per trovare le versioni precedenti TensorFlow DLCs con la SMDDP libreria installata, consulta. Framework supportati
I passaggi seguenti mostrano come modificare uno script di TensorFlow addestramento per utilizzare la libreria parallela SageMaker di dati distribuiti.
La libreria APIs è progettata per essere simile a APIs Horovod. Per ulteriori dettagli su ciascuno dei API prodotti offerti dalla libreria TensorFlow, consulta la TensorFlow APIdocumentazione parallela dei dati SageMaker distribuiti
Nota
SageMaker distributed data parallel è adattabile agli script di TensorFlow addestramento composti da moduli tf
principali ad eccezione tf.keras
dei moduli. SageMaker distributed data parallel non supporta TensorFlow l'implementazione Keras.
Nota
La libreria di parallelismo dei dati SageMaker distribuiti supporta immediatamente Automatic Mixed Precision (AMP). Non è necessaria alcuna azione aggiuntiva per abilitare AMP altre modifiche oltre alle modifiche a livello di framework allo script di formazione. Se sono presenti dei gradienti, la libreria di parallelismo SageMaker dei dati FP16 esegue le sue operazioni in. AllReduce
FP16 Per ulteriori informazioni sull'implementazione dello script AMP APIs di formazione, consultate le seguenti risorse:
-
Frameworks: TensorFlow nella documentazione
sulle prestazioni di NVIDIADeep Learning -
Automatic Mixed Precision per il Deep Learning
nei documenti per sviluppatori NVIDIA -
TensorFlow precisione mista APIs
nella documentazione TensorFlow
-
Importa il TensorFlow client della libreria e inizializzalo.
import smdistributed.dataparallel.tensorflow as sdp sdp.init()
-
GPUAssocia ciascuno di essi a un singolo
smdistributed.dataparallel
processo conlocal_rank
—questo si riferisce al rango relativo del processo all'interno di un determinato nodo. Tisdp.tensorflow.local_rank()
API fornisce il rango locale del dispositivo. Il nodo principale è di classificazione 0 e i nodi di lavoro sono di grado 1, 2, 3 e così via. Questo viene richiamato nel seguente blocco di codice comesdp.local_rank()
.set_memory_growth
non è direttamente correlato alla SageMaker distribuzione, ma deve essere impostata per l'addestramento distribuito con TensorFlow.gpus = tf.config.experimental.list_physical_devices('GPU') for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) if gpus: tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU')
-
Scala il tasso di apprendimento in base al numero di worker. ti
sdp.tensorflow.size()
API fornisce il numero di lavoratori nel cluster. Questo viene richiamato nel seguente blocco di codice comesdp.size()
.learning_rate = learning_rate * sdp.size()
-
Utilizza le librerie
DistributedGradientTape
per ottimizzare le operazioniAllReduce
durante l'addestramento. Questo esegue il wrapping ditf.GradientTape
.with tf.GradientTape() as tape: output = model(input) loss_value = loss(label, output) # SageMaker data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape tape = sdp.DistributedGradientTape(tape)
-
Trasmetti le variabili iniziali del modello dal nodo leader (rango 0) a tutti i nodi di lavoro (dai ranghi da 1 a n). Ciò è necessario per garantire un'inizializzazione coerente tra tutte le classificazioni dei worker. Utilizza le variabili
sdp.tensorflow.broadcast_variables
API dopo l'inizializzazione del modello e dell'ottimizzatore. Viene richiamato nel seguente blocco di codice come.sdp.broadcast_variables()
sdp.broadcast_variables(model.variables, root_rank=0) sdp.broadcast_variables(opt.variables(), root_rank=0)
-
Infine, modifica dello script per salvare i checkpoint solo sul nodo principale. Il nodo principale ha un modello sincronizzato. Ciò evita inoltre che i nodi di lavoro sovrascrivano i checkpoint e possano danneggiarli.
if sdp.rank() == 0: checkpoint.save(checkpoint_dir)
Di seguito è riportato un esempio di script TensorFlow di formazione per la formazione distribuita con la libreria.
import tensorflow as tf # SageMaker data parallel: Import the library TF API import smdistributed.dataparallel.tensorflow as sdp # SageMaker data parallel: Initialize the library sdp.init() gpus = tf.config.experimental.list_physical_devices('GPU') for gpu in gpus: tf.config.experimental.set_memory_growth(gpu, True) if gpus: # SageMaker data parallel: Pin GPUs to a single library process tf.config.experimental.set_visible_devices(gpus[sdp.local_rank()], 'GPU') # Prepare Dataset dataset = tf.data.Dataset.from_tensor_slices(...) # Define Model mnist_model = tf.keras.Sequential(...) loss = tf.losses.SparseCategoricalCrossentropy() # SageMaker data parallel: Scale Learning Rate # LR for 8 node run : 0.000125 # LR for single node run : 0.001 opt = tf.optimizers.Adam(0.000125 * sdp.size()) @tf.function def training_step(images, labels, first_batch): with tf.GradientTape() as tape: probs = mnist_model(images, training=True) loss_value = loss(labels, probs) # SageMaker data parallel: Wrap tf.GradientTape with the library's DistributedGradientTape tape = sdp.DistributedGradientTape(tape) grads = tape.gradient(loss_value, mnist_model.trainable_variables) opt.apply_gradients(zip(grads, mnist_model.trainable_variables)) if first_batch: # SageMaker data parallel: Broadcast model and optimizer variables sdp.broadcast_variables(mnist_model.variables, root_rank=0) sdp.broadcast_variables(opt.variables(), root_rank=0) return loss_value ... # SageMaker data parallel: Save checkpoints only from master node. if sdp.rank() == 0: checkpoint.save(checkpoint_dir)
Dopo aver completato l'adattamento dello script di addestramento, passa a Avvio di lavori di formazione distribuiti SMDDP utilizzando Python SageMaker SDK.