Introduzione a Cloud TPU

Le Tensor Processing Unit (TPU) sono i circuiti integrati specifici per le applicazioni (ASIC) sviluppati da Google utilizzati per accelerare i carichi di lavoro di machine learning. Per informazioni più dettagliate sull'hardware di TPU, vedi Architettura di sistema. Cloud TPU è un servizio web che rende le TPU disponibili come risorse di calcolo scalabili su Google Cloud.

Le TPU addestrano i tuoi modelli in modo più efficiente utilizzando hardware progettati per eseguire operazioni su matrici di grandi dimensioni, spesso presenti negli algoritmi di machine learning. Le TPU hanno una memoria a larghezza di banda elevata (HBM) su chip che ti consente di utilizzare modelli e dimensioni batch di dimensioni maggiori. Le TPU possono essere connesse in gruppi chiamati pod che scalano i tuoi carichi di lavoro con modifiche al codice minime o nulle.

Come funziona?

Per capire come funzionano le TPU, è utile comprendere in che modo altri acceleratori affrontano le sfide di calcolo dei modelli di ML di addestramento.

Come funziona la CPU

Una CPU è un processore per uso generico basato sull'architettura von Neumann. Ciò significa che una CPU funziona con software e memoria come i seguenti:

Illustrazione di come funziona una CPU

Il maggiore vantaggio delle CPU è la loro flessibilità. Puoi caricare qualsiasi tipo di software su una CPU per molti tipi diversi di applicazioni. Ad esempio, puoi utilizzare una CPU per l'elaborazione di testi su un PC, il controllo dei motori a razzo, l'esecuzione di transazioni bancarie o la classificazione di immagini con una rete neurale.

Una CPU carica i valori dalla memoria, esegue un calcolo dei valori e memorizza il risultato in memoria per ogni calcolo. L'accesso alla memoria è lento rispetto alla velocità di calcolo e può limitare la velocità effettiva totale delle CPU. Questo è spesso indicato come il collo di bottiglia von Neumann.

Come funziona una GPU

Per ottenere una velocità effettiva superiore, le GPU contengono migliaia di unità logiche aritmetiche (ALU) in un singolo processore. Una GPU moderna di solito contiene tra 2500 e 5000 ALU. L'elevato numero di processori significa che puoi eseguire contemporaneamente migliaia di moltiplicazioni e aggiunte.

Illustrazione di come funziona una GPU

Questa architettura GPU funziona bene su applicazioni con enormi parallelismo, come le operazioni su matrici in una rete neurale. Infatti, con un carico di lavoro di addestramento tipico per il deep learning, una GPU può fornire un ordine di entità di velocità effettiva superiore rispetto a una CPU.

Tuttavia, la GPU è comunque un processore per uso generico che deve supportare molti applicazioni e software diversi. Di conseguenza, le GPU hanno lo stesso problema delle CPU. Per ogni calcolo in migliaia di ALU, una GPU deve accedere ai registri o alla memoria condivisa per leggere gli operandi e archiviare i risultati di calcolo intermedi.

Come funziona una TPU

Google ha progettato le Cloud TPU come processore a matrice specializzato per i carichi di lavoro di rete neurale. Le TPU non possono eseguire elaboratori di testi, controllare motori a razzo o eseguire transazioni bancarie, ma sono in grado di gestire velocità elevate delle matrici utilizzate nelle reti neurali.

L'attività principale per le TPU è l'elaborazione delle matrici, una combinazione di operazioni di moltiplicazione e accumula. Le TPU contengono migliaia di accumulatori multipli che sono direttamente collegati tra loro per formare una grande fisica fisica. Questa è chiamata architettura di array sistolico. Cloud TPU v3, contiene due array sistolici di 128 x 128 ALU su un singolo processore.

L'host TPU trasmette i dati in una coda di feed. La TPU carica i dati dalla coda di feed e li archivia nella memoria HBM. Al termine del calcolo, la TPU carica i risultati nella coda di uscita. L'host TPU legge quindi i risultati dalla coda di uscita e li archivia nella memoria dell'host.

Per eseguire le operazioni relative alla matrice, la TPU carica i parametri dalla memoria HBM nell'unità di moltiplicazione della matrice (MXU).

