Esportazione TensorRT per i modelli YOLO26#
La distribuzione di modelli di visione artificiale in ambienti ad alte prestazioni può richiedere un formato che massimizzi velocità ed efficienza. Questo è particolarmente vero quando distribuisci il modello su GPU NVIDIA.
Usando il formato di esportazione TensorRT, puoi ottimizzare i tuoi modelli Ultralytics YOLO26 per un'inferenza rapida ed efficiente sull'hardware NVIDIA. Questa guida ti fornirà passaggi semplici da seguire per il processo di conversione e ti aiuterà a sfruttare al meglio la tecnologia avanzata di NVIDIA nei tuoi progetti di deep learning.
TensorRT#
TensorRT, sviluppato da NVIDIA, è un kit di sviluppo software (SDK) avanzato progettato per l'inferenza di deep learning ad alta velocità. È adatto alle applicazioni in tempo reale, come il rilevamento degli oggetti.
Questo toolkit ottimizza i modelli di deep learning per le GPU NVIDIA, consentendo operazioni più rapide ed efficienti. I modelli TensorRT vengono ottimizzati con TensorRT tramite tecniche come la fusione dei livelli, la calibrazione della precisione (INT8 e FP16), la gestione dinamica della memoria dei tensori e l'ottimizzazione automatica dei kernel. La conversione dei modelli di deep learning nel formato TensorRT permette agli sviluppatori di sfruttare appieno il potenziale delle GPU NVIDIA.
TensorRT è noto per la compatibilità con diversi formati di modello, tra cui TensorFlow, PyTorch e ONNX, offrendo agli sviluppatori una soluzione flessibile per integrare e ottimizzare modelli provenienti da framework diversi. Questa versatilità consente una distribuzione dei modelli efficiente in ambienti hardware e software diversi.
TensorRT profila e ottimizza un motore sulla GPU usata per compilarlo. Compila il motore per l'architettura della GPU di destinazione e usa una versione compatibile del runtime TensorRT/CUDA; non considerare un file .engine un formato di modello portabile. Per la distribuzione edge, Ultralytics Platform offre otto selezioni di destinazione Jetson, con lo stato della compilazione e della convalida su hardware fisico documentato per ciascuna, oppure puoi esportare il modello localmente sul dispositivo di destinazione.
Caratteristiche principali dei modelli TensorRT#
I modelli TensorRT offrono diverse funzionalità chiave che contribuiscono alla loro efficienza ed efficacia nell'inferenza di deep learning ad alta velocità:
-
Calibrazione della precisione: TensorRT supporta la calibrazione della precisione, che consente di ottimizzare i modelli in base a requisiti specifici di accuratezza. Include il supporto per formati a precisione ridotta come INT8 e FP16, che possono aumentare ulteriormente la velocità di inferenza mantenendo livelli di accuratezza accettabili.
-
Fusione dei livelli: il processo di ottimizzazione di TensorRT include la fusione dei livelli, in cui più livelli di una rete neurale vengono combinati in un'unica operazione. Questo riduce il carico computazionale e migliora la velocità di inferenza minimizzando gli accessi alla memoria e i calcoli.
-
Gestione dinamica della memoria dei tensori: TensorRT gestisce in modo efficiente l'uso della memoria dei tensori durante l'inferenza, riducendo il carico sulla memoria e ottimizzandone l'allocazione. Questo si traduce in un uso più efficiente della memoria GPU.
-
Ottimizzazione automatica dei kernel: TensorRT ottimizza automaticamente i kernel per selezionare il kernel GPU più efficiente per ogni livello del modello. Questo approccio adattivo garantisce che il modello sfrutti appieno la potenza di calcolo della GPU.
Opzioni di distribuzione in TensorRT#
Prima di esaminare il codice per esportare i modelli YOLO26 nel formato TensorRT, vediamo dove vengono normalmente usati i modelli TensorRT.
TensorRT offre diverse opzioni di distribuzione, ognuna delle quali bilancia in modo diverso la facilità di integrazione, l'ottimizzazione delle prestazioni e la flessibilità:
- Distribuzione all'interno di TensorFlow: questo metodo integra TensorRT in TensorFlow, consentendo l'esecuzione dei modelli ottimizzati in un ambiente TensorFlow familiare. È utile per i modelli che combinano livelli supportati e non supportati, perché TF-TRT è in grado di gestirli in modo efficiente.
-
API runtime TensorRT standalone: offre un controllo granulare, ideale per le applicazioni in cui le prestazioni sono fondamentali. È più complessa, ma permette di implementare operatori non supportati in modo personalizzato.
-
NVIDIA Triton Inference Server: un'opzione che supporta modelli di diversi framework. Particolarmente adatta all'inferenza nel cloud o edge, offre funzionalità come l'esecuzione simultanea di modelli e l'analisi dei modelli.
Attività supportate#
L'esportazione TensorRT supporta tutti e sette i task di Ultralytics. La segmentazione semantica e la stima della profondità sono disponibili solo con YOLO26, l'unica famiglia che include queste head.
| Attività | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Rilevamento | ✅ | ✅ | ✅ |
| Segmentazione | ✅ | ✅ | ✅ |
| Semantica | ❌ | ❌ | ✅ |
| Profondità | ❌ | ❌ | ✅ |
| Classificazione | ✅ | ✅ | ✅ |
| Stima della posa | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Esportazione dei modelli YOLO26 in TensorRT#
Puoi migliorare l'efficienza di esecuzione e ottimizzare le prestazioni convertendo i modelli YOLO26 nel formato TensorRT.
Installazione#
Per installare il pacchetto richiesto, esegui:
# Install the required package for YOLO26
pip install ultralyticsPer istruzioni dettagliate e buone pratiche relative al processo di installazione, consulta la nostra guida all'installazione di YOLO26. Se durante l'installazione dei pacchetti necessari per YOLO26 riscontri difficoltà, consulta la nostra guida ai problemi comuni per trovare soluzioni e suggerimenti.
Utilizzo#
Prima di approfondire le istruzioni per l'uso, dai un'occhiata alla gamma di modelli YOLO26 offerti da Ultralytics. Ti aiuterà a scegliere il modello più adatto ai requisiti del tuo progetto.
Il formato TensorRT supporta le modalità Esporta, Predici e Convalida. L'inferenza e la convalida richiedono una GPU NVIDIA. Esporta il modello, quindi carica il modello esportato per eseguire l'inferenza o convalidarne l'accuratezza.
from ultralytics import YOLO
# Carica un modello YOLO26
model = YOLO("yolo26n.pt")
# Esporta il modello in formato TensorRT
model.export(format="engine") # crea 'yolo26n.engine'from ultralytics import YOLO
# Carica il modello TensorRT esportato
model = YOLO("yolo26n.engine")
# Esegui l'inferenza
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Carica il modello TensorRT esportato
model = YOLO("yolo26n.engine")
# # Convalida l'accuratezza sul dataset COCO8
metrics = model.val(data="coco8.yaml")Argomenti di esportazione#
| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
format | str | 'engine' | Formato di destinazione del modello esportato, che definisce la compatibilità con i vari ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione dell'immagine desiderata per l'input del modello. Può essere un intero per immagini quadrate o una tupla (height, width) per dimensioni specifiche. |
quantize | int o str | None | Precisione di quantizzazione: 16 (FP16) o 8 (INT8/PTQ; richiede la calibrazione data/fraction); 32/non impostato corrisponde a FP32. Un checkpoint addestrato con quantize=8 viene sempre esportato in INT8 usando gli intervalli che contiene, senza calibrazione. Sostituisce i flag deprecati half/int8. |
dynamic | bool | False | Consente dimensioni di input dinamiche, aumentando la flessibilità nella gestione di immagini con dimensioni diverse. |
simplify | bool | True | Semplifica il grafo del modello con onnxslim, migliorando potenzialmente prestazioni e compatibilità. |
opset | int | None | Specifica la versione opset ONNX per il grafo ONNX intermedio. Se non è impostata, viene usata l'ultima versione supportata. |
workspace | float o None | None | Imposta la dimensione massima dello spazio di lavoro in GiB per le ottimizzazioni TensorRT, bilanciando l'uso della memoria e le prestazioni; usa None per consentire a TensorRT di allocare automaticamente fino alla memoria massima disponibile sul dispositivo. |
nms | bool, facoltativo | None | Seleziona l'output grezzo (None, predefinito), NMS integrato (True) oppure la testa senza NMS (False). |
batch | int | 1 | Specifica la dimensione batch per l'inferenza del modello esportato o il numero massimo di immagini che il modello esportato elaborerà contemporaneamente in modalità predict. |
data | str | None | Percorso del file YAML del dataset, necessario per la quantizzazione; per la classificazione, invece, accetta una directory del dataset o il nome di un dataset integrato. Se omesso con quantize=8, Ultralytics seleziona il dataset di calibrazione predefinito per il task del modello; per un checkpoint addestrato con quantize=8 non è necessario. |
fraction | float, int o list | 1.0 | Sottoinsieme di calibrazione espresso come rapporto, numero di immagini o rapporti/conteggi [train, val, test]. Gli elenchi di due elementi lasciano completo test, mentre 0 lo esclude. |
device | str | None | Specifica il dispositivo per l'esportazione: GPU (device=0), DLA per NVIDIA Jetson (device=dla:0 o device=dla:1). |
Assicurati di usare una GPU con supporto CUDA per esportare in TensorRT.
TensorRT 11.2.1 non supporta JetPack, incluso Thor; usa il runtime TensorRT 10.x supportato dalla tua versione di JetPack. Per device=dla:0 o device=dla:1, NVIDIA indica TensorRT 10.7 come l'ultima versione con supporto DLA. TensorRT 11.0, 11.1 e 11.2 non supportano DLA.
Per ulteriori dettagli sul processo di esportazione, visita la pagina della documentazione Ultralytics dedicata all'esportazione.
Esportazione TensorRT con quantizzazione INT8#
L'esportazione dei modelli Ultralytics YOLO con TensorRT e precisione INT8 esegue la quantizzazione post-addestramento (PTQ). Per la PTQ, TensorRT usa la calibrazione, che misura la distribuzione delle attivazioni all'interno di ciascun tensore di attivazione mentre il modello YOLO elabora l'inferenza su dati di input rappresentativi, quindi usa tale distribuzione per stimare i valori di scala di ogni tensore. Ogni tensore di attivazione candidato alla quantizzazione ha una scala associata, determinata tramite un processo di calibrazione. Un checkpoint ottimizzato con quantize=8 tramite addestramento consapevole della quantizzazione contiene già i propri intervalli INT8, quindi l'esportazione li usa e salta la calibrazione.
TensorRT 11 ha rimosso la quantizzazione implicita e l'interfaccia IInt8Calibrator. Con TensorRT 11 e versioni successive, Ultralytics esegue la quantizzazione INT8 tramite la quantizzazione esplicita di NVIDIA ModelOpt, che inserisce nodi Q/DQ nel grafo ONNX prima di compilare un motore a tipizzazione forte; FP16 viene applicato tramite la conversione a precisione mista AutoCast di ModelOpt. Gli argomenti quantize=8, quantize=16 e data funzionano allo stesso modo; ModelOpt viene installato automaticamente al primo utilizzo. Con TensorRT 7-10 viene invece usato il calibratore legacy descritto di seguito.
Quando elabora reti quantizzate in modo implicito, TensorRT usa INT8 in modo opportunistico per ottimizzare il tempo di esecuzione dei livelli. Se un livello viene eseguito più rapidamente in INT8 e ha scale di quantizzazione assegnate agli input e agli output dei suoi dati, a quel livello viene assegnato un kernel con precisione INT8; altrimenti TensorRT seleziona per il kernel una precisione FP32 o FP16, in base a quella che consente un'esecuzione più rapida del livello.
È fondamentale usare per l'esportazione con precisione INT8 lo stesso dispositivo che utilizzerà i pesi del modello TensorRT durante la distribuzione, poiché i risultati della calibrazione possono variare da un dispositivo all'altro.
Configurazione dell'esportazione INT8#
Gli argomenti forniti durante l'esportazione di un modello Ultralytics YOLO influiranno notevolmente sulle prestazioni del modello esportato. Dovrai anche sceglierli in base alle risorse disponibili sul dispositivo; tuttavia, gli argomenti predefiniti dovrebbero funzionare con la maggior parte delle GPU discrete NVIDIA Ampere (o successive). Per le esportazioni su GPU viene usato l'algoritmo di calibrazione "MINMAX_CALIBRATION", mentre le esportazioni DLA su NVIDIA Jetson usano "ENTROPY_CALIBRATION_2". Puoi trovare maggiori dettagli sulle opzioni disponibili nella guida per sviluppatori di TensorRT. I test di Ultralytics hanno individuato in "MINMAX_CALIBRATION" la scelta migliore per le esportazioni su GPU; l'algoritmo viene selezionato automaticamente in base al dispositivo di esportazione.
-
workspace: controlla la dimensione (in GiB) dell'allocazione di memoria del dispositivo durante la conversione dei pesi del modello.-
Regola il valore di
workspacein base alle tue esigenze di calibrazione e alle risorse disponibili. Sebbene un valore maggiore diworkspacepossa aumentare il tempo di calibrazione, consente a TensorRT di esplorare una gamma più ampia di strategie di ottimizzazione, migliorando potenzialmente le prestazioni e l'accuratezza del modello. Al contrario, un valore minore diworkspacepuò ridurre il tempo di calibrazione, ma limitare le strategie di ottimizzazione e influire sulla qualità del modello quantizzato. -
Il valore predefinito è
workspace=None, che consente a TensorRT di allocare automaticamente la memoria; se la configurazione è manuale, potrebbe essere necessario aumentare questo valore se la calibrazione si interrompe (termina senza preavviso). -
Durante l'esportazione, TensorRT segnalerà
UNSUPPORTED_STATEse il valore diworkspacesupera la memoria disponibile sul dispositivo; in tal caso, il valore diworkspacedeve essere ridotto o impostato suNone. -
Se
workspaceè impostato sul valore massimo e la calibrazione non riesce o si interrompe, prova a usareNoneper l'allocazione automatica oppure riduci i valori diimgszebatchper diminuire i requisiti di memoria. -
Ricorda che la calibrazione INT8 è specifica per ogni dispositivo; prendere in prestito una GPU di fascia alta per la calibrazione può causare prestazioni scarse quando l'inferenza viene eseguita su un altro dispositivo.
-
-
batch: la dimensione massima del batch che verrà usata per l'inferenza. Condynamic=Trueè possibile usare batch più piccoli durante l'inferenza, ma non verranno accettati batch più grandi di quello specificato.
L'uso di batch piccoli può causare una scalatura imprecisa durante la calibrazione INT8, perché il processo si adatta ai dati osservati. I batch piccoli potrebbero non includere l'intero intervallo di valori, causando problemi nella calibrazione finale. Un batch size maggiore contribuisce a ottenere risultati di calibrazione più rappresentativi.
Dai loro esperimenti, NVIDIA ha concluso che per la calibrazione con quantizzazione INT8 è consigliabile usare almeno 500 immagini rappresentative dei dati del modello. Si tratta di un'indicazione, non di un requisito rigido, e dovrai sperimentare per stabilire cosa serve per ottenere buone prestazioni sul tuo dataset. Poiché i dati di calibrazione sono necessari per la calibrazione INT8 con TensorRT, assicurati di usare l'argomento data quando esporti per TensorRT a quantize=8 un checkpoint non addestrato con quantize=8 (quantizzazione post-addestramento); usa data="my_dataset.yaml", che userà le immagini della convalida per la calibrazione. Un checkpoint addestrato con quantize=8 salta la calibrazione, quindi in questo caso ometti data. Se durante l'esportazione in TensorRT con quantizzazione INT8 non viene passato alcun valore per data, verrà usato per impostazione predefinita uno dei dataset di esempio «small» basati sul task del modello, invece di generare un errore.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(
format="engine",
dynamic=True, # (1)!
batch=8, # (2)!
workspace=4, # (3)!
quantize=8,
data="coco.yaml", # (4)!
)
# Carica il modello TensorRT INT8 esportato
model = YOLO("yolo26n.engine", task="detect")
# Esegui l'inferenza
result = model.predict("https://ultralytics.com/images/bus.jpg")- Esporta con assi dinamici, accettando dimensioni di input da 32 pixel fino al doppio del valore di esportazione
imgsz;dynamicrimaneFalsese non viene impostato esplicitamente. Per ulteriori informazioni, consulta gli argomenti di esportazione. - Imposta la dimensione massima del batch su 8 per il modello esportato e la calibrazione INT8.
- Alloca 4 GiB di memoria invece di allocare l'intero dispositivo per il processo di conversione.
- Usa il dataset COCO per la calibrazione, in particolare le immagini usate per la convalida (5.000 in totale).
Vantaggi dell'utilizzo di YOLO con TensorRT INT8#
-
Dimensioni del modello ridotte: La quantizzazione da FP32 a INT8 può ridurre le dimensioni del modello di 4 volte (su disco o in memoria), riducendo i tempi di download, i requisiti di archiviazione e l'ingombro in memoria durante la distribuzione di un modello.
-
Consumo energetico inferiore: Le operazioni a precisione ridotta per i modelli YOLO esportati in INT8 possono consumare meno energia rispetto ai modelli FP32, soprattutto sui dispositivi alimentati a batteria.
-
Velocità di inferenza migliorate: TensorRT ottimizza il modello per l'hardware di destinazione, accelerando potenzialmente l'inferenza su GPU, dispositivi embedded e acceleratori.
Nota sulle velocità di inferenza
È prevedibile che le prime chiamate di inferenza con un modello esportato in TensorRT INT8 abbiano tempi di pre-elaborazione, inferenza e/o post-elaborazione più lunghi del solito. Questo può verificarsi anche quando modifichi imgsz durante l'inferenza, soprattutto se imgsz non corrisponde a quanto specificato durante l'esportazione (il profilo TensorRT "optimal" è impostato su imgsz nell'esportazione).
Svantaggi dell'utilizzo di YOLO con TensorRT INT8#
-
Peggioramento delle metriche di valutazione: L'utilizzo di una precisione inferiore comporta probabilmente risultati leggermente peggiori per
mAP,Precision,Recallo qualsiasi altra metrica utilizzata per valutare le prestazioni del modello. I livelli Sigmoid mantengono una precisione più elevata per preservare la calibrazione dei punteggi, ma INT8 può comunque modificare i valori di confidenza; scegli quindi la soglia operativa dalla curva F1 del modello INT8 stesso. Consulta la sezione sui risultati delle prestazioni per confrontare le differenze inmAP50emAP50-95quando esporti con INT8 su un piccolo campione di dispositivi diversi. -
Tempi di sviluppo più lunghi: individuare le impostazioni "ottimali" per la calibrazione INT8 del dataset e del dispositivo può richiedere molti test.
-
Dipendenza dall'hardware: la calibrazione e i miglioramenti delle prestazioni possono dipendere fortemente dall'hardware, e i pesi del modello sono meno trasferibili.
Prestazioni dell'esportazione Ultralytics YOLO TensorRT#
NVIDIA A100#
Testato con Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1
Consulta la documentazione sul rilevamento per esempi d'uso di questi modelli addestrati su COCO, che includono 80 classi preaddestrate.
Tempi di inferenza indicati per mean, min (più veloce) e max (più lento) per ciascun test eseguito con i pesi preaddestrati yolov8n.engine
| Precisione | Test di valutazione | media (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | dimensione (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predici | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predici | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predici | 0.28 | 0.27 | 0.31 | 8 | 640 | ||
| INT8 | COCOval | 0.29 | 0.47 | 0.33 | 1 | 640 |
GPU consumer#
Testato con Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6
Tempi di inferenza indicati per mean, min (più veloce) e max (più lento) per ciascun test eseguito con i pesi preaddestrati yolov8n.engine
| Precisione | Test di valutazione | media (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | dimensione (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predici | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predici | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predici | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Dispositivi embedded#
Testato con JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1
Tempi di inferenza indicati per mean, min (più veloce) e max (più lento) per ciascun test eseguito con i pesi preaddestrati yolov8n.engine
| Precisione | Test di valutazione | media (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | dimensione (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predici | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predici | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predici | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Consulta la nostra guida rapida a NVIDIA Jetson con Ultralytics YOLO per saperne di più sulla configurazione e sull'installazione.
Consulta la nostra guida rapida a NVIDIA DGX Spark con Ultralytics YOLO per saperne di più sulla configurazione e sull'installazione.
Metodi di valutazione#
Espandi le sezioni qui sotto per scoprire come sono stati esportati e testati questi modelli.
Configurazioni di esportazione
Consulta la modalità di esportazione per i dettagli sugli argomenti di configurazione dell'esportazione.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)
# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=16)
# TensorRT INT8 con `data` per la calibrazione (ad es. COCO, ImageNet o DOTAv1 per l'attività del modello appropriata)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)Ciclo di predizione
Consulta la modalità di predizione per ulteriori informazioni.
import cv2
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")
for _ in range(100):
result = model.predict(
[img] * 8, # batch=8 della stessa immagine
verbose=False,
device="cuda",
)Configurazione della validazione
Consulta la modalità val per saperne di più sugli argomenti di configurazione della validazione.
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet o DOTAv1 per l'attività del modello appropriata
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)Distribuzione dei modelli YOLO26 esportati in TensorRT#
Dopo aver esportato correttamente i tuoi modelli Ultralytics YOLO26 nel formato TensorRT, puoi procedere alla distribuzione. Per istruzioni dettagliate sulla distribuzione dei modelli TensorRT in diversi contesti, consulta le seguenti risorse:
-
Distribuire Ultralytics con Triton Server: la nostra guida all'utilizzo di Triton Inference Server di NVIDIA (precedentemente TensorRT Inference Server) specificamente con i modelli Ultralytics YOLO.
-
Distribuzione di reti neurali profonde con NVIDIA TensorRT: questo articolo spiega come usare NVIDIA TensorRT per distribuire in modo efficiente reti neurali profonde su piattaforme di distribuzione basate su GPU.
-
IA end-to-end per PC basati su NVIDIA: distribuzione con NVIDIA TensorRT: questo post del blog spiega come usare NVIDIA TensorRT per ottimizzare e distribuire modelli IA su PC basati su NVIDIA.
-
Repository GitHub per NVIDIA TensorRT: il repository GitHub ufficiale che contiene il codice sorgente e la documentazione di NVIDIA TensorRT.
Riepilogo#
In questa guida ci siamo concentrati sulla conversione dei modelli Ultralytics YOLO26 nel formato di modello NVIDIA TensorRT. Questo passaggio è fondamentale per migliorare l'efficienza e la velocità dei modelli YOLO26, rendendoli più efficaci e adatti a diversi ambienti di distribuzione.
Per maggiori informazioni sull'utilizzo, consulta la documentazione ufficiale di TensorRT.
Se vuoi scoprire altre integrazioni di Ultralytics YOLO26, la nostra pagina delle guide alle integrazioni offre un'ampia selezione di risorse e approfondimenti utili.
Domande frequenti#
Per convertire i tuoi modelli Ultralytics YOLO26 nel formato TensorRT e ottimizzare l'inferenza su GPU NVIDIA, segui questi passaggi:
-
Installa il pacchetto richiesto:
pip install ultralytics -
Esporta il tuo modello YOLO26:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine") # crea 'yolo26n.engine' # Esegui l'inferenza model = YOLO("yolo26n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Per maggiori dettagli, consulta la guida all'installazione di YOLO26 e la documentazione sull'esportazione.
-
L'utilizzo di TensorRT per ottimizzare i modelli YOLO26 offre diversi vantaggi:
- Velocità di inferenza superiore: TensorRT ottimizza i livelli del modello e usa la calibrazione della precisione (INT8 e FP16) per accelerare l'inferenza senza compromettere significativamente l'accuratezza.
- Efficienza della memoria: TensorRT gestisce dinamicamente la memoria dei tensori, riducendo l'overhead e migliorando l'utilizzo della memoria GPU.
- Fusione dei livelli: combina più livelli in singole operazioni, riducendo la complessità computazionale.
- Ottimizzazione automatica dei kernel: seleziona automaticamente kernel GPU ottimizzati per ogni livello del modello, garantendo prestazioni massime.
Per saperne di più, consulta la documentazione ufficiale di TensorRT di NVIDIA e la nostra panoramica approfondita di TensorRT.
Sì, puoi esportare i modelli YOLO26 con TensorRT e quantizzazione INT8. Questo processo prevede la quantizzazione post-addestramento (PTQ) e la calibrazione, a meno che il checkpoint non sia stato addestrato con
quantize=8(addestramento consapevole della quantizzazione); in tal caso, gli intervalli contenuti nel checkpoint vengono esportati senza calibrazione:-
Esporta con INT8:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="engine", batch=8, workspace=4, quantize=8, data="coco.yaml") -
Esegui l'inferenza:
from ultralytics import YOLO model = YOLO("yolo26n.engine", task="detect") result = model.predict("https://ultralytics.com/images/bus.jpg")
Per maggiori dettagli, consulta la sezione sull'esportazione di TensorRT con quantizzazione INT8.
-
Puoi distribuire i modelli YOLO26 TensorRT su un NVIDIA Triton Inference Server utilizzando le seguenti risorse:
- Distribuire Ultralytics YOLO26 con Triton Server: istruzioni passo passo per configurare e utilizzare Triton Inference Server.
- Distribuzione di reti neurali profonde con NVIDIA TensorRT: la guida di NVIDIA alla distribuzione di modelli di deep learning con TensorRT, con opzioni e configurazioni dettagliate.
Queste guide ti aiuteranno a integrare in modo efficiente i modelli YOLO26 in diversi ambienti di distribuzione.
I miglioramenti delle prestazioni con TensorRT possono variare in base al modello e all'hardware utilizzato. Ecco alcuni benchmark tipici misurati con YOLOv8n, che illustrano i guadagni relativi offerti da ciascuna precisione:
-
NVIDIA A100:
- Inferenza FP32: ~0.52 ms / immagine
- Inferenza FP16: ~0.34 ms / immagine
- Inferenza INT8: ~0.28 ms / immagine
- Con INT8 si registra una lieve riduzione di mAP, ma un significativo aumento della velocità.
-
GPU consumer (ad es. RTX 3080):
- Inferenza FP32: ~1.06 ms / immagine
- Inferenza FP16: ~0.62 ms / immagine
- Inferenza INT8: ~0.52 ms / immagine
Puoi trovare benchmark dettagliati delle prestazioni per diverse configurazioni hardware nella sezione sulle prestazioni.
Per un'analisi più completa delle prestazioni di TensorRT, consulta la documentazione di Ultralytics e i nostri report di analisi delle prestazioni.
-