GPUs zum Trainieren von Modellen in der Cloud verwenden

Graphics Processing Units (GPUs) können den Trainingsprozess für viele Deep Learning-Modelle erheblich beschleunigen. Trainingsmodelle für Aufgaben wie Bildklassifizierung, Videoanalyse und Natural Language Processing umfassen rechenintensive Matrixmultiplikationen und andere Vorgänge, die die massiv parallele Architektur einer GPU nutzen können.

Es kann tagelang dauern, ein Deep Learning-Modell, das intensive Berechnungsaufgaben mit großen Datasets ausführt, auf einem einzigen Prozessor zu trainieren. Falls Sie Ihr Programm jedoch darauf ausrichten, diese Aufgaben auf eine oder mehrere GPUs zu übertragen, können Sie die Trainingsdauer auf einige Stunden statt einige Tage reduzieren.

Hinweis

Mit AI Platform Training können Sie eine TensorFlow-Trainingsanwendung auf einer GPU-fähigen Maschine ausführen. Lesen Sie die Anleitung zur Verwendung von GPUs mit TensorFlow und den unten stehenden Abschnitt zum Anpassen von Trainingscode zur Verwendung von GPUs, damit in Ihrer Anwendung verfügbare GPUs verwendet werden.

Sie können GPUs auch mit anderen Frameworks für maschinelles Lernen als TensorFlow verwenden, wenn Sie für das Training einen benutzerdefinierten Container verwenden.

Einige Modelle profitieren nicht von der Ausführung auf GPUs. GPUs empfehlen sich für große, komplexe Modelle mit vielen mathematischen Operationen. Selbst in diesem Fall sollten Sie zuerst testen, ob die Vorteile von GPUs überwiegen. Führen Sie dazu für eine kleine Stichprobe Ihrer Daten ein Training aus.

GPU-fähige Maschinen anfordern

Wenn Sie GPUs in der Cloud verwenden möchten, haben Sie verschiedene Möglichkeiten, den Trainingsjob für den Zugriff auf GPU-fähige Maschinen zu konfigurieren:

  • Verwenden Sie die Skalierungsstufe BASIC_GPU.
  • Verwenden Sie Compute Engine-Maschinentypen und hängen Sie GPUs an.
  • Verwenden Sie GPU-fähige Legacy-Maschinentypen.

Einfache GPU-fähige Maschine

Wenn Sie die Verwendung von AI Platform Training erlernen oder mit GPU-fähigen Maschinen experimentieren, können Sie die Skalierungsstufe auf BASIC_GPU setzen, um eine einzelne Worker-Instanz mit einer einzelnen NVIDIA Tesla K80-GPU zu erhalten.

Compute Engine-Maschinentypen mit GPU-Anhängen

Wenn Sie Ihren Trainingsjob alternativ mit Compute Engine-Maschinentypen konfigurieren möchten, können Sie eine benutzerdefinierte Anzahl von GPUs anhängen, um den Job zu beschleunigen:

  • Setzen Sie die Skalierungsstufe auf CUSTOM.
  • Konfigurieren Sie den Master-Worker und alle anderen Aufgabentypen (Worker, Parameterserver oder Evaluator), die Teil Ihres Jobs sind, für die Verwendung gültiger Compute Engine-Maschinentypen.
  • Fügen Sie ein Feld acceleratorConfig mit dem Typ und der Anzahl der gewünschten GPUs zu masterConfig, workerConfig, parameterServerConfig oder evaluatorConfig hinzu, je nachdem, welche VM-Instanzen Sie beschleunigen möchten. Sie können die folgenden GPU-Typen verwenden:
    • NVIDIA_TESLA_K80
    • NVIDIA_TESLA_P4
    • NVIDIA_TESLA_P100
    • NVIDIA_TESLA_T4
    • NVIDIA_TESLA_V100

