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 Maschinen
Wenn Sie die Verwendung von AI Platform Training oder
Wenn Sie mit GPU-fähigen Maschinen experimentieren, können Sie die Skalierungsstufe
BASIC_GPU
, um eine einzelne Worker-Instanz mit einer GPU abzurufen.
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 zumasterConfig
,workerConfig
,parameterServerConfig
oderevaluatorConfig
hinzu, je nachdem, welche VM-Instanzen Sie beschleunigen möchten. Sie können die folgenden GPU-Typen verwenden:NVIDIA_TESLA_A100
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:
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.
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 12 virtuelle CPUs und 76 GB Arbeitsspeicher bereitstellen kann, müssen Sie an jedenn1-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 Liste der Maschinentypen für AI Platform Training und im Vergleich der GPUs für Compute-Arbeitslasten sowie unten in der 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 4 NVIDIA Tesla P100-GPUs unterstützt in allen Regionen und Zonen nur bis zu 64 virtuelle CPUs und bis zu 208 GB Arbeitsspeicher.
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 A100 | 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 | |||
a2-highgpu-1g |
1 | |||||
a2-highgpu-2g |
2 | |||||
a2-highgpu-4g |
4 | |||||
a2-highgpu-8g |
8 | |||||
a2-megagpu-16g |
16 |
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 einzelne GPUcomplex_model_m_gpu
: vier GPUscomplex_model_l_gpu
: Acht GPUsstandard_p100
: Eine NVIDIA Tesla P100-GPUcomplex_model_m_p100
: Vier NVIDIA Tesla P100-GPUsstandard_v100
: Eine NVIDIA Tesla V100-GPUlarge_model_v100
: Eine NVIDIA Tesla V100-GPUcomplex_model_m_v100
: Vier NVIDIA Tesla V100-GPUscomplex_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 zu Maschinentypen für AI Platform Training lesen.
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.
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ürconfig.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 GPUs masterType: complex_model_m_gpu # Configure 9 workers, each with 4 GPUs workerCount: 9 workerType: complex_model_m_gpu # Configure 3 parameter servers with no GPUs parameterServerCount: 3 parameterServerType: large_model
Senden Sie den Job mit dem Befehl
gcloud
und fügen Sie das Argument--config
hinzu, das auf die Dateiconfig.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 dergcloud
-spezifischen Flags und den Anfang derUSER_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 Keras oder Estimatoren für Ihren TensorFlow-Trainingsjob 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 die Methode
tf.distribute.Strategy
API im Trainingscode:
- 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-Schätzer
implementieren Sie diese Funktion für Sie, wenn Sie eine model_dir
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 mit Keras trainieren, verwenden Sie den ModelCheckpoint
-Callback, 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.
Andernfalls fügen Sie Ihrem 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
- Übersicht über die Funktionsweise des Trainers lesen
- Mehr über die Limits bei gleichzeitiger Nutzung von GPUs erfahren
- Mehr über die Verwendung von GPUs mit TensorFlow lesen
- Leistungs- und Kostenvergleich neuerer GPUs wie NVIDIA Tesla T4