Illustrazione di come una TPU carica i parametri dalla memoria

Quindi, la TPU carica i dati dalla memoria HBM. Ogni volta che viene eseguita la moltiplicazione, il risultato viene passato al successivo moltiplicatore-accumulatore. L'output è la somma di tutti i risultati di moltiplicazione tra i dati e i parametri. Non è necessario l'accesso alla memoria durante il processo di moltiplicazione delle matrici.

Illustrazione di come una TPU carica i dati dalla memoria

Di conseguenza, le TPU possono raggiungere una velocità effettiva di calcolo elevata sui calcoli di rete neurale.

Compilatore XLA

Il codice eseguito sulle TPU deve essere compilato dal compilatore dell'algebra lineare (XLA) dell'acceleratore. XLA è un compilatore just-in-time che prende il grafico emesso da un'applicazione del framework ML e completa i componenti lineari di algebra, perdita e gradiente del grafico in codice macchina TPU. Il resto del programma viene eseguito sul computer host TPU. Il compilatore XLA fa parte del runtime TPU che viene eseguito su una macchina host TPU.

Quando utilizzare le TPU

Le Cloud TPU sono ottimizzate per carichi di lavoro specifici. In alcune situazioni, può essere utile utilizzare GPU o CPU nelle istanze di Compute Engine per eseguire i carichi di lavoro di machine learning. In generale, puoi decidere quale hardware è il più adatto al tuo carico di lavoro in base alle seguenti linee guida:

CPU

  • Prototipazione rapida che richiede la massima flessibilità
  • Modelli semplici che non richiedono molto tempo per l'addestramento
  • Modelli di piccole dimensioni con dimensioni batch piccole ed efficaci
  • Modelli che contengono molte operazioni TensorFlow personalizzate scritte in C++.
  • Modelli limitati dall'I/O disponibile o dalla larghezza di banda di rete del sistema host