Beim Erstellen einer gültigen acceleratorConfig müssen Sie einige Einschränkungen berücksichtigen:

  1. Sie können in der Konfiguration nur eine bestimmte Anzahl von GPUs verwenden. So können Sie beispielsweise zwei oder vier NVIDIA Tesla T4-GPUs anhängen, aber nicht drei. In der unten stehenden Kompatibilitätstabelle finden Sie Informationen dazu, welche Anzahl für die einzelnen GPU-Typen gültig ist.

  2. Achten Sie darauf, dass jede Ihrer GPU-Konfigurationen für den Maschinentyp, an den Sie sie anhängen, ausreichend virtuelle CPUs und genügend Arbeitsspeicher bietet. Wenn Sie beispielsweise für Ihre Worker n1-standard-32 verwenden, hat jeder Worker 32 virtuelle CPUs und 120 GB Arbeitsspeicher. Da jede NVIDIA Tesla V100-GPU bis zu 8 virtuelle CPUs und 52 GB Arbeitsspeicher bereitstellen kann, müssen Sie an jeden n1-standard-32-Worker mindestens 4 GPUs anhängen, um seine Anforderungen zu erfüllen. (2 GPUs bieten nicht genügend Ressourcen und Sie können keine drei GPUs angeben.)

    Sie finden die Kompatibilitäten in der Tabelle mit den Maschinentypspezifikationen und im Vergleich der GPUs für Compute-Arbeitslasten sowie in der unten stehenden Kompatibilitätstabelle.

    In bestimmten Fällen gelten für GPU-Ressourcen für AI Platform Training die folgenden zusätzlichen Einschränkungen:

    • Eine Konfiguration mit 8 NVIDIA Tesla K80-GPUs bietet in allen Regionen und Zonen nur bis zu 208 GB Arbeitsspeicher.
    • Eine Konfiguration mit 4 NVIDIA Tesla P100-GPUs unterstützt in allen Regionen und Zonen nur bis zu 64 virtuelle CPUs und bis zu 208 GB Arbeitsspeicher.
  3. Sie müssen Ihren Trainingsjob an eine Region senden, die Ihre GPU-Konfiguration unterstützt. Weitere Informationen zur Regionsunterstützung finden Sie unten.

Die folgende Tabelle bietet eine Kurzübersicht darüber, wie viele der einzelnen Beschleunigertypen Sie an einen bestimmten Compute Engine-Maschinentyp anhängen können:

Gültige GPU-Anzahl für Maschinentypen
Maschinentyp NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-standard-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-standard-64 4 4 8
n1-standard-96 4 4 8
n1-highmem-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highmem-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highmem-64 4 4 8
n1-highmem-96 4 4 8
n1-highcpu-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highcpu-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highcpu-64 8 4 4 4 8
n1-highcpu-96 4 4 8

Unten finden Sie ein Beispiel für das Senden eines Jobs mithilfe von Compute Engine-Maschinentypen mit angehängten GPUs.

Maschinentypen mit enthaltenen GPUs

Anstelle von acceleratorConfig können Sie auch einen Legacy-Maschinentyp auswählen, der GPUs enthält:

  • Setzen Sie die Skalierungsstufe auf CUSTOM.
  • Konfigurieren Sie den Master-Worker und alle anderen Aufgabentypen (Worker, Parameterserver oder Evaluator), die beschleunigt werden sollen, je nach der Anzahl der GPUs und des für die Aufgabe erforderliche Beschleunigers für die Verwendung eines der folgenden GPU-fähigen Maschinentypen:
    • standard_gpu: Eine NVIDIA Tesla K80-GPU
    • complex_model_m_gpu: Vier NVIDIA Tesla K80-GPUs
    • complex_model_l_gpu: Acht NVIDIA Tesla K80-GPUs
    • standard_p100: Eine NVIDIA Tesla P100-GPU
    • complex_model_m_p100: Vier NVIDIA Tesla P100-GPUs
    • standard_v100: Eine NVIDIA Tesla V100-GPU
    • large_model_v100: Eine NVIDIA Tesla V100-GPU
    • complex_model_m_v100: Vier NVIDIA Tesla V100-GPUs
    • complex_model_l_v100: Acht NVIDIA Tesla V100-GPUs

Unten finden Sie ein Beispiel für das Senden eines Jobs mit GPU-fähigen Maschinentypen mit dem Befehl gcloud.

Weitere Informationen zum Vergleichen von Maschinentypen finden Sie hier.

Regionen mit Unterstützung für GPUs

Sie müssen Ihren Job in einer Region ausführen, die GPUs unterstützt. Die folgenden Regionen bieten derzeit Zugang zu GPUs:

  • us-west1
  • us-west2
  • us-central1
  • us-east1
  • us-east4
  • northamerica-northeast1
  • southamerica-east1
  • europe-west1
  • europe-west2
  • europe-west4
  • asia-south1
  • asia-southeast1
  • asia-east1
  • asia-northeast1
  • asia-northeast3
  • australia-southeast1

Darüber hinaus bieten einige dieser Regionen nur Zugang zu bestimmten GPU-Typen. Mehr Informationen zu den verfügbaren Regionen für AI Platform Training-Dienste, einschließlich Modelltraining und Online- bzw. Batchvorhersagen, finden Sie im Leitfaden für Regionen.

