Tensor Processing Units (TPUs) sind von Google speziell entwickelte ASICs, die dazu dienen, ML-Arbeitslasten zu beschleunigen. Mit Cloud TPU können Sie Ihre Trainingsjobs in AI Platform Training ausführen. AI Platform Training bietet eine Benutzeroberfläche für die Jobverwaltung, sodass Sie die TPU nicht selbst verwalten müssen.
Stattdessen können Sie die AI Platform Training jobs
API genauso verwenden, wie Sie sie für das Training auf einer CPU oder einer GPU verwenden.
Mit den übergeordneten TensorFlow APIs können Sie Ihre Modelle auf der Cloud-TPU-Hardware ausführen.
Ihre Google Cloud-Umgebung einrichten
Konfigurieren Sie Ihre Google Cloud-Umgebung. Lesen Sie dafür im Startleitfaden den Abschnitt zur Einrichtung.
Cloud TPU für den Zugriff auf das Projekt autorisieren
Führen Sie die folgenden Schritte aus, um den Namen des Cloud TPU-Dienstkontos zu autorisieren, der Ihrem Google Cloud-Projekt zugeordnet ist:
Rufen Sie den Namen Ihres Cloud TPU-Dienstkontos durch einen Aufruf von
projects.getConfig
ab. Beispiel:PROJECT_ID=PROJECT_ID curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
Speichern Sie den Wert der Felder
serviceAccountProject
undtpuServiceAccount
, der von der API zurückgegeben wird.Initialisieren Sie das Cloud TPU-Dienstkonto:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" -d '{}' \ https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
Fügen Sie dem Projekt nun das Cloud TPU-Dienstkonto als Mitglied mit der Rolle Cloud ML-Dienst-Agent hinzu. Führen Sie die folgenden Schritte in der Google Cloud Console oder mit dem gcloud
-Befehl aus:
Console
- Melden Sie sich in der Google Cloud Console an und wählen Sie das Projekt aus, in dem Sie die TPU verwenden.
- Wählen Sie IAM & Verwaltung > IAM aus.
- Klicken Sie auf die Schaltfläche Hinzufügen, um ein Mitglied zum Projekt hinzuzufügen.
- Geben Sie das TPU-Dienstkonto in das Textfeld Mitglieder ein.
- Klicken Sie auf die Drop-down-Liste Rollen.
- Aktivieren Sie die Rolle Cloud ML-Dienst-Agent (Dienstverwaltung > Cloud ML-Dienst-Agent).
gcloud
Legen Sie Umgebungsvariablen fest, die die Projekt-ID und das Cloud TPU-Dienstkonto enthalten:
PROJECT_ID=PROJECT_ID SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
Weisen Sie dem Cloud TPU-Dienstkonto die Rolle
ml.serviceAgent
zu:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
Weitere Informationen über das Zuweisen von Rollen zu Dienstkonten finden Sie in der IAM-Dokumentation.
Beispiel: MNIST-Beispielmodell trainieren
In diesem Abschnitt erfahren Sie, wie Sie ein MNIST-Beispielmodell mit einer TPU und Laufzeitversion 2.11 trainieren. In diesem Beispieljob wird als Maschinenkonfiguration die vordefinierte Skalierungsstufe BASIC_TPU
verwendet.
Weiter unten in dieser Anleitung erfahren Sie, wie Sie eine benutzerdefinierte Konfiguration einrichten.
In diesem Beispiel wird davon ausgegangen, dass Sie eine Bash-Shell mit installierter gcloud CLI verwenden. Führen Sie die folgenden Befehle aus, um den Code abzurufen und den Trainingsjob an AI Platform Training zu senden:
Laden Sie den Code für die Referenzmodelle von TensorFlow herunter und wechseln Sie zum Verzeichnis mit dem Beispielcode:
git clone https://github.com/tensorflow/models.git \ --branch=v2.11.0 \ --depth=1 cd models
Erstellen Sie eine
setup.py
-Datei im Verzeichnismodels
. Dadurch berücksichtigt der Befehlgcloud ai-platform jobs submit training
beim Erstellen eines Tarball-Archivs Ihres Trainingscodes alle erforderlichen Unterpakete im Verzeichnismodels/official
. Außerdem wird damit gewährleistet, dass AI Platform Training TensorFlow-Datasets als Abhängigkeit installiert, wenn der Trainingsjob ausgeführt wird. Dieser Trainingscode benötigt TensorFlow-Datasets zum Laden der MNIST-Daten.Führen Sie den folgenden Befehl in Ihrer Shell aus, um die Datei
setup.py
zu erstellen:cat << END > setup.py from setuptools import find_packages from setuptools import setup setup( name='official', install_requires=[ 'tensorflow-datasets~=3.1', 'tensorflow-model-optimization>=0.4.1' ], packages=find_packages() ) END
Senden Sie Ihren Trainingsjob mit dem Befehl
gcloud ai-platform jobs submit training
:gcloud ai-platform jobs submit training tpu_mnist_1 \ --staging-bucket=gs://BUCKET_NAME \ --package-path=official \ --module-name=official.vision.image_classification.mnist_main \ --runtime-version=2.11 \ --python-version=3.7 \ --scale-tier=BASIC_TPU \ --region=us-central1 \ -- \ --distribution_strategy=tpu \ --data_dir=gs://tfds-data/datasets \ --model_dir=gs://BUCKET_NAME/tpu_mnist_1_output
Ersetzen Sie BUCKET_NAME durch den Namen eines Cloud Storage-Buckets in Ihrem Google Cloud-Projekt. Die gcloud CLI lädt den verpackten Trainingscode in diesen Bucket hoch und AI Platform Training speichert die Trainingsausgabe im Bucket.
Überwachen Sie den Trainingsjob. Wenn der Job abgeschlossen ist, können Sie sich seine Ausgabe im Verzeichnis
gs://BUCKET_NAME/tpu_mnist_1_output
ansehen.
Weitere Möglichkeiten zum Trainieren von Modellen mit Cloud TPU
In diesem Abschnitt erfahren Sie mehr über das Konfigurieren eines Jobs und das Trainieren eines Modells in AI Platform Training mit Cloud TPU.
Region angeben, die TPUs anbietet
Sie müssen Ihren Job in einer Region ausführen, in der TPUs verfügbar sind. Der Zugriff auf TPUs ist derzeit in folgenden Regionen möglich:
us-central1
europe-west4
Ausführliche Informationen zu den verfügbaren Regionen für AI Platform Training-Dienste, einschließlich Modelltraining und Online-/Batchvorhersagen, finden Sie im Leitfaden für Regionen.
Versionsverwaltung für TensorFlow und AI Platform Training
AI Platform Training-Laufzeitversion(en) 1.15, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9 und 2.11 stehen zum Trainieren Ihrer Modelle Cloud TPU Hier finden Sie weitere Informationen zu den AI Platform Training-Laufzeitversionen und den entsprechenden TensorFlow-Versionen.
Die Versionsverwaltungsrichtlinie entspricht der Richtlinie für Cloud TPU. Geben Sie in der Trainingsjobanfrage unbedingt eine Laufzeitversion an, die für TPUs verfügbar ist und der Version von TensorFlow im Trainingscode entspricht.
Verbindung zum TPU-gRPC-Server herstellen
Verwenden Sie in Ihrem TensorFlow-Programm TPUClusterResolver
, um eine Verbindung zum TPU-gRPC-Server herzustellen, der auf der TPU-VM ausgeführt wird.
In der TensorFlow-Anleitung zur Verwendung von TPUs wird dargestellt, wie Sie TPUClusterResolver
mit der Verteilungsstrategie TPUStrategy
verwenden.
Wenn Sie TPUClusterResolver
für Code verwenden, der in AI Platform Training ausgeführt wird, müssen Sie jedoch eine wichtige Änderung vornehmen: Geben Sie beim Erstellen der TPUClusterResolver
-Instanz keine Argumente an. Wenn die Schlüsselwortargumente tpu
, zone
und project
auf den Standardwert None
gesetzt sind, liefert AI Platform Training dem Cluster-Resolver automatisch die erforderlichen Verbindungsdetails in Form von Umgebungsvariablen.
Das folgende Beispiel für TensorFlow 2 veranschaulicht, wie ein Cluster-Resolver und eine Verteilungsstrategie für das Training in AI Platform Training initialisiert werden:
import tensorflow as tf
resolver = tf.distribute.cluster_resolver.TPUClusterResolver()
tf.config.experimental_connect_to_cluster(resolver)
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.experimental.TPUStrategy(resolver)
TPUs in TensorFlow-Code verwenden
Wenn Sie die TPUs auf einem Computer nutzen möchten, verwenden Sie die TPUStrategy
API von TensorFlow 2. In der TensorFlow-Anleitung zur Verwendung von TPUs wird dies beschrieben.
Für das Training mit TPUs in TensorFlow 1 können Sie stattdessen die TPUEstimator
API verwenden. In der Cloud TPU-Anleitung für die TPUEstimator
API wird dies beschrieben.
Außerdem enthält die Cloud TPU-Dokumentation eine Liste der auf Cloud TPU verfügbaren einfachen TensorFlow-Vorgänge.
TPUs im PyTorch-Code verwenden
Für die Nutzung einer TPU bei einem vordefinierten PyTorch-Container nutzen Sie das Paket torch_xla
. Mehr über die Verwendung von torch_xla
für TPU im Training in der PyTorch-Dokumentation. Weitere Beispiele zur Verwendung von torch_xla
finden Sie in den Anleitungen im PyTorch XL-GitHub-Repository.
Beachten Sie, dass Sie beim Trainieren mit einer TPU in AI Platform Training ein einzelnes XLA-Gerät und nicht mehrere XLA-Geräte verwenden.
Weitere Informationen finden Sie im folgenden Abschnitt über die Konfiguration des Trainingsjobs für PyTorch und TPU.
Benutzerdefinierte TPU-Maschine konfigurieren
Ein TPU-Trainingsjob wird in einer Konfiguration mit zwei VMs ausgeführt. Eine VM (der Master) führt Ihren Python-Code aus. Der Master steuert den TensorFlow-Server, der auf einem TPU-Worker ausgeführt wird.
Wenn Sie eine TPU mit AI Platform Training verwenden möchten, haben Sie drei Möglichkeiten, den Trainingsjob für den Zugriff auf eine TPU-fähige Maschine zu konfigurieren:
- Verwenden Sie die Skalierungsstufe
BASIC_TPU
. Sie können diese Methode für den Zugriff auf TPU v2-Beschleuniger verwenden. - Verwenden Sie für die Master-VM einen
cloud_tpu
-Worker und einen Legacy-Maschinentyp. Sie können diese Methode für den Zugriff auf TPU v2-Beschleuniger verwenden. - Verwenden Sie für die Master-VM einen
cloud_tpu
-Worker und einen Compute Engine-Maschinentyp. Sie können diese Methode für den Zugriff auf TPU v2- oder TPU v3-Beschleuniger verwenden. TPU v3-Beschleuniger sind in der Betaversion verfügbar.
Einfache TPU-fähige Maschine
Setzen Sie die Skalierungsstufe auf BASIC_TPU
, um eine Master-VM und eine TPU-VM mit einer einzigen TPU und acht TPU v2-Kernen zu erhalten, wie Sie es beim Ausführen des vorherigen Beispiels getan haben.
TPU-Worker in einer Konfiguration mit Legacy-Maschinentyp
Wenn Sie auf der Master-VM mehr Rechenressourcen benötigen, können Sie alternativ eine benutzerdefinierte Maschinenkonfiguration einrichten:
- Setzen Sie die Skalierungsstufe auf
CUSTOM
. - Konfigurieren Sie die Master-VM so, dass ein Legacy-Maschinentyp entsprechend den Jobanforderungen verwendet wird.
- Setzen Sie
workerType
aufcloud_tpu
, damit Sie eine TPU-VM mit einer Cloud TPU und acht TPU v2-Kernen erhalten. - Setzen Sie
workerCount
auf 1. - Geben Sie keinen Parameterserver an, wenn Sie eine Cloud TPU verwenden. Der Dienst weist die Jobanfrage zurück, wenn
parameterServerCount
größer null ist.
Das folgende Beispiel zeigt eine config.yaml
-Datei, die diesen Konfigurationstyp verwendet:
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: cloud_tpu
workerCount: 1
TPU-Worker in einer Konfiguration mit Compute Engine-Maschinentyp
Sie können auch eine benutzerdefinierte Maschinenkonfiguration mit einem Compute Engine-Maschinentyp für die Master-VM einrichten und an die TPU-VM eine acceleratorConfig
anhängen.
Mit dieser Art der Konfiguration können Sie einen TPU-Worker mit acht TPU v2-Kernen (ähnlich wie bei einer Konfiguration ohne acceleratorConfig
) oder einen TPU-Worker mit acht TPU v3-Kernen (Beta) einrichten. Hier erfahren Sie mehr über den Unterschied zwischen TPU v2- und TPU v3-Beschleunigern.
Die Verwendung eines Compute Engine-Maschinentyps bietet auch mehr Flexibilität bei der Konfiguration der Master-VM:
- Setzen Sie die Skalierungsstufe auf
CUSTOM
. - Konfigurieren Sie die Master-VM für die Verwendung eines Compute Engine-Maschinentyps, der Ihren Jobanforderungen entspricht.
- Setzen Sie
workerType
aufcloud_tpu
. - Fügen Sie eine
workerConfig
mit dem FeldacceleratorConfig
hinzu. In deracceleratorConfig
setzen Sietype
aufTPU_V2
oderTPU_V3
sowiecount
auf8
. Sie dürfen keine andere Anzahl von TPU-Kernen anhängen. - Setzen Sie
workerCount
auf 1. - Geben Sie keinen Parameterserver an, wenn Sie eine Cloud TPU verwenden. Der Dienst weist die Jobanfrage zurück, wenn
parameterServerCount
größer null ist.
Das folgende Beispiel zeigt eine config.yaml
-Datei, die diesen Konfigurationstyp verwendet:
TPU v2
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V2
count: 8
TPU v3 (Beta)
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V3
count: 8
TPU-Pods verwenden
Ein TPU-Pod ist eine Sammlung von TPU-Geräten, die über dedizierte Hochgeschwindigkeits-Netzwerkschnittstellen verbunden sind. Ein TPU-Pod kann bis zu 2.048 TPU-Kerne haben, sodass Sie die Verarbeitungslast auf mehrere TPUs verteilen können.
Wenn Sie TPU-Pods verwenden möchten, müssen Sie zuerst eine Anfrage zur Kontingenterhöhung stellen.
Die folgenden config.yaml
-Beispieldateien zeigen die Verwendung von TPU-Pods:
TPU v2-Pods
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V2_POD
count: 128
TPU v3-Pods
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
workerType: cloud_tpu
workerCount: 1
workerConfig:
acceleratorConfig:
type: TPU_V3_POD
count: 32
Die Anzahl der Pod-Kerne, die für jeden TPU-Typ verwendet werden können, ist begrenzt. Verfügbare Konfigurationen:
TPU-Pod-Typ | Anzahl der für die Verwendung verfügbaren Pod-Kerne |
---|---|
TPU_V2_POD |
32, 128, 256, 512 |
TPU_V3_POD |
32, 128, 256 |
Weitere Informationen zur vollständigen Nutzung von TPU-Pod-Kernen finden Sie in der Cloud TPU-Dokumentation zu TPU-Pods.
Vorgefertigten PyTorch-Container auf einem TPU-Worker verwenden
Wenn Sie ein PyTorch-Training mit einer TPU ausführen möchten, müssen Sie das Feld tpuTfVersion
in der trainingInput
des Trainingsjobs angeben.
Legen Sie tpuTfVersion
so fest, dass er der Version des vorkonfigurierten PyTorch-Containers entspricht, den Sie für das Training verwenden.
AI Platform Training unterstützt das Training mit TPUs für die folgenden vordefinierten PyTorch-Container:
URI des Container-Images | tpuTfVersion |
---|---|
gcr.io/cloud-ml-public/training/pytorch-xla.1-11 |
pytorch-1.11 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-10 |
pytorch-1.10 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-9 |
pytorch-1.9 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-7 |
pytorch-1.7 |
gcr.io/cloud-ml-public/training/pytorch-xla.1-6 |
pytorch-1.6 |
Wenn Sie beispielsweise mit dem vorkonfigurierten Container PyTorch 1.11 trainieren möchten, können Sie das Training mit der folgenden config.yaml
-Datei konfigurieren:
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
masterConfig:
imageUri: gcr.io/cloud-ml-public/training/pytorch-xla.1-11
workerType: cloud_tpu
workerCount: 1
workerConfig:
imageUri: gcr.io/cloud-ml-public/training/pytorch-xla.1-11
tpuTfVersion: pytorch-1.11
acceleratorConfig:
type: TPU_V2
count: 8
Weitere Informationen finden Sie im vorherigen Abschnitt auf dieser Seite über TPUs in PyTorch-Code verwenden.
Benutzerdefinierte Container für einen TPU-Worker verwenden
Wenn Sie einen benutzerdefinierten Container auf Ihrem TPU-Worker ausführen möchten, anstatt eine der AI Platform Training-Laufzeitversionen zu verwenden, die TPUs unterstützen, müssen Sie beim Senden Ihres Trainingsjobs ein zusätzliches Konfigurationsfeld angeben. Legen Sie die tpuTfVersion
auf eine Laufzeitversion fest, die die von Ihrem Container verwendete TensorFlow-Version enthält. Sie müssen eine Laufzeitversion angeben, die derzeit für das Training mit TPUs unterstützt wird.
Da Sie Ihren Job für die Verwendung eines benutzerdefinierten Containers konfigurieren, verwendet AI Platform Training bei der Ausführung Ihres Trainingsjobs nicht die Umgebung dieser Laufzeitversion. Für AI Platform Training ist dieses Feld jedoch erforderlich, damit der TPU-Worker ordnungsgemäß auf die Version von TensorFlow vorbereitet werden kann, die in Ihrem benutzerdefinierten Container verwendet wird.
Das folgende Beispiel zeigt eine config.yaml
-Datei mit einer ähnlichen TPU-Konfiguration wie im vorherigen Abschnitt. In diesem Fall führen die Master-VM und der TPU-Worker jeweils unterschiedliche benutzerdefinierte Container aus:
TPU v2
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
masterConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-master-image-name:your-master-tag-name
workerType: cloud_tpu
workerCount: 1
workerConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-worker-image-name:your-worker-tag-name
tpuTfVersion: 2.11
acceleratorConfig:
type: TPU_V2
count: 8
TPU v3 (Beta)
trainingInput:
scaleTier: CUSTOM
masterType: n1-highcpu-16
masterConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-master-image-name:your-master-tag-name
workerType: cloud_tpu
workerCount: 1
workerConfig:
imageUri: gcr.io/YOUR_PROJECT_ID/your-worker-image-name:your-worker-tag-name
tpuTfVersion: 2.11
acceleratorConfig:
type: TPU_V3
count: 8
Wenn Sie den Trainingsjob mit dem Befehl gcloud beta ai-platform jobs submit training
senden, können Sie das API-Feld tpuTfVersion
mit dem Flag --tpu-tf-version
statt in einer config.yaml
-Datei angeben.
TPUClusterResolver
nach der Bereitstellung der TPU verwenden
Wenn Sie einen benutzerdefinierten Container verwenden, müssen Sie warten, bis die TPU bereitgestellt ist, bevor Sie TPUClusterResolver
aufrufen können. Der folgende Beispielcode zeigt, wie die TPUClusterResolver
-Logik verarbeitet wird:
def wait_for_tpu_cluster_resolver_ready():
"""Waits for `TPUClusterResolver` to be ready and return it.
Returns:
A TPUClusterResolver if there is TPU machine (in TPU_CONFIG). Otherwise,
return None.
Raises:
RuntimeError: if failed to schedule TPU.
"""
tpu_config_env = os.environ.get('TPU_CONFIG')
if not tpu_config_env:
tf.logging.info('Missing TPU_CONFIG, use CPU/GPU for training.')
return None
tpu_node = json.loads(tpu_config_env)
tf.logging.info('Waiting for TPU to be ready: \n%s.', tpu_node)
num_retries = 40
for i in range(num_retries):
try:
tpu_cluster_resolver = (
tf.contrib.cluster_resolver.TPUClusterResolver(
tpu=[tpu_node['tpu_node_name']],
zone=tpu_node['zone'],
project=tpu_node['project'],
job_name='worker'))
tpu_cluster_resolver_dict = tpu_cluster_resolver.cluster_spec().as_dict()
if 'worker' in tpu_cluster_resolver_dict:
tf.logging.info('Found TPU worker: %s', tpu_cluster_resolver_dict)
return tpu_cluster_resolver
except Exception as e:
if i < num_retries - 1:
tf.logging.info('Still waiting for provisioning of TPU VM instance.')
else:
# Preserves the traceback.
raise RuntimeError('Failed to schedule TPU: {}'.format(e))
time.sleep(10)
# Raise error when failed to get TPUClusterResolver after retry.
raise RuntimeError('Failed to schedule TPU.')
Weitere Informationen zum verteilten Training mit benutzerdefinierten Containern
Nächste Schritte
- Wie Modelle in AI Platform Training trainiert werden
- Hyperparameter-Abstimmung in AI Platform Training unter besonderer Beachtung der Details für die Hyperparameter-Abstimmung mit Cloud TPU
- Zusätzliche Referenzmodelle für Cloud TPU
- Modelle für Cloud TPU gemäß den Best Practices für Cloud TPU optimieren
- Hilfe bei der Diagnose und Lösung von Problemen unter Fehlerbehebung und FAQ für Cloud TPU