Introduzione a Cloud TPU

Le TPU (Tensor Processing Unit) sono circuiti ASIC (Application-Specific Integrated Circuit) appositamente sviluppati di Google per accelerare i carichi di lavoro di machine learning. Per informazioni più dettagliate sull'hardware TPU, consulta 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 l'hardware progettato per eseguire operazioni con matrici di grandi dimensioni, spesso presenti negli algoritmi di machine learning. Le TPU hanno memoria HBM (High-bandwidth Memory) su chip che ti consente di utilizzare modelli e dimensioni batch più grandi. Le TPU possono essere connesse in gruppi chiamati pod che fanno lo scale up dei carichi di lavoro con modifiche al codice minime o nulle.

Come funziona?

Per comprendere il funzionamento delle TPU, è utile comprendere in che modo altri acceleratori affrontano le sfide di calcolo dell'addestramento dei modelli ML.

Come funziona una CPU

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

Illustrazione del funzionamento di una CPU

Il maggiore vantaggio delle CPU è la loro flessibilità. Puoi caricare qualsiasi tipo di software su una CPU per tanti 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 delle immagini con una rete neurale.

Una CPU carica i valori dalla memoria, esegue un calcolo sui valori e archivia il risultato di nuovo 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 collo di bottiglia di 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 contiene di solito tra 2500 e 5000 ALU. L'elevato numero di processori consente di eseguire migliaia di moltiplicazioni e aggiunte contemporaneamente.

Illustrazione del funzionamento di una GPU

Questa architettura GPU funziona bene su applicazioni con massiccio parallelismo, come le operazioni matriciali in una rete neurale. Infatti, su un tipico carico di lavoro di addestramento per il deep learning, una GPU è in grado di fornire una velocità effettiva in misura maggiore rispetto a una CPU.

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

Come funziona una TPU

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

L'attività principale delle TPU è l'elaborazione matriciale, ovvero una combinazione di operazioni di moltiplicazione e accumulo. Le TPU contengono migliaia di moltiplicatori che sono collegati direttamente l'uno all'altro per formare una grande matrice fisica. Questa è chiamata architettura di array sistolica. Cloud TPU v3 contiene due array sistolici di ALU 128 x 128, su un singolo processore.

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

Per eseguire le operazioni con la matrice, la TPU carica i parametri dalla memoria HBM all'unità di moltiplicazione Matrix (MXU).

Illustrazione di come una TPU carica i parametri dalla memoria

Quindi, la TPU carica i dati dalla memoria HBM. All'esecuzione di ogni moltiplicazione, il risultato viene passato all'accumulatore moltiplicativo successivo. L'output è la somma di tutti i risultati di moltiplicazione tra i dati e i parametri. Non è richiesto accesso alla memoria durante il processo di moltiplicazione della matrice.

Illustrazione di come una TPU carica i dati dalla memoria

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

Compilatore XLA

Il codice che viene 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 compila i componenti di algebra lineare, perdita e gradiente del grafico nel codice macchina TPU. Il resto del programma viene eseguito sulla macchina host TPU. Il compilatore XLA fa parte dell'immagine VM TPU in esecuzione su una macchina host TPU.

Quando utilizzare le TPU

