Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Licenza YOLO
Integrazioni

ONNX vs TensorRT per l'inferenza di visione artificiale: benchmark e come scegliere

ONNX Runtime vs TensorRT per l'inferenza di visione artificiale: velocità e accuratezza misurate di Ultralytics YOLO26 su 19 GPU NVIDIA e come scegliere.

Miles DeansMiles Deans12 min di lettura
Scena logistica generata dall'IA con rilevamenti a scopo illustrativo; il riquadro mostra la latenza di benchmark di Ultralytics Platform per YOLO26n su NVIDIA L4.

ONNX e TensorRT non sono davvero concorrenti. ONNX è un formato di modello, mentre TensorRT è il motore di inferenza di NVIDIA, che di solito riceve in input un file ONNX. La vera scelta riguarda come eseguire quel file: con ONNX Runtime, compatibile con hardware diversi e in grado persino di delegare il lavoro a TensorRT, oppure compilato in un motore TensorRT autonomo, che funziona solo sulle GPU NVIDIA. Nei benchmark di Ultralytics Platform di Ultralytics YOLO26 su 19 GPU NVIDIA, TensorRT FP16 è risultato più veloce dei risultati ONNX FP16 pubblicati su ogni GPU e per ogni dimensione del modello, con un'accuratezza entro 0.001 mAP50-95. Gli speedup mediani erano compresi tra 1.85x e 2.55x a seconda delle dimensioni del modello. Il benchmark non specifica quale execution provider di ONNX Runtime abbia prodotto i risultati ONNX, quindi non chiarisce come si confronti ONNX Runtime in generale, né con il proprio execution provider TensorRT. Per Ultralytics YOLO26 sulle GPU NVIDIA, inizia con TensorRT FP16 quando la latenza è importante e usa ONNX Runtime quando un unico file di modello deve funzionare su più tipi di hardware. Ultralytics YOLO esporta in entrambi i formati con un solo argomento.

Da dove iniziare con Ultralytics YOLO:

DistribuzioneInizia conEsportazione di Ultralytics YOLO
GPU NVIDIA, latenza importanteTensorRT FP16format="engine", quantize=16
CPU, hardware non NVIDIA o flotte misteONNX Runtimeformat="onnx"
API di ONNX Runtime su una GPU NVIDIAONNX Runtime con l'execution provider TensorRTformat="onnx"

ONNX vs TensorRT: formato, runtime e motore#

Il confronto nasconde tre elementi diversi:

  • ONNX (scambio aperto di reti neurali) è un formato di file che archivia il grafo e i pesi di un modello addestrato in modo indipendente dal framework. Esporta da PyTorch a ONNX affinché altri strumenti possano leggere il modello.
  • ONNX Runtime esegue modelli ONNX. Delega il lavoro ai back-end hardware chiamati execution provider, come CPU, CUDA e TensorRT, così lo stesso file può funzionare su una CPU di laptop o su una GPU cloud.
  • TensorRT legge un modello, in genere un file ONNX, tramite il parser ONNX. Fonde i layer, seleziona il kernel più veloce per ogni operazione sulla GPU di destinazione e scrive un motore ottimizzato.

Quindi il vero confronto è ONNX Runtime vs TensorRT. ONNX Runtime può anche richiamare TensorRT tramite il proprio execution provider TensorRT, consentendoti di mantenere l'API di ONNX Runtime mentre TensorRT esegue i sottografi supportati. ONNX Runtime consiglia di registrare l'execution provider CUDA dopo quello TensorRT, in modo che i nodi non supportati da TensorRT possano essere eseguiti su CUDA.

Diagramma che mostra come un modello Ultralytics YOLO viene esportato in ONNX e poi eseguito da ONNX Runtime o compilato da TensorRT

Un solo file ONNX, due percorsi: ONNX Runtime lo esegue sull'hardware supportato, mentre TensorRT lo compila in un motore per un tipo specifico di GPU NVIDIA. Ultralytics YOLO esporta in entrambi i formati.

Benchmark: YOLO26 con ONNX Runtime vs TensorRT#

