Multi-GPU Deep Learning auf AWS Sagemaker mit TF.Distribute

Blog

Multi-GPU Deep Learning auf AWS Sagemaker mit TF.Distribute

Einstieg

Zuerst müssen wir unsere Optionen für die Ausführung von Deep Learning auf AWS Sagemaker verstehen.

  1. Führen Sie Ihren Code in einer Notebook-Instanz aus
  2. Führen Sie Ihren Code in einem maßgeschneiderten Sagemaker TensorFlow-Container aus

In diesem Artikel konzentrieren wir uns auf Option #2, weil sie billiger ist und das beabsichtigte Design von Sagemaker ist.

(Option 1 ist ein guter Einstieg, aber teurer, da Sie für jede Sekunde bezahlen, die die Notebook-Instanz ausgeführt wird).

Ausführen eines Sagemaker TensorFlow-Containers

Sagemaker TensorFlow-Container bieten viel Flexibilität, aber wir werden uns auf das Wesentliche konzentrieren.

Foto von Der Fall von Matma An Unsplash

Um zu beginnen, müssen wir eine Sagemaker Notebook-Instanz starten und unsere Daten auf S3 speichern. Wenn Sie nicht wissen, wie das geht, überprüfe ich einige einfache Optionen auf mein Blog . Sobald wir unsere Daten in S3 haben, können wir ein Jupyter-Notebook starten (aus unserer Notebook-Instanz) und starten Sie die Codierung. Dieses Notizbuch ist für den Start Ihres Trainingsjobs oder Ihres Sagemaker TensorFlow-Containers verantwortlich.

Auch hier konzentrieren wir uns auf das Wesentliche. Wir benötigen eine Variable, um anzugeben, wo sich unsere Daten befinden, und dann müssen wir diesen Speicherort zu einem Wörterbuch hinzufügen.

data_s3 = 's3:///' inputs = {'data':data_s3}

Ziemlich einfach. Jetzt müssen wir ein Sagemaker TensorFlow-Containerobjekt erstellen.

Unsere Einstiegspunkt ist ein Python-Skript (die wir später machen) die unseren gesamten Modellierungscode enthält. Wir wollen auch script_mode =Richtig, da wir unser eigenes Trainingsskript ausführen.

Unsere train_instance_type ist ein Sagemaker-Instanztyp mit mehreren GPUs. Sie finden eine vollständige Liste der Sagemaker-Instanztypen Hier . Beachten Sie, dass ein ml.p3.8xlarge 4 . läuft V100 NVIDIA-GPUs . Und da wir MirroredStrategy _(dazu später mehr) verwenden werden, brauchen wirtrain_instance_count=1. Das ist also 1 Maschine mit 4 V100s.

Außerdem müssen wir **output_path ** auf einen Speicherort auf S3 setzen. Hier speichert Sagemaker automatisch alles, was wir in unserem Trainingsskript im Pfad /opt/ml/model speichern. Wenn wir beispielsweise unser endgültiges Modell in unserem Trainingsskript im Containerpfad /opt/ml/model speichern, lädt Sagemaker das Modell nach Abschluss des Trainingsjobs an unseren S3-Speicherort.

Die anderen Einstellungen können Sie vorerst in Ruhe lassen oder bei Bedarf weiter recherchieren. Zusammenfassend sind die wichtigsten Einstellungen, die wir richtig machen müssen, **entry_point, script_mode, train_instance_type, **und Ausgabepfad . (Und dann brauchen wir für MirroredStrategy train_instance_count=1).

# create estimator estimator = TensorFlow(entry_point='jigsaw_DistilBert_SingleRun_v1_sm_tfdist0.py', train_instance_type='ml.p3.8xlarge', output_path='s3://', train_instance_count=1, role=sagemaker.get_execution_role(), framework_version='2.1.0', py_version='py3', script_mode=True)

Wir können unseren Trainingsjob beginnen, indem wir die folgende Zeile ausführen.

estimator.fit(inputs)

Beachten Sie, dass wir unser Wörterbuch eingefügt haben (die unseren S3-Standort enthält) als Eingabe für ‚fit()‘. Bevor wir diesen Code ausführen, müssen wir das Python-Skript erstellen, das wir zugewiesen haben Einstiegspunkt (sonst hat unser Container keinen Code zum Ausführen :-P) .

Trainingsskript erstellen

jquery ajax form einreichen beispiel

Mein Trainingsskript auf GitHub ist sehr beschäftigt, da ich eine Version von BERT mit einigen Daten von Kaggle ausführe. Das einzige, was wir brauchen, ist Zugriff auf unsere Daten, und dann können wir alle Ergebnisse im Containerpfad /opt/ml/model speichern.

Foto von Brooks Leibee An Unsplash

Der einfachste Weg, Ihre Daten zu erfassen, besteht darin, Ihren S3-Standort in Ihrem Trainingsskript fest zu codieren.

Wir könnten auch den S3-Standort aus dem von ‘estimator.fit(inputs)’ übergebenen Wert abrufen. Wir können dies tun mit argparse .

def parse_args(): parser = argparse.ArgumentParser() parser.add_argument(‘ — data’, type=str, default=os.environ.get(‘SM_CHANNEL_DATA’)) return parser.parse_known_args() args, _ = parse_args()

Wenn wir unseren Trainingsjob nur in einem Sagemaker-Container ausführen wollten, ist das im Grunde alles, was wir brauchen! Wenn wir nun ein Multi-GPU-Training mit tf.distribute durchführen möchten, benötigen wir noch ein paar weitere Dinge.

#deep-learning #deep-learning

zudatascience.com

Multi-GPU Deep Learning auf AWS Sagemaker mit TF.Distribute

Weitere Informationen zu MirroredStrategy finden Sie in der TensorFlow-Dokumentation. Jetzt werden wir unser Strategieobjekt in unserem gesamten Trainingscode verwenden.