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.
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.
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).
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.
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
Model Garden è il percorso più rapido per il deployment di versioni ottimizzate dei principali modelli open come Llama, Gemma e Mistral.
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.
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.
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.
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.
Per i team che hanno bisogno di un controllo granulare sull'orchestrazione e sui kernel di inferenza personalizzati, GKE è la scelta standard del settore.
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.
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.
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.
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.
GKE Inference Gateway è ora disponibile a livello generale e introduce due funzionalità avanzate per la gestione di applicazioni di AI generativa complesse.
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.
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.
Inizia a creare su Google Cloud con 300 $ di crediti senza costi e oltre 20 prodotti sempre senza costi.