Le Cloud TPU sono ottimizzate per carichi di lavoro specifici. In alcune situazioni, potresti voler utilizzare GPU o CPU su istanze di Compute Engine per eseguire i carichi di lavoro di machine learning. In generale, puoi decidere quale hardware è meglio per il 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 piccoli con batch di piccole dimensioni 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

  • I modelli con un numero significativo di operazioni TensorFlow/PyTorch/JAX personalizzate devono essere eseguite almeno parzialmente
  • Modelli con operazioni TensorFlow non disponibili su Cloud TPU (consulta l'elenco delle operazioni TensorFlow disponibili)
  • Modelli medio-grandi con batch di dimensioni effettive più grandi

TPU

  • Modelli basati sui calcoli matriciali
  • I modelli senza operazioni TensorFlow/PyTorch/JAX personalizzate all'interno del loop di addestramento principale
  • Modelli di addestramento per settimane o mesi
  • Modelli di grandi dimensioni con batch di grandi dimensioni

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

  • Programmi di algebra lineare che richiedono ramificazioni frequenti o contengono molte operazioni algebriche
  • Carichi di lavoro che accedono alla memoria in modo sparso
  • Carichi di lavoro che richiedono aritmetici 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 rimodellazione o la concatenamento, probabilmente non otterrà un elevato utilizzo di MXU. Di seguito sono riportate alcune linee guida per aiutarti a scegliere e creare modelli adatti per Cloud TPU.

Layout

Il compilatore XLA esegue trasformazioni del codice, come il tiling di una matrice che moltiplica in blocchi più piccoli, per eseguire in modo efficiente i calcoli sull'unità matrice (MXU). La struttura dell'hardware MXU, un array sistolico 128 x 128 e il design del sottosistema di memoria delle TPU, che preferisce dimensioni multiple di 8, vengono utilizzati dal compilatore XLA per garantire l'efficienza del tiling. Di conseguenza, alcuni layout sono più favorevoli per la creazione di riquadri, mentre altri richiedono la rimodellazione prima di poter essere affiancati. Le operazioni di rimodellazione sono spesso vincolate alla memoria sulla Cloud TPU.

Forme

Il compilatore XLA compila un grafico ML appena in tempo per il primo batch. Se i batch successivi hanno forme diverse, il modello non funziona. Il grafico viene ricompilato ogni volta che la forma cambia è troppo lento. Pertanto, qualsiasi modello che abbia tensori con forme dinamiche non è adatto alle TPU.

Spaziatura interna

Un programma Cloud TPU ad alte prestazioni può essere suddiviso in blocchi ad alta densità di computing in blocchi 128 x 128. Quando il calcolo di una matrice non può occupare un intero MXU, il compilatore riempie i tensori con zeri. La spaziatura interna presenta due svantaggi:

  • I tensori riempiti di zeri sottoutilizzano il core TPU.
  • Il riempimento aumenta la quantità di memoria su chip richiesta per un tensore e, in casi estremi, può causare un errore di esaurimento della memoria.

Sebbene la spaziatura interna venga eseguita automaticamente dal compilatore XLA quando necessario, è possibile determinare la quantità di spaziatura interna eseguita tramite lo strumento op_profile. Puoi evitare la spaziatura interna scegliendo le dimensioni del tensore adatte alle TPU.

Dimensioni

La scelta di dimensioni tensori adatte è molto importante per l'estrazione delle massime prestazioni dall'hardware TPU, in particolare dalla MXU. Il compilatore XLA cerca di usare la dimensione batch o una dimensione caratteristica per usare al massimo l'MXU. Pertanto, uno di questi deve essere un multiplo di 128. In caso contrario, il compilatore ne aggiungerà uno a 128. Idealmente, le dimensioni del batch e delle funzionalità devono essere multipli di 8, il che consente di estrarre prestazioni elevate dal sottosistema della memoria.

Integrazione dei 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 oltre i confini del perimetro. Per saperne di più sui Controlli di servizio VPC, consulta Panoramica dei Controlli di servizio VPC. Per scoprire di più sulle limitazioni dell'utilizzo di Cloud TPU con i Controlli di servizio VPC, consulta la pagina relativa ai prodotti supportati e alle limitazioni.

Edge TPU

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

Poiché questi dispositivi devono funzionare con una potenza limitata (compresa la batteria), Google ha progettato il coprocessore Edge TPU per accelerare l'inferenza ML sui dispositivi a bassa potenza. Un Edge TPU individuale può eseguire 4 trilioni di operazioni al secondo (4 TOPS), utilizzando solo 2 watt di potenza, in altre parole, ottieni 2 TOPS per watt. Ad esempio, Edge TPU è in grado di eseguire modelli di visione artificiale per dispositivi mobili all'avanguardia come MobileNet V2 a quasi 400 frame al secondo e in modo efficiente dal punto di vista energetico.

Questo acceleratore ML a bassa potenza migliora Cloud TPU e Cloud IoT per fornire un'infrastruttura end-to-end (cloud-to-edge, hardware e software) che facilita le 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 system-on-module, una scheda PCIe/M.2 e un modulo da incasso. Per ulteriori informazioni su Edge TPU e su tutti i prodotti disponibili, visita coral.ai.

Introduzione a Cloud TPU

Richiesta di assistenza

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

  • L'ID del tuo progetto Google Cloud
  • Il nome della tua TPU, se esistente
  • Altre informazioni che vuoi fornire

Che cosa succede dopo?

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