Systemarchitektur

In diesem Dokument wird die Architektur aller Hardware- und Softwarekomponenten des Cloud TPU-Systems beschrieben.

Übersicht

Tensor Processing Units (TPUs) sind von Google speziell entwickelte anwendungsspezifische integrierte Schaltungen (Application-Specific Integrated Circuits, ASICs), die verwendet werden, um die beim maschinellen Lernen entstehenden Arbeitslasten zu beschleunigen. Diese TPUs wurden von Grund auf neu entwickelt und profitieren von der langjährigen Erfahrung und Führungsposition von Google im Bereich des maschinellen Lernens.

Sie können Cloud TPU und TensorFlow verwenden, um eigene ML-Arbeitslasten auf der TPU-Beschleunigerhardware von Google auszuführen. Cloud TPU wurde für maximale Leistung und Flexibilität entwickelt, um Forscher, Entwickler und Unternehmen bei der Erstellung von TensorFlow-Computing-Cluster zu unterstützen, die CPUs, GPUs und TPUs verwenden können. Mit den übergeordneten Tensorflow APIs können Sie replizierte Modelle auf der Cloud TPU-Hardware ausführen.

Ihre TensorFlow-Anwendungen können über Container, Instanzen oder Dienste in Google Cloud auf TPU-Knoten zugreifen. Die Anwendung benötigt eine Verbindung zu Ihrem TPU-Knoten über Ihr VPC-Netzwerk.

TPU-Versionen

Mit jeder TPU-Version werden die besonderen Hardwaremerkmale eines TPU-Geräts definiert. Mit der TPU-Version werden die Architektur für jeden TPU-Kern, die Menge des HBM (High Bandwidth Memory, Speicher mit hoher Bandbreite) für jeden TPU-Kern, die Verbindungen zwischen den Kernen auf jedem TPU-Gerät und die für die Kommunikation zwischen den Geräten verfügbaren Netzwerkschnittstellen definiert. Beispielsweise weist jede TPU-Version folgende Merkmale auf:

  • TPU v2:
    • 8 GiB HBM für jeden TPU-Kern
    • Eine MXU (Matrixeinheit) für jeden TPU-Kern
    • Bis zu 512 TPU-Kerne insgesamt und 4 TiB Gesamtspeicher in einem TPU-Pod
  • TPU v3:
    • 16 GiB HBM für jeden TPU-Kern
    • Zwei MXUs für jeden TPU-Kern
    • Bis zu 2.048 TPU-Kerne insgesamt und 32 TiB Gesamtspeicher in einem TPU-Pod

Bild

Jeder TPU-Kern hat Skalar-, Vektor- und Matrixeinheiten (MXU). Die MXU stellt den Großteil der Rechenleistung in einem TPU-Chip bereit. Jede MXU kann in jedem Zyklus 16.000 Multiplikations- bzw. Akkumulationsoperationen ausführen. Während die Ein- und Ausgaben der MXU 32-Bit-Gleitkommawerte sind, führt die MXU dagegen Multiplizierungen mit reduzierter bfloat16-Genauigkeit durch. Bfloat16 ist eine 16-Bit-Gleitkommadarstellung, die eine bessere Trainings- und Modellgenauigkeit als die Halbgenauigkeitsdarstellung gemäß IEEE bietet.

Jeder der Kerne auf einem TPU-Gerät kann Nutzerberechnungen (XLA-Operationen) unabhängig ausführen. Durch Verbindungen mit hoher Bandbreite können die Chips auf dem TPU-Gerät direkt miteinander kommunizieren. In einer sogenannten TPU-Pod-Konfiguration werden durch dedizierte Hochgeschwindigkeits-Netzwerkschnittstellen mehrere TPU-Geräte miteinander verbunden, um für Ihre ML-Arbeitslasten eine größere Anzahl von TPU-Kernen und einen größeren TPU-Speicherpool bereitzustellen.

Leistungsvorteile von TPU v3