Wenn Ihr Trainingsjob mehrere GPU-Typen verwendet, müssen diese alle in einer einzigen Zone in Ihrer Region verfügbar sein. Sie können beispielsweise keinen Job in us-central1 mit einem Master-Worker ausführen, der NVIDIA Tesla T4-GPUs verwendet, mit Parameterservern, die NVIDIA Tesla K80-GPUs nutzen, und mit Workern, die NVIDIA Tesla P100-GPUs verwenden. Obwohl alle diese GPUs für Trainingsjobs in us-central1 verfügbar sind, bietet keine Zone in dieser Region alle drei GPU-Typen. Weitere Informationen zur Zonenverfügbarkeit von GPUs finden Sie im Vergleich von GPUs für Compute-Arbeitslasten.

Trainingsjobs senden

Sie können Ihren Trainingsjob mit dem Befehl gcloud ai-platform jobs submit training senden.

  1. Definieren Sie eine config.yaml-Datei, in der die gewünschten GPU-Optionen beschrieben werden. Die Struktur der YAML-Datei stellt die Ressource "Job" dar. Im Folgenden finden Sie zwei Beispiele für config.yaml-Dateien.

    Das erste zeigt eine Konfigurationsdatei für einen Trainingsjob unter Verwendung von Compute Engine-Maschinentypen, an die zum Teil GPUs angehängt sind:

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 T4 GPUs
      masterType: n1-highcpu-16
      masterConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 9 workers, each with 4 T4 GPUs
      workerCount: 9
      workerType: n1-highcpu-16
      workerConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: n1-highmem-8
    

    Das nächste Beispiel zeigt eine Konfigurationsdatei für einen Job mit einer ähnlichen Konfiguration wie oben. Bei dieser Konfiguration werden jedoch Legacy-Maschinentypen verwendet, die GPUs enthalten – also keine, an die mit acceleratorConfig GPUs angehängt wurden:

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 K80 GPUs
      masterType: complex_model_m_gpu
      # Configure 9 workers, each with 4 K80 GPUs
      workerCount: 9
      workerType: complex_model_m_gpu
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: large_model
    
  2. Senden Sie den Job mit dem Befehl gcloud und fügen Sie das Argument --config hinzu, das auf die Datei config.yaml verweist. Im folgenden Beispiel wird davon ausgegangen, dass Sie für die Werte einiger Argumente Umgebungsvariablen eingerichtet haben, die durch ein $-Zeichen gefolgt von Großbuchstaben gekennzeichnet sind:

    gcloud ai-platform jobs submit training $JOB_NAME \
            --package-path $APP_PACKAGE_PATH \
            --module-name $MAIN_APP_MODULE \
            --job-dir $JOB_DIR \
            --region us-central1 \
            --config config.yaml \
            -- \
            --user_arg_1 value_1 \
             ...
            --user_arg_n value_n
    

Sie können alternativ die Cluster-Konfigurationsdetails mit Befehlszeilen-Flags angeben, anstatt eine Konfigurationsdatei zu verwenden. Weitere Informationen zur Verwendung dieser Flags erhalten Sie hier.

Im folgenden Beispiel wird gezeigt, wie Sie einen Job mit der gleichen Konfiguration wie im ersten Beispiel senden (Compute Engine-Maschinentypen mit angehängten GPUs), ohne jedoch eine config.yaml-Datei zu verwenden:

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $APP_PACKAGE_PATH \
        --module-name $MAIN_APP_MODULE \
        --job-dir $JOB_DIR \
        --region us-central1 \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --master-accelerator count=4,type=nvidia-tesla-t4 \
        --worker-count 9 \
        --worker-machine-type n1-highcpu-16 \
        --worker-accelerator count=4,type=nvidia-tesla-t4 \
        --parameter-server-count 3 \
        --parameter-server-machine-type n1-highmem-8 \
        -- \
        --user_arg_1 value_1 \
         ...
        --user_arg_n value_n

Hinweise:

  • Wenn Sie eine Option sowohl in der Konfigurationsdatei (config.yaml) als auch als Befehlszeilen-Flag angeben, wird der Wert in der Konfigurationsdatei durch den Wert in der Befehlszeile überschrieben.
  • Das leere Flag -- markiert das Ende der gcloud-spezifischen Flags und den Anfang der USER_ARGS, die Sie an die Anwendung übergeben möchten.
  • Spezifische Flags von AI Platform Training, wie --module-name, --runtime-version und --job-dir, müssen vor dem leeren Flag -- stehen. Der AI Platform Training-Dienst interpretiert diese Flags.
  • Das Flag --job-dir muss, falls es angegeben wird, vor dem leeren Flag -- stehen, weil AI Platform Training --job-dir verwendet, um den Pfad zu validieren.
  • Wenn das Flag --job-dir angegeben wird, muss es auch von der Anwendung verarbeitet werden. Das Flag --job-dir steht zwar vor dem leeren Flag --, es wird aber trotzdem als Befehlszeilen-Flag an die Anwendung übergeben.
  • Sie können beliebig viele USER_ARGS definieren. AI Platform Training übergibt --user_first_arg, --user_second_arg usw. an Ihre Anwendung.

