Come posso ottimizzare per un'applicazione di inferenza?

L'ottimizzazione dell'inferenza è la pratica di migliorare le prestazioni e l'efficienza dell'esecuzione di modelli di AI in produzione. Man mano che i modelli linguistici di grandi dimensioni (LLM) crescono fino a decine o centinaia di miliardi di parametri e le architetture di inferenza diventano più complesse, la difficoltà di progettare e mantenere le applicazioni aumenta. L'ottimizzazione è l'atto di gestire, monitorare e aggiornare questi carichi di lavoro ad alta intensità di calcolo, consentendo tempi di risposta inferiori al secondo e un throughput più elevato a un costo inferiore.

Implica una serie di tecniche, dalla compressione del modello alla gestione avanzata della memoria, che spostano l'attenzione dal semplice "esecuzione di un modello" alla "scalabilità di un servizio di intelligence". Ciò consente agli sviluppatori di creare applicazioni più adattabili mantenendo al contempo un'impronta infrastrutturale sostenibile.

In pratica, l'ottimizzazione dell'inferenza viene generalmente applicata in due modi principali:

Ottimizzazione a livello di infrastruttura: si concentra su come il modello viene eseguito sull'hardware. Ciò include l'utilizzo di runtime ottimizzati (come NVIDIA NIM o vLLM), la gestione della memoria GPU con tecniche come PagedAttention e l'utilizzo del batching in-flight per elaborare più richieste contemporaneamente. Questo è spesso il percorso più pratico per gli sviluppatori che utilizzano modelli open source o proprietari.

Ottimizzazione a livello di modello: comporta la modifica del modello stesso per ridurne le dimensioni o la complessità. Tecniche come la quantizzazione (riduzione della precisione da 16 bit a 4 bit), la distillazione (addestramento di un modello "studente" più piccolo per imitare un modello "insegnante" più grande) e la sparsità (eliminazione dei parametri non importanti) possono ridurre drasticamente la memoria e il calcolo richiesti per ogni token.

Comprendi il funzionamento del processo di inferenza

Il workflow a livello di codice

Per ottimizzare in modo efficace, devi comprendere le due fasi distinte dell'inferenza LLM:

Fase

Descrizione

Caratteristica principale

Precompilazione

Il modello elabora l'intero prompt di input per calcolare gli stati intermedi.

Altamente parallelizzato; vincolato al calcolo (satura la GPU).

Decode

Il modello genera i token di output uno alla volta, in modo autoregressivo.

Sequenziale; vincolato alla memoria (limitato dalla velocità di trasferimento dei dati).

Fase

Descrizione

Caratteristica principale

Precompilazione

Il modello elabora l'intero prompt di input per calcolare gli stati intermedi.

Altamente parallelizzato; vincolato al calcolo (satura la GPU).

Decode

Il modello genera i token di output uno alla volta, in modo autoregressivo.

Sequenziale; vincolato alla memoria (limitato dalla velocità di trasferimento dei dati).

  1. Descrivi l'obiettivo: inizia con un deployment del modello non ottimizzato
  2. Applica la quantizzazione: riduci i pesi del modello (ad esempio, a 4 bit) per adattare batch più grandi alla memoria
  3. Ottimizza l'attenzione: utilizza FlashAttention o Grouped-Query Attention (GQA) per ridurre al minimo i costi di spostamento della memoria
  4. Gestione della memoria: implementa PagedAttention per archiviare le cache KV in blocchi non contigui, eliminando la frammentazione
  5. Esegui e monitora: esegui il deployment con il raggruppamento in volo per avviare immediatamente nuove richieste al termine delle altre

Ottimizzazione dell'inferenza rispetto al deployment standard

Ecco un confronto tra l'inferenza ottimizzata e l'erogazione del modello "naive" tradizionale:

Funzionalità

Deployment standard

Inferenza ottimizzata

Velocità effettiva

Limitato da dimensioni statiche dei batch e tempi di inattività.

Alto: utilizza il batching in-flight e l'iterazione continua.

Latenza

Crescita lineare con la lunghezza della sequenza; TTFT (Time to First Token) elevato.

Ottimizzato: utilizza l'accelerazione del prefill e la decodifica speculativa.

Gestione della memoria

Allocazione statica (over-provisioning per la lunghezza massima).

Dinamico (paginazione); spreco minimo tramite PagedAttention.

