L'ascesa dell'IA generativa (GenAI) ha trasformato i settori industriali, dall'elaborazione del linguaggio naturale alla generazione di contenuti creativi. Tuttavia, l'impiego di questi potenti modelli in modo efficiente e su scala rimane una sfida.
I motori di inferenza svolgono un ruolo fondamentale nell'ottimizzazione delle prestazioni, nella riduzione della latenza e nella massimizzazione dell'utilizzo delle risorse. In questo articolo analizziamo quattro soluzioni leader: TensorRT-LLM, vLLM, Hugging Face TGI e LMDeploy.
Ognuno di essi offre punti di forza unici, che si tratti della precisione accelerata dall'hardware di NVIDIA, dell'innovativa gestione della memoria di vLLM, dell'ecosistema pronto per la produzione di TGI o dell'attenzione alla velocità e alla semplicità di LMDeploy. Unitevi a noi nel confronto tra questi motori per aiutarvi a trovare la soluzione perfetta per i vostri carichi di lavoro GenAI.
TensorRT-LLM è la risposta di NVIDIA per l'esecuzione rapida e fluida di modelli linguistici di grandi dimensioni. Costruito sul framework TensorRT, è progettato per spremere ogni goccia di prestazioni dalle GPU NVIDIA. Lo fa con trucchi come la fusione dei livelli, la regolazione della precisione (FP16, INT8, FP8...) e l'ottimizzazione del kernel che riduce i tempi di calcolo senza compromettere la precisione del modello.
Non si tratta solo di velocità. TensorRT-LLM gestisce in modo efficiente i modelli di grandi dimensioni gestendo la memoria in modo intelligente, in modo da non bloccarsi a metà dell'esecuzione. Supporta anche il batching dinamico, consentendo di elaborare più richieste contemporaneamente senza esaurire la memoria. Se si utilizza già l'hardware NVIDIA, non c'è problema: è strettamente legato al suo ecosistema, come CUDA e cuDNN, e si integra persino con Triton Inference Server e NVIDIA Dynamo di NVIDIA.
Detto questo, non è perfetto per tutti. L'installazione può essere un problema se non si ha dimestichezza con gli strumenti di NVIDIA ed è meno flessibile se si utilizza hardware non NVIDIA. Tuttavia, per quanto riguarda la potenza e l'ottimizzazione delle GPU NVIDIA, è difficile da battere.
vLLM è molto bravo a gestire velocemente volumi elevati di lavori di inferenza. È un progetto open-source che brilla quando è necessario un elevato throughput senza rallentamenti. La salsa segreta è PagedAttention, un trucco che gestisce la memoria molto meglio di altri. Invece di caricare tutto in una volta e consumare RAM, divide le cache dei valori-chiave in pezzi, prendendo solo ciò che è necessario. Meno sprechi, più velocità.
È anche molto flessibile. Funziona con i modelli più diffusi, come LLaMA o Mistral, e supporta molti hardware, comprese le GPU NVIDIA o AMD. È inoltre possibile ottenere il batching dinamico per raggruppare le richieste in modo efficiente, mantenendo la pipeline fluida. La configurazione è piuttosto semplice se si è abituati a Python e PyTorch.
Il limite principale di vLLM è la sua relativa immaturità sul mercato, il che significa che non può ancora offrire il set completo di funzionalità disponibili in soluzioni più consolidate. Tuttavia, per le organizzazioni che cercano una soluzione efficiente che offra inferenze ad alte prestazioni, vLLM rappresenta una scelta eccellente.
Hugging Face TGI (Text Generation Inference) è pensato per coloro che vogliono ottenere modelli funzionanti senza problemi. È uno strumento costruito dal team di Hugging Face, quindi si integra con la loro enorme libreria di modelli pre-addestrati, come BERT, GPT e altri. È stato progettato per l'uso nel mondo reale, come l'alimentazione di chatbot o di applicazioni in cui la generazione di testo deve funzionare velocemente e non bloccarsi.
TGI gestisce il lavoro pesante con funzioni come il batching continuo, che mantiene il sistema occupato scambiando le nuove richieste con quelle vecchie. Supporta l'accelerazione GPU e può scalare se si dispone dell'hardware necessario. Inoltre, ha una sicurezza integrata, come il filtraggio dei risultati errati, utile per la produzione. È possibile distribuirlo con Docker in pochi passaggi, quindi è relativamente facile da configurare.
Il problema? È legato all'ecosistema di Hugging Face, quindi se non si è già in quel mondo, potrebbe risultare restrittivo. Tuttavia, per un'opzione plug-and-play pronta all'uso, TGI è un'ottima scelta.
LMDeploy è un toolkit dei team MMRazor e MMDeploy, costruito per comprimere, distribuire ed eseguire modelli linguistici di grandi dimensioni senza problemi. Cosa lo distingue? Ha un'eccellente velocità di decodifica, fino a 1,8 volte più richieste al secondo rispetto a vLLM su una GPU A100. Questo grazie a trucchi come il batching persistente, la cache KV bloccata e gli ottimi kernel CUDA che tengono impegnata la GPU.
Ha due motori: TurboMind per le massime prestazioni e PyTorch per una maggiore facilità di elaborazione. TurboMind è la star: spinge l'inferenza a 4 bit 2,4 volte più velocemente di FP16 e gestisce con facilità modelli grandi come Llama-2 70B. È inoltre possibile quantizzare i pesi e le cache KV per risparmiare memoria senza compromettere la precisione. Anche la distribuzione è semplice: un comando imposta un server su più macchine, se necessario. Inoltre, ricorda la cronologia della chat nei colloqui a più riprese, in modo da non perdere tempo a rifare il vecchio lavoro.
Il lato negativo? TurboMind è esigente: non è ancora compatibile con i modelli di attenzione a finestra scorrevole come Mistral. Inoltre, se non si utilizzano GPU NVIDIA, si è costretti a utilizzare il più lento motore PyTorch. Tuttavia, per velocità e semplicità con l'hardware giusto, LMDeploy è un'ottima scelta.
Vediamo come si comportano questi motori per quanto riguarda la latenza (la velocità di completamento di una richiesta), il throughput (il numero di richieste che possono ingerire) e la scalabilità (la capacità di gestire carichi più grandi o un hardware maggiore).
TensorRT-LLM brilla per la latenza se si dispone di GPU NVIDIA. È altamente ottimizzato per l'hardware NVIDIA, quindi le singole richieste terminano rapidamente: meno di 50 ms per la maggior parte dei modelli su un A100. Anche il throughput è eccellente, soprattutto con il batching dinamico. I benchmark di BentoML mostrano che questo motore raggiunge 700 token al secondo con 100 utenti contemporanei per Llama 3 70B Q4 su una GPU A100 80GB. TensorRT-LLM si comporta egregiamente in scenari con input lunghi e tassi di richiesta elevati, offrendo un buon throughput. La scalabilità su più GPU è supportata in modo immediato e con prestazioni eccellenti.
Anche vLLM ha un buon throughput, in particolare nei carichi di lavoro pesanti per la decodifica, con un throughput elevato e una bassa latenza dopo i recenti aggiornamenti. I benchmark di BentoML mostrano che questo motore raggiunge 600-650 token al secondo con 100 utenti contemporanei per Llama 3 70B Q4 su una GPU A100 80GB. La latenza è buona, ma non quanto quella di TensorRT-LLM: circa 60-80 ms per le esecuzioni in solitaria. Si adatta bene a tutte le GPU, anche a quelle di marche diverse, ma è meno raffinato per le grandi configurazioni.
Hugging Face TGI si comporta in modo simile a vLLM, offrendo un equilibrio tra prestazioni e facilità d'uso. La latenza è decente: 50-70 ms su una buona GPU. I benchmark di BentoML mostrano che questo motore raggiunge 600-650 token al secondo con 100 utenti contemporanei per Llama 3 70B Q4 su una GPU A100 80GB. È costruito per scalare la produzione, quindi gestisce senza problemi un numero maggiore di utenti o di macchine, soprattutto con Docker.
LMDeploy vince sulla velocità di decodifica. Eccelle nella velocità di generazione dei token, soprattutto per i modelli più piccoli, e ha un basso tempo per il primo token (TTFT) per i modelli quantizzati di grandi dimensioni. La latenza è bassa: 40-60 ms. E il throughput è eccellente. I benchmark di BentoML mostrano che questo motore raggiunge 700 token al secondo con 100 utenti contemporanei per Llama 3 70B Q4 su una GPU A100 da 80 GB. La scalabilità è facile grazie alla configurazione del server, ma per ottenere i migliori risultati si affida alle GPU NVIDIA; la modalità PyTorch rimane indietro.
In conclusione: TensorRT-LLM e LMDeploy sono in testa per quanto riguarda la velocità grezza. La scelta dipende dall'hardware e dal numero di richieste gestite.
La quantizzazione riduce la precisione del modello per ridurre l'uso della memoria e accelerare l'inferenza, il che è importante per gli ambienti con risorse limitate. Ecco come si comporta ogni motore:
TensorRT-LLM supporta FP8, FP4, INT4 con Activation-aware Weight Quantization (AWQ) e INT8 con SmoothQuant, offrendo opzioni solide per l'ottimizzazione delle prestazioni delle GPU NVIDIA.
vLLM offre flessibilità con GPTQ, AWQ, INT4, INT8 e FP8, adattandosi alle varie esigenze di hardware e precisione.
Hugging Face TGI integra bitsandbyte per la quantizzazione a 8 e 4 bit e GPT-Q per la quantizzazione solo ponderale, adatta alle implementazioni di produzione.
LMDeploy offre AWQ a 4 bit, quantizzazione a 8 bit e quantizzazione della cache INT8/INT4 KV online, migliorando l'efficienza dei modelli di grandi dimensioni su hardware limitato.
Il supporto hardware determina dove è possibile distribuire questi motori, con un impatto sulla scalabilità e sulle prestazioni:
TensorRT-LLM è un'esclusiva di NVIDIA CUDA e sfrutta gli acceleratori di GPU per ottenere prestazioni elevate.
vLLM supporta NVIDIA CUDA, AMD ROCm, AWS Neuron e CPU, offrendo un'ampia compatibilità per diverse configurazioni.
Hugging Face TGI funziona con NVIDIA CUDA, AMD ROCm, Intel Gaudi e AWS Inferentia, offrendo flessibilità per vari ambienti hardware.
LMDeploy è ottimizzato per NVIDIA CUDA, garantendo le massime prestazioni sulle GPU NVIDIA, ma con un supporto limitato per altre piattaforme.
Il processo di configurazione e integrazione può influire sulle tempistiche di sviluppo. Ecco come si comporta ogni motore:
TensorRT-LLM richiede la conversione dei checkpoint, la creazione del motore TensorRT e la configurazione dei parametri, il che lo rende impegnativo e richiede molto tempo agli ingegneri.
vLLM è facile da usare, con una documentazione completa, un'installazione semplice e una perfetta integrazione con le librerie Python.
Hugging Face TGI beneficia dell'ecosistema di Hugging Face, che offre immagini Docker precostituite e una documentazione completa per una rapida implementazione.
LMDeploy è caratterizzato da una semplice configurazione con un singolo comando per lanciare il server e API Python per la personalizzazione, bilanciando facilità e flessibilità.
La scelta del motore giusto dipende dal caso d'uso, dall'hardware e dalle competenze.
TensorRT-LLM è il motore di inferenza ideale per chi esegue modelli di grandi dimensioni su GPU NVIDIA e ha bisogno di ogni grammo di velocità (si pensi ad applicazioni a bassa latenza come chatbot in tempo reale o assistenti AI in cui le risposte devono essere generate in millisecondi). È perfetto per le aziende già inserite nel mondo di NVIDIA, ma potrebbe risultare eccessivo se si cerca la semplicità.
vLLM è un ottimo compromesso tra velocità e semplicità. Funziona molto bene per le startup o i ricercatori che vogliono qualcosa di flessibile e veloce da configurare.
Hugging Face TGI è equivalente a vLLM in termini di velocità e semplicità. È facile da implementare, si scala senza problemi e si collega all'hub dei modelli di Hugging Face, quindi è ideale per i team che desiderano una soluzione senza complicazioni.
LMDeploy brilla per le prestazioni, come TensorRT-LLM. È adatto agli utenti con GPU NVIDIA che desiderano una configurazione semplice e prestazioni elevate, ma è meno utile se i modelli non funzionano bene con TurboMind.
Se non potete o non volete implementare da soli il vostro modello GenAI, potete utilizzare NLP Cloud e sfruttare modelli di IA generativa veloci e su scala in produzione. Provate subito l'inferenza veloce su NLP Cloud!
Se avete domande sui motori di inferenza in generale, non esitate a chiedercele, è sempre un piacere consigliarvi!
Julien
CTO di NLP Cloud