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.

Vorbereitung

Mit AI Platform 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 darüber, wie Sie GPUs Vorgänge zuweisen, 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 Maschinen

Wenn Sie die Verwendung von AI Platform 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 jeden Worker-Typ (Master, Worker oder Parameterserver) so, dass ein gültiger Compute Engine-Maschinentyp verwendet wird.
  • Fügen Sie in masterConfig, workerConfig oder parameterServerConfig ein acceleratorConfig-Feld mit dem gewünschten GPU-Typ in der gewünschten Anzahl ein – je nachdem, welche virtuellen Maschinen 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. Sie können beispielsweise 2 oder 4 NVIDIA Tesla K80-GPUs anhängen, aber nicht 3. 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.

    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 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 alten Legacy-Maschinentyp auswählen, der GPUs enthält:

  • Setzen Sie die Skalierungsstufe auf CUSTOM.
  • Konfigurieren Sie jeden Worker-Typ (Master, Worker oder Parameterserver) so, dass einer der GPU-fähigen Maschinentypen verwendet wird. Richten Sie sich dabei nach der für die Aufgabe erforderlichen Anzahl von GPUs und dem benötigten Beschleunigertyp:
    • 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-central1
  • us-east1
  • europe-west1
  • europe-west4
  • asia-southeast1
  • asia-east1

Darüber hinaus bieten einige dieser Regionen nur Zugang zu bestimmten GPU-Typen. Mehr Informationen zu den verfügbaren Regionen für AI Platform-Dienste, einschließlich Modelltraining und Onlinevorhersagen, 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 V100-GPUs verwendet, mit Parameterservern, die NVIDIA Tesla K80-GPUs verwenden, 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 K80 GPUs
      masterType: n1-highcpu-16
      masterConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_K80
      # Configure 9 workers, each with 4 K80 GPUs
      workerCount: 9
      workerType: n1-highcpu-16
      workerConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_K80
      # 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-k80 \
        --worker-count 9 \
        --worker-machine-type n1-highcpu-16 \
        --worker-accelerator count=4,type=nvidia-tesla-k80 \
        --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.
  • AI Platform-spezifische Flags wie --module-name, --runtime-version und --job-dir müssen vor dem leeren Flag -- stehen. Der AI Platform-Dienst interpretiert diese Flags.
  • Das Flag --job-dir muss, falls es angegeben wird, vor dem leeren Flag -- stehen, weil AI Platform 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 ü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.

Vorgänge zu GPUs zuweisen

Zur Nutzung der GPUs auf einer Maschine nehmen Sie die entsprechenden Änderungen an Ihrer TensorFlow-Trainingsanwendung vor:

  • High-level Estimator API: Es sind keine Codeänderungen erforderlich, sofern ClusterSpec richtig konfiguriert ist. Wenn es sich bei einem Cluster um eine Mischung aus CPUs und GPUs handelt, ordnen Sie den ps-Jobnamen den CPUs und den worker-Jobnamen den GPUs zu.

  • Core TensorFlow API: Sie müssen Vorgänge so zuweisen, dass sie auf GPU-fähigen Maschinen ausgeführt werden. Dieser Vorgang ist der gleiche wie bei der lokalen Verwendung von GPUs mit TensorFlow. Sie können tf.train.replica_device_setter verwenden, um Vorgänge Geräten zuzuweisen.

Wenn Sie einer GPU-fähigen Maschine einen AI Platform-Prozess zuweisen, hat dieser Prozess exklusiven Zugriff auf die GPUs der Maschine. Sie können die GPUs einer einzelnen Maschine in Ihrem Cluster nicht für mehrere Prozesse freigeben. Dieser Vorgang entspricht der verteilten TensorFlow-Aufgabe in Ihrer Clusterspezifikation. Die Dokumentation für verteiltes TensorFlow beschreibt Clusterspezifikationen und -aufgaben.

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 mit allen vorinstallierten Paketen finden Sie in der Liste der Cloud ML-Laufzeitversionen.

Wartungsereignisse

Wenn Sie GPUs in Ihren Trainingsjobs verwenden, sollten Sie bedenken, dass die zugrunde liegenden virtuellen Maschinen gelegentlich einer Compute Engine-Hostwartung unterzogen werden. Die für Trainingsjobs verwendeten GPU-fähigen virtuellen Maschinen 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-Speicherpfads, den Sie mit dem Argument --job-dir für gcloud ai-platform jobs submit training angeben) gespeichert werden und dass der neueste Prüfpunkt wiederhergestellt wird, falls bereits ein Prüfpunkt vorhanden ist.

Die TensorFlow Estimator API implementiert diese Funktionalität für Sie. Falls Ihr Modell also bereits in einen Estimator eingebettet ist, müssen Sie sich keine Gedanken um Wartungsereignisse auf den GPU-Workern machen.

Falls die Einbettung des Modells in einen TensorFlow-Estimator nicht möglich ist und Sie möchten, dass Wartungsereignisse Ihre GPU-fähigen Trainingsjobs nicht beeinträchtigen, müssen Sie die Funktionalität zur Checkpoint-Speicherung und -Wiederherstellung manuell in das Modell schreiben. TensorFlow stellt im Modul tf.train einige nützliche Ressourcen für eine solche Implementierung zur Verfügung, insbesondere tf.train.checkpoint_exists und tf.train.latest_checkpoint.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...