Efficienza hardware

Spesso non sfrutta appieno le capacità di calcolo di GPU/TPU.

Massimizzato; utilizza kernel ottimizzati (TFE-IE, XLA).

Costo per richiesta

Più alto; richiede più hardware per lo stesso carico.

Inferiore: raggruppa più richieste nella stessa infrastruttura.

Funzionalità

Deployment standard

Inferenza ottimizzata

Velocità effettiva

Limitato da dimensioni statiche dei batch e tempi di inattività.

Alto: utilizza il batching in-flight e l'iterazione continua.

Latenza

Crescita lineare con la lunghezza della sequenza; TTFT (Time to First Token) elevato.

Ottimizzato: utilizza l'accelerazione del prefill e la decodifica speculativa.

Gestione della memoria

Allocazione statica (over-provisioning per la lunghezza massima).

Dinamico (paginazione); spreco minimo tramite PagedAttention.

Efficienza hardware

Spesso non sfrutta appieno le capacità di calcolo di GPU/TPU.

Massimizzato; utilizza kernel ottimizzati (TFE-IE, XLA).

Costo per richiesta

Più alto; richiede più hardware per lo stesso carico.

Inferiore: raggruppa più richieste nella stessa infrastruttura.

Inizia: scegli il tuo ambiente di orchestrazione

Google Cloud offre una gamma di strumenti progettati per diversi livelli di competenza ed esigenze architetturali.

Strumento

Punto di partenza

Livello di abilità

Metodo

Funzionalità principale

Cloud Run (con GPU)

Un servizio di AI leggero e basato su eventi

Principiante

Serverless

Inferenza con scalabilità fino a zero per carichi di lavoro a bassa latenza e con burst

Un modello OSS (come Llama 3)

Da principiante a intermedio

Gestito / low-code

Deployment con un clic con runtime vLLM o NVIDIA NIM ottimizzati


Workload di produzione ad alte prestazioni

Da intermedio ad avanzato

Inferenza accelerata

Microservizi predefiniti con ottimizzazioni TensorRT-LLM all'avanguardia

Un'infrastruttura personalizzata e multi-modello

Avanzato

Cloud-native / personalizzato

Controllo completo su sharding GPU, orchestrazione e server di inferenza personalizzati

Sviluppo su larga scala incentrato sulle TPU

Avanzato

Ottimizzato per TPU / XLA

Personalizzato per XLA con batching continuo e PagedAttention su Cloud TPU

Strumento

Punto di partenza

Livello di abilità

Metodo

Funzionalità principale

Cloud Run (con GPU)

Un servizio di AI leggero e basato su eventi

Principiante

Serverless

Inferenza con scalabilità fino a zero per carichi di lavoro a bassa latenza e con burst

Un modello OSS (come Llama 3)

Da principiante a intermedio

Gestito / low-code

Deployment con un clic con runtime vLLM o NVIDIA NIM ottimizzati


Workload di produzione ad alte prestazioni

Da intermedio ad avanzato

Inferenza accelerata

Microservizi predefiniti con ottimizzazioni TensorRT-LLM all'avanguardia

Un'infrastruttura personalizzata e multi-modello

Avanzato

Cloud-native / personalizzato

Controllo completo su sharding GPU, orchestrazione e server di inferenza personalizzati

Sviluppo su larga scala incentrato sulle TPU

Avanzato

Ottimizzato per TPU / XLA

Personalizzato per XLA con batching continuo e PagedAttention su Cloud TPU

Come ottimizzare l'inferenza con Vertex AI Model Garden

Model Garden è il percorso più rapido per il deployment di versioni ottimizzate dei principali modelli open come Llama, Gemma e Mistral.

Passaggio 1: seleziona e configura il modello

Vai a Model Garden e trova un modello OSS supportato. Fai clic su Esegui il deployment. Nella configurazione, seleziona un runtime ottimizzato come vLLM o NVIDIA NIM.

Passaggio 2: applica la quantizzazione

Scegli una versione quantizzata del modello (ad esempio a 4 o 8 bit) per ridurre il footprint della memoria. Ciò consente di erogare dimensioni dei batch più grandi sulla stessa GPU, aumentando direttamente il throughput.

Passaggio 3: attiva la gestione avanzata della memoria