Die größere Anzahl von FLOPS pro Kern und größere Speicherkapazität bei TPU v3-Konfigurationen können die Leistung von Modellen auf folgende Weise verbessern:

  • TPU v3-Konfigurationen bieten für rechengebundene Modelle erhebliche Leistungsvorteile pro Kern. Für speichergebundene Modelle kann im Vergleich zu TPU v2-Konfigurationen möglicherweise nicht dieselbe Leistungsverbesserung erzielt werden, wenn sie auch bei TPU v3-Konfigurationen speichergebunden sind.
  • Wenn Daten in TPU v2-Konfigurationen den Speicherplatz überschreiten, ist mit TPU v3 eine bessere Leistung möglich und es müssen weniger Zwischenwerte neu berechnet werden (Neuberechnen von Schreibergebnissen).
  • Mit TPU v3-Konfigurationen können neue Modelle mit Stapelgrößen ausgeführt werden, für die TPU v2-Konfigurationen nicht ausgereicht haben. Zum Beispiel lässt TPU v3 tiefere ResNets und größere Bilder mit RetinaNet zu.

Modelle, die auf TPU v2-Hardware nahezu eingabegebunden arbeiten ("Infeed"), da Trainingsschritte auf Eingaben warten müssen, werden unter Umständen auch auf Cloud TPU v3-Hardware eingabegebunden arbeiten. Mit dem Leitfaden zur Leistung von Pipelines können Sie Einspeisungsprobleme beheben.

Sie können feststellen, ob die Leistung Ihres Modells mit TPU v3 besser wäre, wenn Sie verschiedene TPU-Versionen Benchmarktests unterziehen und die Leistung mit TensorBoard-Tools überwachen.

TPU-Konfigurationen

In Google-Rechenzentren sind TPU-Geräte für TPU v2 und TPU v3 in den folgenden Konfigurationen verfügbar:

  • Einzelgerät-TPUs sind einzelne TPU-Geräte, die nicht über ein dediziertes Hochgeschwindigkeitsnetzwerk miteinander verbunden sind. Es ist nicht möglich, mehrere Einzelgerät-TPUs zu kombinieren, damit diese gemeinsam eine Arbeitslast übernehmen.
  • TPU-Pods sind Cluster von TPU-Geräten, die über dedizierte Hochgeschwindigkeitsnetzwerke miteinander verbunden sind.

Einzelgerät-TPUs

Eine Einzelgerät-TPU-Konfiguration in einem Google-Rechenzentrum ist ein einzelnes TPU-Gerät ohne dedizierte Hochgeschwindigkeits-Netzwerkverbindungen zu anderen TPU-Geräten. Ihr TPU-Knoten stellt nur zu diesem Gerät eine Verbindung her.

Bild

Bei Einzelgerät-TPUs sind die Chips auf dem Gerät miteinander verbunden, sodass für die Kommunikation zwischen den Chips keine Host-CPU- oder Hostnetzwerk-Ressourcen erforderlich sind.

Wenn Sie einen TPU-Knoten erstellen, geben Sie den TPU-Typ an. Sie können beispielsweise v2-8 oder v3-8 angeben, um Ihren TPU-Knoten mit einem einzelnen Gerät zu konfigurieren. Einzelgerät-TPUs sind nicht Teil von TPU-Pod-Konfigurationen und nehmen keine Teilbereiche von TPU-Pods für sich in Anspruch. Auf der Seite TPU-Typen finden Sie Informationen zu den für Ihre TPU-Knoten verfügbaren Einzelgerät-TPU-Konfigurationen.

TPU-Pods

In einer TPU-Pod-Konfiguration in einem Google-Rechenzentrum sind mehrere TPU-Geräte über eine dedizierte Hochgeschwindigkeits-Netzwerkverbindung miteinander verbunden. Die Hosts in Ihrem TPU-Knoten verteilen Ihre ML-Arbeitslasten auf alle TPU-Geräte.

Bild

In einem TPU-Pod sind die TPU-Chips auf dem Gerät miteinander verbunden, sodass für die Kommunikation zwischen den Chips keine Host-CPU- oder Hostnetzwerk-Ressourcen erforderlich sind. Darüber hinaus sind alle TPU-Geräte in einem TPU-Pod über dedizierte Hochgeschwindigkeitsnetzwerke miteinander verbunden, für die ebenfalls keine Host-CPU- oder Hostnetzwerk-Ressourcen erforderlich sind.

Beim Erstellen eines TPU-Knotens geben Sie an, ob ein TPU-Typ verwendet werden soll, der den ganzen TPU-Pod oder nur einen kleineren Teil dieses TPU-Pods belegt. Beispiel: Ein v2-512-TPU-Typ belegt einen kompletten v2 TPU-Pod und ein v2-128-TPU-Typ belegt nur 1/4 eines v2 TPU-Pods. Auf der Seite TPU-Typen finden Sie Informationen zu den für Ihre TPU-Knoten verfügbaren TPU-Pod-Konfigurationen.