I numeri riportati di seguito provengono dai benchmark di inferenza di Ultralytics Platform. Ogni modello di rilevamento Ultralytics YOLO26 è stato esportato nel formato indicato, quindi la sua latenza di inferenza è stata misurata sulle GPU di Ultralytics Platform con batch 1 e 640 pixel su COCO val2017, escludendo il riscaldamento e applicando il sigma clipping ai tempi delle singole esecuzioni. L'accuratezza è mAP50-95 su COCO val2017, misurata una volta per formato e precisione. Il confronto usa le 19 GPU NVIDIA (Ampere, Ada e Hopper) per cui sono disponibili risultati in tutti e quattro i formati.

La pagina dei benchmark non indica quale execution provider di ONNX Runtime abbia prodotto i risultati ONNX e non segnala risultati ottenuti con l'execution provider TensorRT di ONNX Runtime, che delega a TensorRT le parti del modello supportate. Questi risultati ONNX descrivono la configurazione sottoposta a benchmark; le prestazioni possono variare in base all'execution provider di ONNX Runtime. Se vuoi usare l'API di ONNX Runtime con TensorRT come motore sottostante, esegui il benchmark di questa combinazione sul tuo hardware.

Benchmark di Ultralytics che mostrano la latenza di YOLO26n TensorRT FP16 per GPU NVIDIA

La scheda Inference ti consente di cambiare dimensione del modello, formato e precisione, quindi ordinare tutte le GPU per latenza, accuratezza o costo.

Grafico a barre dello speedup mediano di TensorRT FP16 rispetto a ONNX FP16 per ogni dimensione del modello YOLO26

TensorRT FP16 è risultato più veloce dei risultati ONNX FP16 pubblicati su ogni GPU e per ogni dimensione del modello; la pagina non specifica quale execution provider di ONNX Runtime li abbia prodotti. Le barre mostrano lo speedup mediano su 19 GPU; i baffi indicano lo speedup minimo e massimo su una singola GPU. Calcolato dai benchmark di inferenza di Ultralytics Platform.

ModellomAP50-95: ONNX FP16mAP50-95: TensorRT FP16mAP50-95: TensorRT INT8Speedup di TensorRT FP16 rispetto a ONNX FP16 (mediana, intervallo)Speedup di TensorRT INT8 rispetto a TensorRT FP16 (mediana, intervallo)
YOLO26n0.3970.3970.3572.55x (1.79–3.28x)0.90x (0.79–1.07x)
YOLO26s0.4710.4710.4362.19x (1.83–2.93x)1.04x (0.89–1.19x)
YOLO26m0.5190.5190.4701.85x (1.52–2.54x)1.20x (0.90–1.38x)
YOLO26l0.5360.5350.5012.03x (1.67–2.73x)1.08x (0.92–1.33x)
YOLO26x0.5630.5640.4881.88x (1.67–2.11x)1.19x (0.92–1.67x)

Calcolato dai benchmark di inferenza di Ultralytics Platform. Lo speedup è la latenza di ONNX FP16 ÷ la latenza di TensorRT FP16, oppure la latenza di TensorRT FP16 ÷ la latenza di TensorRT INT8, sulla stessa GPU: i valori superiori a 1x indicano quindi che TensorRT FP16 (o INT8) è più veloce. Le mediane si basano sulle 19 GPU NVIDIA con risultati in tutti e quattro i formati; gli intervalli indicano i rapporti minimo e massimo tra queste GPU. L'accuratezza è il valore mAP50-95 riportato per ciascun formato e precisione. ONNX FP16 indica i risultati ONNX Runtime pubblicati, il cui execution provider non è specificato.

Latenza su quattro GPU comuni, in millisecondi per immagine, come pubblicato nella pagina dei benchmark:

GPUModelloPyTorch FP16ONNX FP16TensorRT FP16TensorRT INT8
L4YOLO26n4.982.041.031.09
L4YOLO26x7.769.805.733.43
RTX 4090YOLO26n6.672.560.841.00
RTX 4090YOLO26x10.945.202.682.25
A100 SXMYOLO26n8.723.981.651.79
A100 SXMYOLO26x15.027.253.863.91
H100 SXMYOLO26n6.363.091.171.48
H100 SXMYOLO26x10.265.532.662.62