GPU

  • Modelli con un numero significativo di operazioni TensorFlow/PyTorch/JAX personalizzate che devono essere eseguite almeno in parte sulle CPU
  • Modelli con operazioni TensorFlow non disponibili su Cloud TPU (consulta l'elenco delle operazioni TensorFlow disponibili)
  • Modelli medio-grandi con lotti efficaci di dimensioni maggiori

TPU

  • Modelli dominati dai calcoli a matrice
  • Modelli senza operazioni TensorFlow/PyTorch/JAX personalizzate all'interno del ciclo di addestramento principale
  • Modelli che vengono addestrati per settimane o mesi
  • Modelli di grandi dimensioni con batch di grandi dimensioni efficaci

Le Cloud TPU non sono adatte ai seguenti carichi di lavoro:

  • Programmi di algebra lineari che richiedono una diramazione frequente o contengono molte operazioni di algebra a livello di elemento
  • Carichi di lavoro che accedono alla memoria in modo sparsi
  • Carichi di lavoro che richiedono aritmetica ad alta precisione
  • Carichi di lavoro di rete neurale che contengono operazioni personalizzate nel ciclo di addestramento principale

Best practice per lo sviluppo di modelli

Un programma il cui calcolo è dominato da operazioni non a matrice come l'aggiunta, la rimodellamento o la concatenazione, probabilmente non raggiungerà un elevato utilizzo di MXU. Di seguito sono riportate alcune linee guida per aiutarti a scegliere e creare modelli adatti a Cloud TPU.

Layout

Il compilatore XLA esegue trasformazioni di codice, inclusa la suddivisione di una matrice in blocchi più piccoli, per eseguire in modo efficiente i calcoli sull'unità di matrice (MXU). La struttura dell'hardware MXU, un array sistolico 128 x 128 e la progettazione del sottosistema di memoria TPU, che preferisce dimensioni multiple di 8, vengono utilizzate dal compilatore XLA per l'efficienza della piastrellatura. Di conseguenza, alcuni layout sono più utili per il riquadro, mentre per altri è necessario rimodellare prima di poter essere inseriti nel riquadro. Le operazioni di rimodellamento sono spesso legate alla memoria su Cloud TPU.

Forme

Il compilatore XLA compila un grafico ML in tempo per il primo batch. Se i batch successivi hanno forme diverse, il modello non funziona. (ricompilare il grafico ogni volta che la forma cambia troppo lentamente). Pertanto, qualsiasi modello con tensori con forme dinamiche che cambiano in fase di esecuzione non è adatto alle TPU.

Spaziatura interna

Un programma Cloud TPU ad alte prestazioni è quello in cui il computing denso può essere facilmente suddiviso in blocchi da 128x128 pixel. Quando un calcolo a matrice non può occupare un'intera MXU, il compilatore inserisce i tensori con zeri. La spaziatura interna prevede due svantaggi:

  • I Tensor Imbottiti con Zero Sottoutilizzano il Core TPU.
  • La spaziatura interna aumenta la quantità di memoria interna al chip richiesta per un tensore e può causare un errore di esaurimento della memoria, nel caso estremo.

Mentre la spaziatura interna viene eseguita automaticamente dal compilatore XLA, quando necessario, è possibile determinare la quantità di spaziatura interna eseguita mediante lo strumento op_profile. Puoi evitare la spaziatura interna scegliendo dimensioni tensore adatte alle TPU.

Dimensioni

Scegliere dimensioni dei tensori adatte consente di estrarre le massime prestazioni dall'hardware TPU, in particolare dalla MXU. Il compilatore XLA tenta di utilizzare la dimensione del batch o la dimensione della funzionalità per utilizzare al massimo l'MXU. Pertanto, uno di questi deve essere un multiplo di 128. In caso contrario, il compilatore manterrà uno di questi elementi su 128. Idealmente, le dimensioni del batch e le dimensioni delle caratteristiche dovrebbero essere multipli di 8, che consentono di estrarre prestazioni elevate dal sottosistema di memoria.

Integrazione di Controlli di servizio VPC

I Controlli di servizio VPC di Cloud TPU consentono di definire i perimetri di sicurezza intorno alle risorse Cloud TPU e di controllare lo spostamento dei dati attraverso il perimetro. Per scoprire di più sui Controlli di servizio VPC, consulta Panoramica dei Controlli di servizio VPC. Per scoprire le limitazioni nell'utilizzo di Cloud TPU con i Controlli di servizio VPC, consulta Prodotti e limitazioni supportati.

Edge TPU

I modelli di machine learning addestrati nel cloud hanno sempre più bisogno di eseguire violazioni a livello perimetrale, ovvero su dispositivi che operano a livello perimetrale dell'Internet of Things (IoT). Questi dispositivi includono sensori e altri smart device che raccolgono dati in tempo reale, prendono decisioni intelligenti e poi eseguono azioni o comunicano le loro informazioni ad altri dispositivi o al cloud.

Poiché tali dispositivi devono funzionare a potenza limitata (inclusa l'alimentazione a batteria), Google ha progettato il coprocessore Edge TPU per accelerare l'inferenza del ML sui dispositivi a basso consumo. Una singola Edge TPU può eseguire 4 bilioni di operazioni al secondo (4 TOPS), utilizzando solo 2 watt di potenza; in altre parole, si ottengono 2 TOPS per watt. Ad esempio, Edge TPU può eseguire modelli di visione artificiale all'avanguardia come MobileNet V2 a quasi 400 frame al secondo e in modo efficiente dal punto di vista energetico.

Questo acceleratore ML a basso consumo aumenta Cloud TPU e Cloud IoT per fornire un'infrastruttura end-to-end (cloud-to-edge, hardware + software) che facilita le tue soluzioni basate su AI.

Edge TPU è disponibile per i tuoi dispositivi di prototipazione e produzione in diversi fattori di forma, tra cui un computer a scheda singola, un modulo system-on, una scheda PCIe/M.2 e un modulo montato in superficie. Per ulteriori informazioni su Edge TPU e su tutti i prodotti disponibili, visita coral.ai.

Introduzione a Cloud TPU

Richiedere assistenza

Contatta l'assistenza di Cloud TPU. Se hai un progetto Google Cloud attivo, preparati a fornire le seguenti informazioni:

  • ID progetto Google Cloud
  • Il nome del nodo TPU, se esiste
  • Altre informazioni che vuoi fornire

Che cosa succede dopo?

Vuoi saperne di più su Cloud TPU? Le seguenti risorse potrebbero esserti utili: