Intelligenza artificiale
TensorRT-LLM: Una Guida Completa per Ottimizzare l’Inferenza dei Modelli Linguistici di Grande Scala per Prestazioni Massime

Man mano che la domanda di modelli linguistici di grande scala (LLM) continua a crescere, assicurarsi di avere un’inferenza veloce, efficiente e scalabile è diventato più cruciale che mai. NVIDIA’s TensorRT-LLM interviene per affrontare questa sfida fornendo un set di potenti strumenti e ottimizzazioni progettati specificamente per l’inferenza LLM. TensorRT-LLM offre un’impressionante gamma di miglioramenti delle prestazioni, come la quantizzazione, la fusione del kernel, il batching in volo e il supporto multi-GPU. Questi progressi rendono possibile raggiungere velocità di inferenza fino a 8 volte più veloci dei metodi tradizionali basati su CPU, trasformando il modo in cui distribuiamo LLM in produzione.
Questa guida completa esplorerà tutti gli aspetti di TensorRT-LLM, dalla sua architettura e funzionalità chiave a esempi pratici per la distribuzione di modelli. Che tu sia un ingegnere di intelligenza artificiale, uno sviluppatore software o un ricercatore, questa guida ti fornirà le conoscenze per sfruttare TensorRT-LLM per ottimizzare l’inferenza LLM su GPU NVIDIA.
Velocizzare l’Inferenza LLM con TensorRT-LLM
TensorRT-LLM offre miglioramenti drammatici nelle prestazioni dell’inferenza LLM. Secondo i test di NVIDIA, le applicazioni basate su TensorRT mostrano velocità di inferenza fino a 8x più veloci rispetto alle piattaforme solo CPU. Questo è un progresso cruciale per le applicazioni in tempo reale come chatbot, sistemi di raccomandazione e sistemi autonomi che richiedono risposte rapide.
Come Funziona
TensorRT-LLM velocizza l’inferenza ottimizzando le reti neurali durante la distribuzione utilizzando tecniche come:
- Quantizzazione: Riduce la precisione dei pesi e delle attivazioni, riducendo le dimensioni del modello e migliorando la velocità di inferenza.
- Fusione di Layer e Tensor: Unisce operazioni come funzioni di attivazione e moltiplicazioni di matrici in un’unica operazione.
- Ottimizzazione del Kernel: Seleziona i kernel CUDA ottimali per il calcolo sulla GPU, riducendo il tempo di esecuzione.
Queste ottimizzazioni assicurano che i tuoi modelli LLM si eseguano in modo efficiente su una vasta gamma di piattaforme di distribuzione, dalle infrastrutture di data center iperscalabili ai sistemi integrati.
Ottimizzare le Prestazioni dell’Inferenza con TensorRT
Costruito sul modello di programmazione parallela CUDA di NVIDIA, TensorRT fornisce ottimizzazioni altamente specializzate per l’inferenza su GPU NVIDIA. Streamlinando processi come la quantizzazione, l’ottimizzazione del kernel e la fusione delle operazioni dei tensori, TensorRT assicura che gli LLM possano essere eseguiti con latenza minima.
Alcune delle tecniche più efficaci includono:
- Quantizzazione: Ciò riduce la precisione numerica dei parametri del modello mantenendo un’alta accuratezza, velocizzando efficacemente l’inferenza.
- Fusione del Tensor: Unendo più operazioni in un unico kernel CUDA, TensorRT minimizza l’onere della memoria e aumenta il throughput.
- Auto-ottimizzazione del Kernel: TensorRT seleziona automaticamente il kernel migliore per ogni operazione, ottimizzando l’inferenza per una determinata GPU.
Queste tecniche consentono a TensorRT-LLM di ottimizzare le prestazioni dell’inferenza per compiti di apprendimento automatico come l’elaborazione del linguaggio naturale, i motori di raccomandazione e l’analisi video in tempo reale.
Accelerare i Carichi di Lavoro di Intelligenza Artificiale con TensorRT
TensorRT accelera i carichi di lavoro di apprendimento automatico integrando ottimizzazioni di precisione come INT8 e FP16. Questi formati a precisione ridotta consentono un’inferenza significativamente più veloce mantenendo l’accuratezza. Ciò è particolarmente prezioso nelle applicazioni in tempo reale in cui la bassa latenza è una richiesta critica.
Le ottimizzazioni INT8 e FP16 sono particolarmente efficaci in:
- Streaming Video: I compiti di elaborazione video basati sull’IA, come la rilevazione degli oggetti, beneficiano di queste ottimizzazioni riducendo il tempo necessario per l’elaborazione dei fotogrammi.
- Sistemi di Raccomandazione: Accelerando l’inferenza per i modelli che elaborano grandi quantità di dati utente, TensorRT consente la personalizzazione in tempo reale su larga scala.
- Elaborazione del Linguaggio Naturale (NLP): TensorRT migliora la velocità dei compiti NLP come la generazione di testo, la traduzione e la sintesi, rendendoli adatti alle applicazioni in tempo reale.
Distribuire, Eseguire e Scalare con NVIDIA Triton
Una volta che il tuo modello è stato ottimizzato con TensorRT-LLM, puoi facilmente distribuirlo, eseguirlo e scalarlo utilizzando NVIDIA Triton Inference Server. Triton è un software open-source che supporta il batching dinamico, gli ensemble di modelli e un alto throughput. Fornisce un ambiente flessibile per la gestione dei modelli di intelligenza artificiale su larga scala.
Alcune delle funzionalità chiave includono:
- Esecuzione Concorrente del Modello: Esegui più modelli contemporaneamente, massimizzando l’utilizzo della GPU.
- Batching Dinamico: Combina più richieste di inferenza in un unico batch, riducendo la latenza e aumentando il throughput.
- Input di Audio/Video in Streaming: Supporta flussi di input in tempo reale, come l’analisi video live o i servizi di riconoscimento vocale.
Ciò rende Triton uno strumento prezioso per la distribuzione di modelli ottimizzati con TensorRT-LLM in ambienti di produzione, assicurando alta scalabilità ed efficienza.
Funzionalità Principali di TensorRT-LLM per l’Inferenza LLM
API Python Open-Source
TensorRT-LLM fornisce un’API Python altamente modulare e open-source, semplificando il processo di definizione, ottimizzazione ed esecuzione degli LLM. L’API consente agli sviluppatori di creare LLM personalizzati o modificare quelli predefiniti per adattarli alle loro esigenze, senza richiedere una conoscenza approfondita di CUDA o framework di apprendimento automatico.
Batching in Volo e Attenzione Paginata
Una delle funzionalità più importanti di TensorRT-LLM è il Batching in Volo, che ottimizza la generazione di testo elaborando più richieste contemporaneamente. Questa funzionalità minimizza il tempo di attesa e migliora l’utilizzo della GPU eseguendo il batching dinamico delle sequenze.
Inoltre, l’Attenzione Paginata assicura che l’utilizzo della memoria rimanga basso anche quando si elaborano lunghe sequenze di input. Invece di allocare memoria contigua per tutti i token, l’attenzione paginata divide la memoria in “pagine” che possono essere riutilizzate dinamicamente, prevenendo la frammentazione della memoria e migliorando l’efficienza.
Inferenza Multi-GPU e Multi-Node
Per modelli più grandi o carichi di lavoro più complessi, TensorRT-LLM supporta l’inferenza multi-GPU e multi-node. Questa capacità consente la distribuzione dei calcoli del modello su più GPU o nodi, migliorando il throughput e riducendo il tempo di inferenza complessivo.
Supporto FP8
Con l’avvento di FP8 (punto fluttuante a 8 bit), TensorRT-LLM sfrutta le innovazioni hardware più recenti di NVIDIA nelle architetture H100 Hopper. FP8 riduce l’impronta di memoria degli LLM memorizzando pesi e attivazioni in formato a 8 bit, risultando in calcoli più veloci senza sacrificare l’accuratezza. TensorRT-LLM compila automaticamente i modelli per utilizzare kernel ottimizzati FP8, accelerando ulteriormente i tempi di inferenza.
Architettura e Componenti di TensorRT-LLM
Comprendere l’architettura di TensorRT-LLM ti aiuterà a sfruttarne al meglio le capacità per l’inferenza LLM. Analizziamo i componenti chiave:
Definizione del Modello
TensorRT-LLM consente di definire LLM utilizzando un’API Python semplice. L’API costruisce una representazione grafica del modello, rendendo più facile la gestione dei layer complessi coinvolti nelle architetture LLM come GPT o BERT.
Associazione dei Pesi
Prima della compilazione del modello, i pesi (o parametri) devono essere associati alla rete. Questo passaggio assicura che i pesi siano incorporati nel motore TensorRT, consentendo un’inferenza rapida ed efficiente. TensorRT-LLM consente inoltre di aggiornare i pesi dopo la compilazione, aggiungendo flessibilità per i modelli che richiedono aggiornamenti frequenti.
Corrispondenza dei Modelli e Fusione
La Fusione delle Operazioni è un’altra funzionalità potente di TensorRT-LLM. Unendo più operazioni (ad esempio, moltiplicazioni di matrici con funzioni di attivazione) in un unico kernel CUDA, TensorRT minimizza l’onere associato ai lanci multipli del kernel. Ciò riduce i trasferimenti di memoria e velocizza l’inferenza.
Plugin
Per estendere le funzionalità di TensorRT, gli sviluppatori possono scrivere plugin—kernel personalizzati che eseguono compiti specifici come l’ottimizzazione dei blocchi di attenzione multi-testa. Ad esempio, il plugin Flash-Attention migliora notevolmente le prestazioni degli strati di attenzione degli LLM.
Benchmark: Miglioramenti delle Prestazioni di TensorRT-LLM
TensorRT-LLM dimostra miglioramenti significativi delle prestazioni per l’inferenza LLM su diverse GPU. Ecco un confronto della velocità di inferenza (misurata in token al secondo) utilizzando TensorRT-LLM su diverse GPU NVIDIA:
| Modello | Precisione | Lunghezza di Input/Output | H100 (80GB) | A100 (80GB) | L40S FP8 |
|---|---|---|---|---|---|
| GPTJ 6B | FP8 | 128/128 | 34,955 | 11,206 | 6,998 |
| GPTJ 6B | FP8 | 2048/128 | 2,800 | 1,354 | 747 |
| LLaMA v2 7B | FP8 | 128/128 | 16,985 | 10,725 | 6,121 |
| LLaMA v3 8B | FP8 | 128/128 | 16,708 | 12,085 | 8,273 |
Questi benchmark mostrano che TensorRT-LLM offre miglioramenti sostanziali delle prestazioni, in particolare per sequenze più lunghe.
Guida Pratica: Installazione e Compilazione di TensorRT-LLM
Passo 1: Creare un Ambiente del Contenitore
Per facilitare l’uso, TensorRT-LLM fornisce immagini Docker per creare un ambiente controllato per la compilazione e l’esecuzione dei modelli.
docker build --pull \ --target devel \ --file docker/Dockerfile.multi \ --tag tensorrt_llm/devel:latest .
docker run --rm -it \
--ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all \
--volume ${PWD}:/code/tensorrt_llm \
--workdir /code/tensorrt_llm \
tensorrt_llm/devel:latest
Passo 2: Eseguire il Contenitore
Esegui il contenitore di sviluppo con accesso alle GPU NVIDIA:
docker run --rm -it \
--ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --gpus=all \
--volume ${PWD}:/code/tensorrt_llm \
--workdir /code/tensorrt_llm \
tensorrt_llm/devel:latest
Passo 3: Compilare TensorRT-LLM dal Codice Sorgente
All’interno del contenitore, compila TensorRT-LLM con il seguente comando:
python3 ./scripts/build_wheel.py --trt_root /usr/local/tensorrt pip install ./build/tensorrt_llm*.whl
Passo 4: Collegare il Runtime C++ di TensorRT-LLM
Quando si integra TensorRT-LLM in progetti C++, assicurarsi che i percorsi di inclusione del progetto puntino alla directory cpp/include. Questa contiene gli header API stabili e supportati. Le librerie di TensorRT-LLM vengono collegate come parte del processo di compilazione C++.
Ad esempio, la configurazione CMake del tuo progetto potrebbe includere:
include_directories(${TENSORRT_LLM_PATH}/cpp/include)
link_directories(${TENSORRT_LLM_PATH}/cpp/build/tensorrt_llm)
target_link_libraries(your_project tensorrt_llm)
Questa integrazione consente di sfruttare le ottimizzazioni di TensorRT-LLM nei tuoi progetti C++ personalizzati, assicurando un’inferenza efficiente anche in ambienti a basso livello o ad alte prestazioni.
Funzionalità Avanzate di TensorRT-LLM
TensorRT-LLM è più di una semplice libreria di ottimizzazione; include diverse funzionalità avanzate che aiutano ad affrontare la distribuzione su larga scala degli LLM. Di seguito, esploriamo alcune di queste funzionalità in dettaglio:
1. Batching in Volo
Il batching tradizionale prevede di attendere che un batch sia completamente raccolto prima di elaborarlo, il che può causare ritardi. Il Batching in Volo cambia questo avviando dinamicamente l’inferenza sulle richieste completate all’interno di un batch mentre si continuano a raccogliere altre richieste. Ciò migliora il throughput complessivo minimizzando il tempo di inattività e migliorando l’utilizzo della GPU.
Questa funzionalità è particolarmente preziosa nelle applicazioni in tempo reale, come chatbot o assistenti vocali, dove il tempo di risposta è critico.
2. Attenzione Paginata
L’Attenzione Paginata è una tecnica di ottimizzazione della memoria per gestire lunghe sequenze di input. Invece di richiedere memoria contigua per tutti i token in una sequenza (il che può portare a frammentazione della memoria), l’Attenzione Paginata consente al modello di dividere i dati della cache delle chiavi-valori in “pagine” di memoria. Queste pagine vengono allocate e deallocate dinamicamente, ottimizzando l’utilizzo della memoria.
L’Attenzione Paginata è critica per gestire lunghe lunghezze di sequenza e ridurre l’onere della memoria, in particolare nei modelli generativi come GPT e LLaMA.
3. Plugin Personalizzati
TensorRT-LLM consente di estendere le sue funzionalità con plugin personalizzati. I plugin sono kernel personalizzati che eseguono compiti specifici come l’ottimizzazione degli strati di attenzione multi-testa.
Ad esempio, il plugin Flash-Attention è un kernel personalizzato noto per ottimizzare gli strati di attenzione nei modelli basati su Transformer. Utilizzando questo plugin, gli sviluppatori possono ottenere miglioramenti sostanziali nella velocità di calcolo dell’attenzione, uno dei componenti più intensivi in termini di risorse degli LLM.
Per integrare un plugin personalizzato nel tuo modello TensorRT-LLM, puoi scrivere un kernel CUDA personalizzato e registrararlo con TensorRT. Il plugin verrà invocato durante l’esecuzione del modello, fornendo miglioramenti di prestazioni personalizzati.
4. Precisione FP8 su NVIDIA H100
Con la precisione FP8, TensorRT-LLM sfrutta le innovazioni hardware più recenti di NVIDIA nelle architetture H100 Hopper. FP8 riduce l’impronta di memoria degli LLM memorizzando pesi e attivazioni in formato a 8 bit, risultando in calcoli più veloci senza sacrificare l’accuratezza. TensorRT-LLM compila automaticamente i modelli per utilizzare kernel ottimizzati FP8, accelerando ulteriormente i tempi di inferenza.
Ciò rende TensorRT-LLM una scelta ideale per distribuzioni su larga scala che richiedono prestazioni di alto livello ed efficienza energetica.
Esempio: Distribuzione di TensorRT-LLM con Triton Inference Server
Per le distribuzioni in produzione, il server di inferenza Triton di NVIDIA fornisce una piattaforma robusta per la gestione dei modelli su larga scala. In questo esempio, dimostreremo come distribuire un modello ottimizzato con TensorRT-LLM utilizzando Triton.
Passo 1: Configurare il Repository del Modello
Crea un repository del modello per Triton, che conterrà i file del modello TensorRT-LLM. Ad esempio, se hai compilato un modello GPT2, la struttura della directory potrebbe essere così:
mkdir -p model_repository/gpt2/1 cp ./trt_engine/gpt2_fp16.engine model_repository/gpt2/1/
Passo 2: Creare il File di Configurazione di Triton
Nella stessa directory model_repository/gpt2/, crea un file di configurazione denominato config.pbtxt che indichi a Triton come caricare ed eseguire il modello. Ecco una configurazione di base per TensorRT-LLM:
name: "gpt2"
platform: "tensorrt_llm"
max_batch_size: 8
<p>input [
{
name: "input_ids"
data_type: TYPE_INT32
dims: [-1]
}
]</p>
<p>output [
{
name: "logits"
data_type: TYPE_FP32
dims: [-1, -1]
}
]</p>
Passo 3: Avviare il Server Triton
Utilizza il seguente comando Docker per avviare Triton con il repository del modello:
docker run --rm --gpus all \ -v $(pwd)/model_repository:/models \ nvcr.io/nvidia/tritonserver:23.05-py3 \ tritonserver --model-repository=/models
Passo 4: Inviare Richieste di Inferenza a Triton
Una volta che il server Triton è in esecuzione, puoi inviargli richieste di inferenza utilizzando HTTP o gRPC. Ad esempio, utilizzando curl per inviare una richiesta:
curl -X POST http://localhost:8000/v2/models/gpt2/infer -d '{
"inputs": [
{"name": "input_ids", "shape": [1, 128], "datatype": "INT32", "data": [[101, 234, 1243]]}
]
}'
Triton elaborerà la richiesta utilizzando il motore TensorRT-LLM e restituirà i logiti come output.
Migliori Pratiche per Ottimizzare l’Inferenza LLM con TensorRT-LLM
Per sfruttare appieno il potenziale di TensorRT-LLM, è fondamentale seguire le migliori pratiche durante sia l’ottimizzazione del modello che la distribuzione. Ecco alcuni consigli chiave:
1. Profilare il Modello Prima dell’Ottimizzazione
Prima di applicare ottimizzazioni come la quantizzazione o la fusione del kernel, utilizza gli strumenti di profilatura di NVIDIA (come Nsight Systems o TensorRT Profiler) per comprendere i colli di bottiglia attuali nell’esecuzione del modello. Ciò ti consente di mirare aree specifiche per il miglioramento, portando a ottimizzazioni più efficaci.
2. Utilizzare la Precisione Mista per Prestazioni Ottimali
Quando si ottimizzano modelli con TensorRT-LLM, l’utilizzo della precisione mista (una combinazione di FP16 e FP32) offre un aumento significativo della velocità senza una perdita sostanziale di accuratezza. Per il miglior equilibrio tra velocità e accuratezza, considera l’utilizzo di FP8 quando disponibile, specialmente sulle GPU H100.
3. Sfruttare l’Attenzione Paginata per Sequenze Lunghe
Per compiti che coinvolgono lunghe sequenze di input, come la sintesi di documenti o le conversazioni multi-turn, abilita sempre l’Attenzione Paginata per ottimizzare l’utilizzo della memoria. Ciò riduce l’onere della memoria e previene errori di memoria insufficiente durante l’inferenza.
4. Regolare la Parallelizzazione per Configurazioni Multi-GPU
Quando si distribuiscono LLM su più GPU o nodi, è essenziale regolare le impostazioni per la parallelizzazione del tensore e la parallelizzazione della pipeline per adattarle al proprio carico di lavoro specifico. La configurazione appropriata di questi modi può portare a miglioramenti significativi delle prestazioni distribuendo uniformemente il carico computazionale tra le GPU.
Conclusione
TensorRT-LLM rappresenta un cambiamento di paradigma nell’ottimizzazione e nella distribuzione dei modelli linguistici di grande scala. Con le sue funzionalità avanzate come la quantizzazione, la fusione delle operazioni, la precisione FP8 e il supporto multi-GPU, TensorRT-LLM consente agli LLM di eseguirsi più velocemente ed efficientemente sulle GPU NVIDIA. Che tu stia lavorando su applicazioni di chat in tempo reale, sistemi di raccomandazione o modelli linguistici di grande scala, TensorRT-LLM fornisce gli strumenti necessari per spingere i limiti delle prestazioni.
Questa guida ti ha guidato attraverso la configurazione di TensorRT-LLM, l’ottimizzazione dei modelli con la sua API Python, la distribuzione su Triton Inference Server e l’applicazione delle migliori pratiche per un’inferenza efficiente. Con TensorRT-LLM, puoi accelerare i tuoi carichi di lavoro di intelligenza artificiale, ridurre la latenza e fornire soluzioni LLM scalabili agli ambienti di produzione.
Per ulteriori informazioni, consulta la documentazione ufficiale di TensorRT-LLM e la documentazione del server di inferenza Triton.