Emergono tre aspetti:

  1. TensorRT FP16 ha superato i risultati ONNX FP16 pubblicati su ogni GPU e per ogni dimensione del modello, con un'accuratezza entro 0.001 mAP50-95. Se distribuisci su queste GPU NVIDIA e hai bisogno di una latenza bassa, inizia con TensorRT FP16.
  2. INT8 non è automaticamente la scelta migliore. Su YOLO26n è risultato più lento di TensorRT FP16 su 17 delle 19 GPU e ha comportato una perdita di 0.04 mAP50-95. Sui modelli più grandi è stato utile più spesso, fino a 1.67x su YOLO26x con L4, ma ha comportato una perdita da 0.034 a 0.076 mAP50-95.
  3. Non ci sono risultati ONNX per le sette GPU Blackwell. La pagina dei benchmark attribuisce questa mancanza all'assenza di kernel Blackwell di ONNX Runtime nell'ambiente di test. TensorRT è stato eseguito su tutte e sette.

Questi risultati riguardano la configurazione descritta nella pagina dei benchmark, con batch 1 a 640 pixel: prima di scegliere, esegui un benchmark del tuo modello sul dispositivo di destinazione e con i tuoi dati.

FP16 vs INT8 con TensorRT#

La precisione inferiore è l'altra leva importante e il benchmark mostra perché è necessario fare dei test:

  • FP16 (precisione dimezzata) dimezza le dimensioni dei pesi e delle attivazioni rispetto a FP32. Nei benchmark di Ultralytics Platform, TensorRT FP16 ha raggiunto un'accuratezza entro 0.003 mAP50-95 rispetto a ONNX FP16 e PyTorch FP16.
  • INT8 memorizza pesi e attivazioni come interi a 8 bit, una forma di quantizzazione del modello. Richiede la calibrazione: si esegue il modello su un insieme rappresentativo di immagini per misurare gli intervalli delle attivazioni. Il benchmark di Ultralytics Platform ha usato NVIDIA ModelOpt con COCO128 come dati di calibrazione.

Come indicato nella metodologia del benchmark, INT8 è più vantaggioso sui modelli più grandi e limitati dalla capacità di calcolo. Sui modelli più piccoli, il lavoro aggiuntivo di quantizzazione può pareggiare le prestazioni di FP16 o persino rallentarle. Calibra il modello con immagini del tuo dominio, quindi convalida l'accuratezza sui tuoi dati prima di distribuire un motore INT8.

Due grafici a barre che confrontano TensorRT INT8 con FP16 per ogni dimensione del modello YOLO26: speedup a sinistra, perdita di mAP50-95 a destra

Come valore mediano, INT8 è risultato più lento di FP16 su YOLO26n e fino a circa 1.2x più veloce sui modelli più grandi sulle 19 GPU, con una perdita da 0.034 a 0.076 mAP50-95 per ogni dimensione. Calcolato dai benchmark di inferenza di Ultralytics Platform.

Portabilità del motore e dimensioni di input dinamiche#

Per impostazione predefinita, un motore TensorRT è vincolato alla GPU su cui viene compilato e alla versione di TensorRT usata per compilarlo: quindi, un motore compilato su RTX 4090 non è destinato a essere copiato su H100 o Jetson. TensorRT offre opzioni di compatibilità hardware e tra versioni che attenuano questo vincolo, ma la scelta più sicura è compilare sul dispositivo di destinazione, o per quel dispositivo, e ricompilare dopo un aggiornamento di TensorRT. Per questo, nella scheda Export di Ultralytics Platform devi scegliere un tipo di GPU per le esportazioni TensorRT. Un file ONNX non ha questo vincolo: lo stesso file funziona ovunque siano disponibili ONNX Runtime e un execution provider adeguato.

Entrambi i formati supportano dimensioni di input variabili. Per TensorRT, le forme dinamiche richiedono un profilo di ottimizzazione che definisca le dimensioni minime, ottimali e massime dell'input, e gli input al momento dell'esecuzione devono rientrare in questo intervallo. Quando esporti modelli Ultralytics YOLO, dynamic=True abilita le forme di input dinamiche per ONNX e TensorRT. Le forme fisse offrono a TensorRT più margine di ottimizzazione, come spiega la guida di NVIDIA alle forme dinamiche: usa quindi forme dinamiche quando gli input variano davvero e confronta le prestazioni di entrambe le opzioni.