Weitere Einzelheiten zu den Optionen für das Senden von Jobs finden Sie in der Anleitung zum Starten eines Trainingsjobs.

Trainingscode für die Verwendung von GPUs anpassen

Wenn Sie für Ihren TensorFlow-Trainingsjob Keras oder Estimators verwenden und das Modell mit einer einzelnen VM mit einer GPU trainieren möchten, müssen Sie den Code für die GPU nicht anpassen.

Wenn Ihr Trainingscluster mehrere GPUs enthält, verwenden Sie in Ihrem Trainingscode die tf.distribute.Strategy API:

  • Für das Training auf einer einzelnen VM mit mehreren GPUs empfehlen wir die Verwendung der MirroredStrategy, die für Keras in TensorFlow 2.1 und höher vollständig unterstützt wird.
  • Informationen zum Training auf mehreren VMs mit GPUs finden Sie in den Empfehlungen für verteiltes Training.

Wenn Sie anpassen möchten, wie TensorFlow bestimmte Vorgänge GPUs zuweist, lesen Sie den TensorFlow-Leitfaden zur Verwendung von GPUs. In diesem Fall kann es auch hilfreich sein zu erfahren, wie AI Platform Training die Umgebungsvariable TF_CONFIG auf jeder VM festlegt.

GPU-Geräte-String

Eine einzelne GPU einer standard_gpu-Maschine wird als "/gpu:0" identifiziert. Maschinen mit mehreren GPUs verwenden Kennungen, die mit "/gpu:0" beginnen und mit "/gpu:1" usw. weitergehen. Zum Beispiel haben complex_model_m_gpu-Maschinen vier GPUs mit Kennungen zwischen "/gpu:0" und "/gpu:3".

Python-Pakete auf GPU-fähigen Maschinen

Auf GPU-fähigen Maschinen ist tensorflow-gpu vorinstalliert, das TensorFlow-Python-Paket mit GPU-Unterstützung. Eine Liste aller vorinstallierten Pakete finden Sie in der Liste der Laufzeitversionen.

Wartungsereignisse

GPU-fähige VMs, die AI Platform Training-Jobs ausführen, unterliegen gelegentlich der Compute Engine-Hostwartung. Die VMs sind so konfiguriert, dass sie nach solchen Wartungsereignissen automatisch neu gestartet werden. Allerdings müssen Sie unter Umständen zusätzliche Schritte ausführen, damit Ihr Job durch dieses Herunterfahren nicht beeinträchtigt wird. Konfigurieren Sie Ihre Trainingsanwendung so, dass Modellprüfpunkte regelmäßig (in der Regel entlang des Cloud Storage-Pfads, den Sie mit dem Argument --job-dir auf gcloud ai-platform jobs submit training festlegen) gespeichert werden und dass der neueste Prüfpunkt wiederhergestellt wird, falls bereits ein Prüfpunkt vorhanden ist.

TensorFlow Estimators implementieren diese Funktion für Sie, solange Sie ein model_dir-Verzeichnis angeben. Estimators speichern regelmäßig Prüfpunkte im model_dir-Verzeichnis und versuchen, vom letzten Prüfpunkt aus zu laden, sodass Sie sich keine Sorgen über Wartungsereignisse bei Ihren GPU-Workern machen müssen.

Wenn Sie Ihr Modell mit Keras trainieren, verwenden Sie den Callback ModelCheckpoint, um den Trainingsfortschritt regelmäßig zu speichern. Wenn Sie die tf.distribute.Strategy mit Keras verwenden, verwenden Ihre VMs automatisch Prüfpunkte für die Wiederherstellung nach Neustarts. Fügen Sie andernfalls dem Trainingscode eine Logik hinzu, um zu prüfen, ob ein aktueller Prüfpunkt vorhanden ist, und falls ja, von diesem Prüfpunkt aus wiederherzustellen.

Informationen zu komplexeren Fällen finden Sie in der TensorFlow-Anleitung zu Prüfpunkten.

Nächste Schritte