Sistema di inferenza TensorFlow scalabile

Last reviewed 2023-11-02 UTC

Questa serie di architetture di riferimento descrive come progettare ed eseguire il deployment di un sistema di inferenza online ad alte prestazioni per i modelli di deep learning utilizzando una GPU NVIDIA® T4 e un Triton Inference Server.

Grazie a questa architettura, puoi creare un sistema che utilizza modelli di machine learning e può sfruttare l'accelerazione GPU. Google Kubernetes Engine (GKE) consente di scalare il sistema in base a un numero crescente di client. Puoi migliorare la velocità effettiva e ridurre la latenza del sistema applicando le tecniche di ottimizzazione descritte in questa serie.

Questa serie è rivolta agli sviluppatori che hanno familiarità con Google Kubernetes Engine e i framework di machine learning (ML), tra cui TensorFlow e NVIDIA TensorRT.

In questa serie sono inclusi i seguenti documenti:

Architettura

Il seguente diagramma mostra l'architettura del sistema di inferenza.

Architettura del sistema di inferenza.

Questa architettura include i seguenti componenti:

  • Cloud Load Balancing: invia il traffico delle richieste al cluster GKE più vicino al client.

  • Cluster GKE:contiene i nodi del cluster e i server di monitoraggio. Se i client inviano richieste da più regioni, puoi eseguire il deployment dei cluster GKE in più regioni. Esegui il deployment dello strumento di test di carico Locust sullo stesso cluster.

  • Nodi cluster con acceleratore GPU: contiene i pod di Triton Inference Server; viene eseguito il deployment di un singolo pod per ogni nodo (una singola GPU non può essere condivisa con più pod).

  • Triton Inference Server:fornisce i modelli ResNet-50 creati da te. Il server fornisce un servizio di inferenza tramite un endpoint HTTP o gRPC. Il servizio di inferenza consente ai client remoti di richiedere l'inferenza per qualsiasi modello gestito dal server.

  • NVIDIA T4: migliora le prestazioni di inferenza. Ci deve essere una NVIDIA T4 per ogni pod. Questa GPU è dotata di Tensor Core, ovvero unità di elaborazione specializzate che supportano e accelerano i calcoli INT8 e FP16.

  • Server di monitoraggio: raccogli i dati delle metriche sull'utilizzo della GPU e della memoria da Triton. Utilizzi Prometheus per il monitoraggio degli eventi e gli avvisi. Puoi utilizzare Grafana per visualizzare e analizzare i dati sul rendimento archiviati in Prometheus.

Note sul layout

Le seguenti linee guida possono aiutarti a sviluppare un'architettura che soddisfi i requisiti di affidabilità e prestazioni della tua organizzazione.

Affidabilità

Questa architettura utilizza GKE per la scalabilità e una gestione flessibile delle risorse.

Eseguendo il deployment del sistema su GKE, puoi scalare il sistema in base al numero di client. Puoi eseguire il deployment di cluster GKE in più regioni e aumentare il numero di nodi nel cluster.

Ottimizzazione delle prestazioni

Quando modifichi il rendimento, segui queste linee guida generali:

  • Definire le metriche di rendimento e raggiungere l'obiettivo di prestazioni in base al caso d'uso del sistema.
  • Misura le prestazioni di riferimento prima di applicare l'ottimizzazione delle prestazioni.
  • Applica una modifica e osserva il miglioramento. Se applichi più modifiche contemporaneamente, non puoi capire quale modifica ha causato il miglioramento.
  • Raccogli le metriche appropriate per comprendere le caratteristiche del rendimento e decidi l'azione successiva per l'ottimizzazione delle prestazioni.

Utilizzando queste linee guida, puoi misurare il miglioramento del rendimento ottenuto in base ai seguenti fattori:

  • TensorRT (ottimizzazione del grafico). TensorRT applica le ottimizzazioni dei grafici per NVIDIA T4. Ad esempio, modifica automaticamente i modelli di deep learning per consentirne l'elaborazione con Tensor Core. Innanzitutto, osserverai le prestazioni di inferenza senza TensorRT come base di riferimento. Poi, osserverai il miglioramento delle prestazioni dopo aver applicato l'ottimizzazione del grafico TensorRT.

  • Conversione FP16. NVIDIA T4 supporta FP32 (in virgola mobile a 32 bit) e FP16 per i calcoli in virgola mobile. Quando converti la precisione delle variabili dall'FP32 predefinito all'FP16, puoi migliorare le prestazioni di inferenza.

  • Quantizzazione INT8. La quantizzazione è una tecnica di ottimizzazione per i modelli di deep learning che migliora le prestazioni di calcolo sulle GPU. NVIDIA T4 supporta i tipi di variabili INT8 (numero intero a 8 bit) per la quantizzazione. Rispetto alla conversione all'FP16, la quantizzazione di INT8 può fornire prestazioni migliori, ma potenzialmente ridurre l'accuratezza. Tuttavia, TensorRT utilizza un processo di calibrazione che riduce al minimo la perdita di informazioni durante i calcoli.

  • Dimensione del batch e numero di gruppi di istanze. Con Triton puoi regolare la dimensione del batch e il numero di gruppi di istanze. Ad esempio, quando imposti una dimensione batch su 16, le richieste di inferenza vengono archiviate in una coda batch e 16 richieste vengono elaborate come un singolo batch. Allo stesso modo, se imposti un numero di gruppi di istanze su 4, più richieste vengono elaborate con quattro thread in parallelo. In questo scenario, ci sono 16 richieste in ogni batch e 4 thread elaborati in parallelo, il che significa che 64 richieste vengono elaborate contemporaneamente su una singola GPU.

    L'aumento del numero di gruppi di istanze consente a TensorRT di ottenere un utilizzo della GPU più elevato. Allo stesso tempo, modificando le dimensioni del batch, consenti a Triton di ottimizzare i calcoli sulla GPU. Ad esempio, può combinare più calcoli da richieste diverse in un'unica attività di calcolo su core Tensor.

Deployment

Per eseguire il deployment di questa architettura, vedi Deployment di un sistema di inferenza TensorFlow scalabile.

Per misurare e ottimizzare il deployment, vedi Misurare e ottimizzare le prestazioni di un sistema di inferenza TensorFlow.

Passaggi successivi