Quando scegliere ONNX Runtime e quando TensorRT#

  • GPU NVIDIA nel cloud o on-premise, latenza importante: TensorRT, iniziando da FP16. Prova INT8 sui modelli più grandi dopo averlo calibrato e convalidato.
  • NVIDIA Jetson all'edge: TensorRT. Consulta la guida NVIDIA Jetson.
  • CPU, hardware non NVIDIA o flotte miste: ONNX con ONNX Runtime, usando l'execution provider supportato da ciascuna macchina.
  • Non conosci ancora l'hardware di distribuzione: esporta prima in ONNX. In seguito puoi creare un motore TensorRT dallo stesso modello.
  • CPU, GPU o NPU Intel: valuta OpenVINO, il toolkit di inferenza di Intel.

Per l'elenco completo dei formati e un confronto, consulta la guida alle opzioni di distribuzione dei modelli. La precisione non è l'unica leva: contano anche le dimensioni del modello e la risoluzione di input; la nostra guida al pruning e alla quantizzazione illustra altri due modi per ridurre le dimensioni di un modello.

Esportazione di Ultralytics YOLO in ONNX e TensorRT#

Ultralytics YOLO esporta in entrambi i formati con un solo argomento format; puoi eseguire direttamente la predizione o la validazione sul modello esportato:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

model.export(format="onnx", quantize=16)  # ONNX FP16, per ONNX Runtime
model.export(format="engine", quantize=16)  # Motore TensorRT FP16, compilato su questa GPU
# Per usare INT8, calibra invece il modello con un file YAML del dataset (coco8.yaml è un piccolo set dimostrativo; usa il tuo):
# model.export(format="engine", quantize=8, data="coco8.yaml")

trt_model = YOLO("yolo26n.engine")
results = trt_model("https://ultralytics.com/images/bus.jpg")

quantize=16 seleziona FP16 e quantize=8 seleziona INT8. Entrambe le esportazioni del motore generano yolo26n.engine, quindi esegui l'una o l'altra. Per INT8, imposta data sul file YAML del tuo dataset, così la calibrazione usa immagini simili a quelle su cui distribuirai il modello. Consulta gli argomenti di esportazione e le guide di integrazione ONNX e TensorRT per tutte le opzioni, oppure segui i nostri post passo passo sull'esportazione in ONNX e sull'ottimizzazione con TensorRT. Puoi anche esportare i modelli addestrati dal browser su Ultralytics Platform.

Domande frequenti

  • ONNX è un formato di modello, non un motore, quindi il confronto corretto è ONNX Runtime vs TensorRT. Nei benchmark di Ultralytics Platform di Ultralytics YOLO26 su 19 GPU NVIDIA, TensorRT FP16 è risultato più veloce dei risultati ONNX FP16 pubblicati con ONNX Runtime su ogni GPU, con speedup mediani calcolati tra 1.85x e 2.55x a seconda delle dimensioni del modello e differenze di mAP50-95 non superiori a 0.001. Il benchmark non specifica quale execution provider di ONNX Runtime abbia prodotto i risultati ONNX, e nessuno di essi è indicato come risultato ottenuto con il suo execution provider TensorRT; prova quindi tu stesso questa combinazione se ti serve l'API di ONNX Runtime.

  • Sì. ONNX è il consueto input di TensorRT: il parser ONNX legge il modello e ne crea un motore. ONNX Runtime può anche richiamare TensorRT tramite il proprio execution provider TensorRT.

  • No. Nei benchmark di Ultralytics Platform, TensorRT INT8 è risultato più lento di TensorRT FP16 per YOLO26n su 17 delle 19 GPU. Sui modelli più grandi è risultato più veloce più spesso, con una mediana di circa 1.2x su YOLO26m e YOLO26x tra le 19 GPU su cui sono stati eseguiti tutti i formati. Ogni volta ha comportato una perdita da 0.034 a 0.076 mAP50-95, quindi convalida prima il modello INT8 sui tuoi dati.

  • Non farci affidamento. Per impostazione predefinita, un motore TensorRT è vincolato alla GPU e alla versione di TensorRT con cui è stato compilato: compilalo quindi sul dispositivo di destinazione, o per quel dispositivo. Conserva il file ONNX come copia portatile e ricompila il motore per ogni dispositivo di destinazione.

  • Di solito si sceglie TensorRT: NVIDIA JetPack include TensorRT e compilare il motore direttamente su Jetson lo ottimizza per quel dispositivo. I benchmark qui sopra non includono Jetson, quindi misura le prestazioni sul tuo modulo prima di decidere. La guida NVIDIA Jetson illustra la configurazione e l'esportazione per Ultralytics YOLO.

