Verwenden Sie die SMDDP Bibliothek in Ihrem TensorFlow Schulungsskript (veraltet) - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie die SMDDP Bibliothek in Ihrem TensorFlow Schulungsskript (veraltet)

Wichtig

Die SMDDP Bibliothek hat die Unterstützung für Versionen ab Version 2.11.0 eingestellt TensorFlow und ist ab Version DLCs TensorFlow 2.11.0 nicht mehr verfügbar. Frühere Versionen TensorFlow DLCs mit installierter SMDDP Bibliothek finden Sie unter. Unterstützte Frameworks

Die folgenden Schritte zeigen Ihnen, wie Sie ein TensorFlow Trainingsskript ändern, um die verteilte parallel Datenbibliothek zu nutzen SageMaker. 

Die Bibliothek ist APIs so konzipiert, dass sie APIs Horovod ähnelt. Weitere Informationen zu den einzelnen Angeboten, für API die die Bibliothek anbietet TensorFlow, finden Sie in der TensorFlow APIDokumentation parallel SageMaker Verteilung von Daten.

Anmerkung

SageMaker Distributed Data Parallel ist an TensorFlow Trainingsskripte anpassbar, die aus tf Kernmodulen mit Ausnahme tf.keras von Modulen bestehen. SageMaker Distributed Data Parallel unterstützt die TensorFlow Keras-Implementierung nicht.

Anmerkung

Die Bibliothek für SageMaker verteilte Datenparallelität unterstützt Automatic Mixed Precision (AMP) standardmäßig. Zum Aktivieren sind außer den Änderungen auf Framework-Ebene keine AMP weiteren Aktionen an Ihrem Trainingsskript erforderlich. Wenn Farbverläufe aktiviert sindFP16, führt die SageMaker Datenparallelitätsbibliothek ihre Operation in aus. AllReduce FP16 Weitere Informationen AMP APIs zur Implementierung in Ihr Trainingsskript finden Sie in den folgenden Ressourcen:

  1. Importieren Sie den TensorFlow Client der Bibliothek und initialisieren Sie ihn.

    import smdistributed.dataparallel.tensorflow as sdp  sdp.init()
  2. Verbinde jeden GPU smdistributed.dataparallel Prozess mit local_rank — dies bezieht sich auf den relativen Rang des Prozesses innerhalb eines bestimmten Knotens. Das sdp.tensorflow.local_rank() API gibt Ihnen den lokalen Rang des Geräts an. Der Führungsnoten hat Rang 0, und die Worker-Knoten haben Rang 1, 2, 3, usw. Dies wird im folgenden Codeblock als sdp.local_rank() aufgerufen. set_memory_growthsteht nicht in direktem Zusammenhang mit SageMaker Distributed, muss aber für verteiltes Training mit TensorFlow eingestellt werden.

    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')
  3. Skalieren Sie die Lernrate nach der Anzahl der Auftragnehmer. Das sdp.tensorflow.size() API gibt Ihnen die Anzahl der Mitarbeiter im Cluster. Dies wird im folgenden Codeblock als sdp.size() aufgerufen.

    learning_rate = learning_rate * sdp.size()
  4. Verwenden Sie die DistributedGradientTape der Bibliothek, um den AllReduce Betrieb während des Trainings zu optimieren. tf.GradientTape ist damit abgeschlossen. 

    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)
  5. Senden Sie die anfänglichen Modellvariablen vom Führungsknoten (Rang 0) an alle Worker-Knoten (Ränge 1 bis n). Dies ist erforderlich, um eine konsistente Initialisierung in allen Auftragnehmer-Rängen sicherzustellen. Verwenden Sie die, sdp.tensorflow.broadcast_variables API nachdem die Modell- und Optimizer-Variablen initialisiert wurden. Dies wird im folgenden Codeblock als aufgerufen. sdp.broadcast_variables()

    sdp.broadcast_variables(model.variables, root_rank=0) sdp.broadcast_variables(opt.variables(), root_rank=0)
  6. Ändern Sie abschließend Ihr Skript so, dass es Checkpoints nur auf dem Führungsknoten speichert. Der Führungsknoten hat ein synchronisiertes Modell. Dadurch wird auch vermieden, dass Worker-Knoten die Checkpoints überschreiben und die Checkpoints möglicherweise beschädigen.

    if sdp.rank() == 0:     checkpoint.save(checkpoint_dir)

Im Folgenden finden Sie ein Beispiel für ein TensorFlow Trainingsskript für verteiltes Training mit der Bibliothek.

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)

Nachdem Sie die Anpassung Ihres Trainingsskripts abgeschlossen haben, fahren Sie mit Starten verteilter Trainingsjobs SMDDP mit SageMaker Python SDK fort.