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 Triton Inference Server.
Con questa architettura, puoi creare un sistema che utilizza modelli di machine learning e può sfruttare l'accelerazione GPU. Google Kubernetes Engine (GKE) ti consente di scalare il sistema in base a un numero crescente di clienti. Puoi migliorare il throughput 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 con i framework di machine learning (ML), tra cui TensorFlow e NVIDIA TensorRT.
Questa serie include i seguenti documenti:
- Architettura di riferimento: sistema di inferenza TensorFlow scalabile (questo documento)
- Deployment: Esegui il deployment di un sistema di inferenza TensorFlow scalabile
- Misura e ottimizza il deployment: misura e ottimizza il rendimento di un sistema di inferenza TensorFlow
Architettura
Il seguente diagramma mostra l'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 di cluster GKE in più regioni. Esegui il deployment dello strumento di test di carico Locust nello stesso cluster.
Nodi cluster con acceleratore GPU: contiene pod Triton Inference Server. Viene implementato un singolo pod per ogni nodo (una singola GPU non può essere condivisa con più pod).
Triton Inference Server:serve i modelli ResNet-50 che crei. 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. Deve essere presente un'unità 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 e l'invio di avvisi relativi agli eventi. Utilizza 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 la gestione flessibile delle risorse.
Se esegui il deployment del sistema su GKE, puoi scalarlo in base al numero di client. Puoi implementare i cluster GKE in più regioni e aumentare il numero di nodi nel cluster.
Ottimizzazione delle prestazioni
Quando ottimizzi le prestazioni, segui queste linee guida generali:
- Definisci le metriche sul rendimento e il rendimento target in base al caso d'uso del sistema.
- Misura il rendimento 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 ha causato il miglioramento.
- Raccogli le metriche appropriate per comprendere le caratteristiche del rendimento e decidere su un'azione successiva per l'ottimizzazione delle prestazioni.
Utilizzando le linee guida, puoi misurare il miglioramento del rendimento apportato dai seguenti fattori:
TensorRT (ottimizzazione del grafo). TensorRT applica le ottimizzazioni del grafico per NVIDIA T4. Ad esempio, modifica automaticamente i modelli di deep learning in modo che possano essere elaborati con Tensor Core. Innanzitutto, osserva il rendimento dell'inferenza senza TensorRT come base di riferimento. Poi, osserva il miglioramento del rendimento dopo aver applicato l'ottimizzazione del grafico TensorRT.
Conversione FP16. NVIDIA T4 supporta FP32 (virgola mobile a 32 bit) e FP16 per i calcoli in virgola mobile. Quando converti la precisione delle variabili da FP32 predefinito a 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 (intero a 8 bit) per la quantizzazione. Rispetto alla conversione in FP16, la quantizzazione INT8 può offrire 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. Puoi modificare le dimensioni del batch e il numero di gruppi di istanze utilizzando Triton. Ad esempio, quando imposti una dimensione del batch pari a 16, le richieste di inferenza vengono archiviate in una coda batch e 16 richieste vengono elaborate come un unico batch. Analogamente, se imposti un numero di gruppi di istanze pari a 4, più richieste vengono elaborate con 4 thread in parallelo. In questo scenario, ci sono 16 richieste in ogni batch e 4 thread in elaborazione 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 più elevato della GPU. Allo stesso tempo, regolando le dimensioni del batch, consenti a Triton di ottimizzare i calcoli sulla GPU. Ad esempio, può combinare più calcoli di richieste diverse in un'unica attività di calcolo sui Tensor Core.
Deployment
Per eseguire il deployment di questa architettura, consulta Eseguire il deployment di un sistema di inferenza TensorFlow scalabile.
Per misurare e ottimizzare il deployment, consulta Misurare e ottimizzare il rendimento di un sistema di inferenza TensorFlow.
Passaggi successivi
- Scopri di più su Google Kubernetes Engine (GKE).
- Scopri di più su Cloud Load Balancing.
- Per altre architetture di riferimento, diagrammi e best practice, visita il Cloud Architecture Center.