Assicurati che il container di distribuzione sia configurato per utilizzare PagedAttention. Questa tecnica consente al modello di archiviare la propria "memoria" (cache chiave-valore) in blocchi non contigui, evitando lo spreco di memoria e consentendo finestre di contesto più lunghe.

Passaggio 4: esegui il deployment e monitora

Una volta eseguito il deployment, Vertex AI gestisce automaticamente il raggruppamento in-flight, elaborando nuove richieste non appena una richiesta esistente completa un token. Utilizza Vertex AI Model Monitoring per monitorare la latenza e assicurarti che la "qualità" dell'output rimanga elevata.

Come ottimizzare l'inferenza con GKE

Per i team che hanno bisogno di un controllo granulare sull'orchestrazione e sui kernel di inferenza personalizzati, GKE è la scelta standard del settore.

Passaggio 1: inizializza il cluster con GPU NVIDIA o Cloud TPU

Esegui il provisioning di un cluster GKE con nodi GPU specializzati (ad esempio, L4 o H100). Installa l'operatore GPU NVIDIA per gestire automaticamente la gestione dei driver e l'ottimizzazione delle prestazioni.

Passaggio 2: esegui il deployment di un server di inferenza ottimizzato

Utilizza un motore di inferenza containerizzato come vLLM o Triton Inference Server. Questi server supportano il batching continuo e il parallelismo dei tensori, consentendoti di suddividere modelli di grandi dimensioni su più GPU. vLLM ti offre anche la possibilità di passare da TPU a GPU, con una minima codifica aggiuntiva.

Passaggio 3: implementa la decodifica speculativa

Per le esigenze di latenza mission-critical, configura la decodifica speculativa. Ciò comporta l'utilizzo di un modello "bozza" più piccolo e veloce per prevedere i token, che vengono poi verificati in parallelo dal modello "target" più grande, spesso con un aumento della velocità di 2-3 volte.

Passaggio 4: semplifica il deployment con GKE Inference Quickstart

GKE Inference Quickstart funge da database preconfigurato di configurazioni dello stack di inferenza testate. Specificando il modello, i requisiti di latenza e le priorità di costo, lo strumento fornisce una serie di consigli basati sulle best practice e sugli ultimi benchmark. Ciò ti consente di monitorare le metriche delle prestazioni specifiche per l'inferenza e di ottimizzare dinamicamente il deployment per garantire che venga sempre eseguito su una tecnologia ottimizzata.

Passaggio 5: scalabilità con GKE Inference Gateway

GKE Inference Gateway è ora disponibile a livello generale e introduce due funzionalità avanzate per la gestione di applicazioni di AI generativa complesse.

  • Routing con riconoscimento del prefisso: per applicazioni come la chat a più turni o l'analisi di documenti, questa funzionalità indirizza le richieste agli stessi acceleratori che hanno già la cache del contesto, migliorando i tempi di risposta.
  • Distribuzione disaggregata: questa tecnica separa la fase iniziale di "prefill" (elaborazione del prompt) dalla fase di "decodifica" (generazione di token). Poiché queste fasi hanno esigenze di risorse diverse, puoi eseguirle su pool di macchine separati e ottimizzati per massimizzare l'efficienza.

Passaggio 6: accelera l'accesso ai dati con Anywhere Cache

Anywhere cache è una nuova cache di lettura completamente coerente che funziona con i bucket Google Cloud Storage (GCS) esistenti per memorizzare nella cache i dati all'interno della stessa zona degli acceleratori. Ciò riduce la latenza di lettura fino al 96% e minimizza i costi di rete associati ai carichi di lavoro con molte letture.

Passaggio 7: connetti i carichi di lavoro globali con Cloud WAN

A tenere insieme l'intera infrastruttura è Cloud WAN, una rete globale completamente gestita basata sull'infrastruttura di Google su scala planetaria. Cloud WAN connette le risorse di computing AI in diverse regioni, cloud e ambienti on-premise, offrendo un miglioramento del 40% nell'esperienza delle applicazioni di inferenza e un TCO inferiore del 40% rispetto alle soluzioni WAN tradizionali.

Risolvi le tue sfide aziendali con Google Cloud

I nuovi clienti ricevono 300 $ di crediti senza costi da spendere su Google Cloud.

Fai un passo avanti

Inizia a creare su Google Cloud con 300 $ di crediti senza costi e oltre 20 prodotti sempre senza costi.

Google Cloud