Scritto da

Miles Deans
Miles Deans

Responsabile SEO · Ultralytics

Miles Deans è responsabile SEO di Ultralytics e lavora a Londra, dove guida la strategia di ricerca e la crescita organica dell'azienda. In precedenza ha ricoperto ruoli presso Adobe, Kaizen e Virgin Media O2.

Commenti

Fai una domanda, condividi i tuoi risultati o aiuta qualcun altro.

Esplora le soluzioni

La visione artificiale nello sport

La visione artificiale nello sport

Scopri come Ultralytics YOLO alimenta la computer vision nello sport con il tracciamento di giocatori e palloni, l'analisi delle prestazioni, gli approfondimenti per gli allenatori e la riabilitazione degli atleti.
Scopri di più
Computer vision per immagini aeree

Computer vision per immagini aeree

Trasforma immagini aeree e riprese da drone in informazioni utili in tempo reale per agricoltura, acquacoltura, conservazione e analisi geospaziale con Ultralytics YOLO.
Scopri di più
Computer vision nel settore aerospaziale

Computer vision nel settore aerospaziale

Applica la visione artificiale nel settore aerospaziale con Ultralytics YOLO per l'ispezione degli aeromobili, il rilevamento di FOD sulle piste, le operazioni di terra aeroportuali e il rilevamento di difetti nei materiali compositi.
Scopri di più
Visione artificiale nella sicurezza

Visione artificiale nella sicurezza

Proteggi ogni sito con i modelli Ultralytics YOLO. L'IA visiva alimenta il monitoraggio perimetrale, il rilevamento delle minacce, il riconoscimento delle targhe e la sicurezza sul lavoro.
Scopri di più
Visione artificiale nella robotica

Visione artificiale nella robotica

Dai più potenza alle macchine intelligenti con i modelli Ultralytics YOLO. Nell'ambito della robotica, l'IA visiva alimenta la navigazione autonoma, la percezione, il tracciamento degli oggetti e il controllo in tempo reale.
Scopri di più
Visione artificiale nella logistica

Visione artificiale nella logistica

Semplifica la logistica con i modelli Ultralytics YOLO. L'IA per la visione consente l'ispezione dei pacchi, la selezione, il tracciamento dei veicoli e il monitoraggio della sicurezza nei magazzini in tempo reale.
Scopri di più
Visione artificiale nel commercio al dettaglio

Visione artificiale nel commercio al dettaglio

Ripensa il commercio al dettaglio con i modelli Ultralytics YOLO. L'IA per la visione consente di tracciare le scorte, monitorare gli scaffali, gestire le code e ottenere informazioni più approfondite sui clienti.
Scopri di più
Visione artificiale in ambito sanitario

Visione artificiale in ambito sanitario

Crea soluzioni sanitarie con i modelli Ultralytics YOLO. In ambito sanitario, l'IA per la visione consente di elaborare più rapidamente le immagini mediche, migliorare la diagnostica e monitorare i pazienti.
Scopri di più
Computer vision nella produzione

Computer vision nella produzione

Ottimizza la produzione con i modelli Ultralytics YOLO. La visione basata sull'IA migliora il controllo qualità, il rilevamento dei difetti, la conformità ai requisiti sui DPI e l'automazione delle linee di assemblaggio.
Scopri di più
Computer vision nel settore automobilistico

Computer vision nel settore automobilistico

Applica la computer vision al settore automobilistico con i modelli Ultralytics YOLO. La visione basata sull'IA migliora la sicurezza stradale, i sistemi di assistenza alla guida e l'automazione dei veicoli, per strade più intelligenti.
Scopri di più
Visione artificiale in agricoltura

Visione artificiale in agricoltura

Porta l'IA visiva nell'agricoltura intelligente con i modelli Ultralytics YOLO. Gestisci il monitoraggio delle colture, il tracciamento del bestiame e l'agricoltura di precisione per ottenere raccolti più abbondanti e intelligenti.
Scopri di più

Costruiamo insieme il futuro dell'IA!

Inizia il tuo percorso verso il futuro del machine learning