Bild

Der v2 TPU-Pod lässt eine maximale Konfiguration von 64 Geräten und somit insgesamt 512 TPU v2-Kernen und 4 TiB TPU-Speicher zu.

Bild

Der v3 TPU-Pod lässt eine maximale Konfiguration von 256 Geräten und somit insgesamt 2.048 TPU v3-Kernen und 32 TiB TPU-Speicher zu.

Weitere Informationen zu den Architekturunterschieden zwischen verschiedenen TPU-Versionen finden Sie im Abschnitt TPU-Versionen.

Mit der Cloud TPU API können Sie die TPU-Verwaltung für Ihre TPU-Knoten unabhängig von deren Größe automatisieren. Infolgedessen kann leicht auf große Computing-Cluster heraufskaliert, Ihre Arbeitslasten ausgeführt und diese Cluster nach Abschluss der Arbeitslasten wieder herunterskaliert werden. Der in die Chips integrierte Hardwaresupport führt zu einer praktisch linearen Leistungsskalierung für eine große Bandbreite an Deep-Learning-Arbeitslasten. In der Praxis beseitigt der Cloud TPU-Software-Stack die Komplexität beim Erstellen, Ausführen und Einspeisen von TPU-Cloudprogrammen.

Softwarearchitektur

Wenn Sie Ihre Anwendung ausführen, generiert TensorFlow eine Berechnungsgrafik und sendet diese über gRPC an einen TPU-Knoten. Der TPU-Typ, den Sie für den TPU-Knoten ausgewählt haben, bestimmt, wie viele Geräte für die Arbeitslast verfügbar sind. Der TPU-Knoten kompiliert den Berechnungsgraphen rechtzeitig und sendet die Binärdatei des Programms zur Ausführung an ein oder mehrere TPU-Geräte. Eingaben für das Modell werden häufig in Cloud Storage gespeichert. Der TPU-Knoten streamt die Eingaben zur Nutzung an ein oder mehrere TPU-Geräte.

Das folgende Blockdiagramm zeigt die Softwarearchitektur von Cloud TPU, die aus dem neuronalen Netzwerkmodell, dem TPU Estimator und TensorFlow-Client, dem TensorFlow-Server und dem XLA-Compiler besteht.

Bild

TPU Estimator

TPU Estimators sind übergeordnete auf Estimators aufbauende APIs, die das Erstellen von Modellen für Cloud TPU vereinfachen und die maximale TPU-Leistung extrahieren. Wenn Sie ein neuronales Netzwerkmodell schreiben, das Cloud TPU verwendet, sollten Sie die TPU Estimator APIs verwenden.

TensorFlow-Client

TPU Estimators übersetzen Ihre Programme in TensorFlow-Operationen, die dann von einem TensorFlow-Client in einen Berechnungsgraph umgewandelt werden. Ein TensorFlow-Client sendet den Berechnungsgraph an einen TensorFlow-Server.

TensorFlow-Server

Ein TensorFlow-Server wird auf einem Cloud TPU-Server ausgeführt. Wenn der Server einen Berechnungsgraph vom TensorFlow-Client empfängt, führt der Server die folgenden Schritte aus:

  1. Eingaben aus Cloud Storage laden
  2. Partitionieren des Graphen in Teile, die auf einer Cloud TPU ausgeführt werden können, und in Teile, die auf einer CPU ausgeführt werden müssen
  3. Generieren von XLA-Operationen entsprechend dem Teilgraph, der in Cloud TPU ausgeführt werden soll
  4. Aufrufen des XLA-Compilers

XLA-Compiler

XLA ist ein Just-in-Time-Compiler, der High-Level-Optimizer-(HLO-)Operationen als Eingabe verwendet, die vom TensorFlow-Server erzeugt werden. XLA generiert Binärcode, der in Cloud TPU ausgeführt werden soll, einschließlich der Datenorchestrierung aus dem On-Chip-Speicher an Hardware-Ausführungseinheiten und der Inter-Chip-Kommunikation. Die generierte Binärdatei wird mithilfe der PCIe-Konnektivität zwischen dem Cloud TPU-Server und der Cloud TPU in Cloud TPU geladen und anschließend zur Ausführung gestartet.

Nächste Schritte