Esportazione TensorRT per modelli YOLO26#
La distribuzione di modelli di computer vision in ambienti ad alte prestazioni può richiedere un formato che massimizzi velocità ed efficienza. Questo è particolarmente vero quando distribuisci il tuo modello su GPU NVIDIA.
Utilizzando 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 avanzato di sviluppo software (SDK) progettato per l'inferenza ad alta velocità nel deep learning. È particolarmente adatto per applicazioni in tempo reale come la rilevazione degli oggetti.
Questo toolkit ottimizza i modelli di deep learning per le GPU NVIDIA, ottenendo operazioni più rapide ed efficienti. I modelli TensorRT vengono sottoposti all'ottimizzazione TensorRT, che include tecniche come la fusione dei layer, la calibrazione della precisione (INT8 e FP16), la gestione dinamica della memoria dei tensori e l'ottimizzazione automatica dei kernel. Convertire i modelli di deep learning nel formato TensorRT consente agli sviluppatori di sfruttare appieno il potenziale delle GPU NVIDIA.
TensorRT è noto per la compatibilità con vari formati di modelli, 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 efficiente dei modelli in ambienti hardware e software diversi.
TensorRT crea il profilo e ottimizza un motore sulla GPU di compilazione. Compila per l'architettura della GPU di destinazione e utilizza un runtime TensorRT/CUDA compatibile; non considerare un file .engine come un formato di modello portabile. Per la distribuzione edge, Ultralytics Platform offre otto selezioni di destinazione Jetson, con lo stato della compilazione fisica e della convalida documentato per ciascuna, oppure puoi esportare localmente sul dispositivo di destinazione.
Funzionalità principali dei modelli TensorRT#
I modelli TensorRT offrono diverse funzionalità chiave che contribuiscono alla loro efficienza ed efficacia nell'inferenza ad alta velocità nel deep learning:
-
Calibrazione della precisione: TensorRT supporta la calibrazione della precisione, consentendo di ottimizzare i modelli per requisiti specifici di accuratezza. Questo 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 layer: il processo di ottimizzazione TensorRT include la fusione dei layer, in cui più layer di una rete neurale vengono combinati in un'unica operazione. Ciò riduce il sovraccarico computazionale e migliora la velocità di inferenza minimizzando l'accesso alla memoria e i calcoli.
-
Gestione dinamica della memoria dei tensori: TensorRT gestisce in modo efficiente l'utilizzo della memoria dei tensori durante l'inferenza, riducendo il sovraccarico di memoria e ottimizzando l'allocazione della memoria. Ciò si traduce in un utilizzo più efficiente della memoria della GPU.
-
Ottimizzazione automatica dei kernel: TensorRT applica l'ottimizzazione automatica dei kernel per selezionare il kernel della GPU più ottimizzato per ogni layer 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 utilizzati i modelli TensorRT.
TensorRT offre diverse opzioni di distribuzione e ciascuna bilancia in modo diverso facilità di integrazione, ottimizzazione delle prestazioni e flessibilità:
- Distribuzione all'interno di TensorFlow: questo metodo integra TensorRT in TensorFlow, consentendo l'esecuzione di modelli ottimizzati in un ambiente TensorFlow familiare. È utile per i modelli che combinano layer supportati e non supportati, poiché TF-TRT può gestirli in modo efficiente.
-
API del runtime TensorRT standalone: offre un controllo granulare ed è ideale per le applicazioni in cui le prestazioni sono fondamentali. È più complessa, ma consente un'implementazione personalizzata degli operatori non supportati.
-
NVIDIA Triton Inference Server: un'opzione che supporta modelli provenienti da vari framework. Particolarmente adatta all'inferenza cloud o edge, offre funzionalità come l'esecuzione concorrente dei modelli e l'analisi dei modelli.
Attività supportate#
L'esportazione TensorRT supporta tutti e sette i task 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 | ✅ | ✅ | ✅ |
| 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 best practice relative al processo di installazione, consulta la nostra guida all'installazione di YOLO26. Se durante l'installazione dei pacchetti richiesti per YOLO26 riscontri difficoltà, consulta la nostra guida ai problemi comuni per trovare soluzioni e suggerimenti.
Utilizzo#
Prima di passare alle istruzioni per l'utilizzo, dai un'occhiata alla gamma di modelli YOLO26 offerti da Ultralytics. Questo ti aiuterà a scegliere il modello più adatto ai requisiti del tuo progetto.
Il formato TensorRT supporta le modalità Export, Predict e Validate. 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
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to TensorRT format
model.export(format="engine") # creates 'yolo26n.engine'from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported TensorRT model
model = YOLO("yolo26n.engine")
# Validate accuracy on the COCO8 dataset
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 diversi ambienti di distribuzione. |
imgsz | int o tuple | 640 | Dimensione desiderata dell'immagine per l'input del modello. Può essere un numero 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 di data/fraction); 32/non impostato è FP32. Un checkpoint addestrato con quantize=8 esporta sempre INT8 dagli intervalli che trasporta, 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 variabili. |
simplify | bool | True | Semplifica il grafo del modello con onnxslim, migliorando potenzialmente prestazioni e compatibilità. |
opset | int | None | Specifica la versione dell'opset ONNX per il grafo ONNX intermedio. Se non impostata, viene utilizzata la versione supportata più recente. |
workspace | float o None | None | Imposta la dimensione massima dell'area di lavoro in GiB per le ottimizzazioni TensorRT, bilanciando l'utilizzo della memoria e le prestazioni; usa None per l'allocazione automatica da parte di TensorRT fino al massimo del dispositivo. |
nms | bool, facoltativo | None | Seleziona l'output grezzo (None, predefinito), l'NMS integrato (True) o la testa senza NMS (False). |
batch | int | 1 | Specifica la dimensione del batch di inferenza del modello esportato o il numero massimo di immagini che il modello esportato elaborerà simultaneamente in modalità predict. |
data | str | None | Percorso del file YAML del dataset, essenziale per la quantizzazione; la classificazione richiede invece una directory di dataset o un nome di dataset integrato. Se omesso con quantize=8, Ultralytics seleziona il dataset di calibrazione predefinito per il task del modello; un checkpoint addestrato con quantize=8 non ne richiede alcuno. |
fraction | float, int o list | 1.0 | Sottoinsieme di calibrazione espresso come rapporto, numero di immagini oppure rapporti/conteggi [train, val, test]. Gli elenchi di due elementi lasciano completo test, mentre 0 lo salta. |
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 utilizzare una GPU con supporto CUDA durante l'esportazione in TensorRT.
TensorRT 11.2.1 non supporta JetPack, incluso Thor; usa il runtime di TensorRT 10.x supportato dalla tua versione di JetPack. Per device=dla:0 o device=dla:1, NVIDIA identifica 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 sull'esportazione.
Esportazione TensorRT con quantizzazione INT8#
Esportare modelli YOLO di Ultralytics usando TensorRT con precisione INT8 esegue la quantizzazione post-addestramento (PTQ). TensorRT utilizza la calibrazione per la PTQ, 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, e utilizza quindi tale distribuzione per stimare i valori di scala per ciascun tensore. Ciascun tensore di attivazione candidato alla quantizzazione ha una scala associata dedotta da un processo di calibrazione. Un checkpoint messo a punto con quantize=8 tramite quantization-aware training trasporta già i suoi intervalli INT8, quindi la sua esportazione li utilizza 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 esplicita con NVIDIA ModelOpt, che inserisce nodi Q/DQ nel grafo ONNX prima di compilare un motore fortemente tipizzato; FP16 viene applicato con 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 utilizzato il calibratore legacy descritto di seguito.
Durante l'elaborazione di reti quantizzate implicitamente, TensorRT utilizza INT8 in modo opportunistico per ottimizzare il tempo di esecuzione dei layer. Se un layer viene eseguito più velocemente in INT8 e ha scale di quantizzazione assegnate ai propri input e output, a quel layer viene assegnato un kernel con precisione INT8; in caso contrario, TensorRT seleziona per il kernel una precisione FP32 o FP16, in base a quella che garantisce il tempo di esecuzione più rapido per quel layer.
È fondamentale assicurarsi che per l'esportazione con precisione INT8 venga utilizzato lo stesso dispositivo che userà i pesi del modello TensorRT in fase di distribuzione, poiché i risultati della calibrazione possono variare da un dispositivo all'altro.
Configurazione dell'esportazione INT8#
Gli argomenti forniti durante l'uso di export per un modello Ultralytics YOLO influenzeranno notevolmente le prestazioni del modello esportato. Dovranno inoltre essere selezionati in base alle risorse disponibili sul dispositivo; tuttavia, gli argomenti predefiniti dovrebbero funzionare per la maggior parte delle GPU NVIDIA discrete Ampere (o successive). L'algoritmo di calibrazione utilizzato è "MINMAX_CALIBRATION" per le esportazioni su GPU, mentre le esportazioni DLA su NVIDIA Jetson utilizzano "ENTROPY_CALIBRATION_2". Puoi leggere ulteriori dettagli sulle opzioni disponibili nella TensorRT Developer Guide. I test di Ultralytics hanno rilevato che "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 della memoria del dispositivo durante la conversione dei pesi del modello.-
Regola il valore di
workspacein base alle tue esigenze di calibrazione e alla disponibilità di risorse. Sebbene unworkspacepiù grande possa 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, unworkspacepiù piccolo può ridurre il tempo di calibrazione, ma può 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; durante la configurazione manuale, potrebbe essere necessario aumentare questo valore se la calibrazione si interrompe (termina senza avviso). -
TensorRT segnalerà
UNSUPPORTED_STATEdurante l'esportazione se il valore diworkspaceè maggiore della memoria disponibile sul dispositivo; ciò significa che il valore diworkspacedeve essere ridotto o impostato suNone. -
Se
workspaceè impostato sul valore massimo e la calibrazione non riesce o si interrompe, valuta l'utilizzo diNoneper l'allocazione automatica oppure riduci i valori diimgszebatchper diminuire i requisiti di memoria. -
Ricorda che la calibrazione per INT8 è specifica per ogni dispositivo: prendere in prestito una GPU di "fascia alta" per la calibrazione potrebbe causare prestazioni scarse quando l'inferenza viene eseguita su un altro dispositivo.
-
-
batch: la dimensione massima del batch utilizzata per l'inferenza. Durante l'inferenza è possibile utilizzare batch più piccoli, ma l'inferenza non accetterà batch più grandi di quello specificato.
L'utilizzo di batch piccoli può causare una scalatura inaccurata durante la calibrazione INT8. Questo accade perché il processo si adatta in base ai dati che osserva. I batch piccoli potrebbero non acquisire l'intero intervallo di valori, causando problemi con la calibrazione finale. L'utilizzo di una dimensione del batch maggiore contribuisce a garantire risultati di calibrazione più rappresentativi.
La sperimentazione di NVIDIA li ha portati a consigliare l'uso di almeno 500 immagini di calibrazione rappresentative dei dati per il tuo modello, con la calibrazione della quantizzazione INT8. Questa è una linea guida e non un requisito rigoroso, e dovrai sperimentare ciò che è necessario per ottenere buone prestazioni per il tuo dataset. Poiché i dati di calibrazione sono necessari per la calibrazione INT8 con TensorRT, assicurati di usare l'argomento data quando esporti un checkpoint che non è stato addestrato con quantize=8 (quantizzazione post-addestramento) a quantize=8 per TensorRT, e usa data="my_dataset.yaml", che utilizzerà le immagini della validazione per eseguire la calibrazione. Un checkpoint addestrato con quantize=8 salta la calibrazione, quindi ometti data per il checkpoint. Quando non viene passato alcun valore per data con l'esportazione in TensorRT con quantizzazione INT8, l'impostazione predefinita sarà l'uso di uno dei dataset di esempio "piccoli" 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)!
)
# Load the exported TensorRT INT8 model
model = YOLO("yolo26n.engine", task="detect")
# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")- Esporta con assi dinamici;
dynamicrimaneFalsea meno che non venga impostato esplicitamente. Vedi gli argomenti di esportazione per ulteriori informazioni. - Imposta la dimensione massima del batch a 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.
- Utilizza il dataset COCO per la calibrazione, in particolare le immagini utilizzate per la convalida (5.000 in totale).
Cache di calibrazione
TensorRT genererà una .cache di calibrazione che può essere riutilizzata per accelerare l'esportazione di futuri pesi del modello utilizzando gli stessi dati; tuttavia, ciò può causare una calibrazione scadente quando i dati sono molto diversi o se il valore di batch cambia drasticamente. In queste circostanze, la .cache esistente deve essere rinominata e spostata in una directory diversa oppure eliminata completamente.
Vantaggi dell'utilizzo di YOLO con TensorRT INT8#
-
Dimensioni ridotte del modello: la quantizzazione da FP32 a INT8 può ridurre le dimensioni del modello di 4 volte (su disco o in memoria), consentendo download più rapidi, requisiti di archiviazione inferiori e un minore ingombro di memoria durante la distribuzione di un modello.
-
Minore consumo energetico: 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, con un potenziale aumento della velocità di inferenza su GPU, dispositivi integrati e acceleratori.
Nota sulle velocità di inferenza
È normale 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 si modifica imgsz durante l'inferenza, soprattutto se imgsz non corrisponde a quello specificato durante l'esportazione (l'esportazione imgsz è impostata come profilo "optimal" di TensorRT).
Svantaggi dell'utilizzo di YOLO con TensorRT INT8#
-
Diminuzione delle metriche di valutazione: l'utilizzo di una precisione inferiore significa che
mAP,Precision,Recallo qualsiasi altra metrica utilizzata per valutare le prestazioni del modello sarà probabilmente leggermente peggiore. I layer Sigmoid vengono mantenuti a una precisione maggiore per preservare la calibrazione dei punteggi, ma INT8 può comunque modificare i valori di confidenza; seleziona quindi la soglia operativa dalla curva F1 del modello INT8 stesso. Consulta la sezione sui risultati delle prestazioni per confrontare le differenze inmAP50emAP50-95durante l'esportazione con INT8 su un piccolo campione di dispositivi diversi. -
Aumento dei tempi di sviluppo: individuare le impostazioni "ottimali" per la calibrazione INT8 in base al dataset e al dispositivo può richiedere una quantità significativa di 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 di utilizzo con questi modelli addestrati su COCO, che includono 80 classi pretrained.
Tempi di inferenza mostrati per mean, min (più veloce) e max (più lento) per ogni test, utilizzando i pesi pretrained yolov8n.engine
| Precision | Test di valutazione | media (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | dimensione (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predizione | 0.52 | 0.51 | 0.56 | 8 | 640 | ||
| FP32 | COCOval | 0.52 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predizione | 0.34 | 0.34 | 0.41 | 8 | 640 | ||
| FP16 | COCOval | 0.33 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predizione | 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 mostrati per mean, min (più veloce) e max (più lento) per ogni test, utilizzando i pesi pretrained yolov8n.engine
| Precision | Test di valutazione | media (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | dimensione (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predizione | 1.06 | 0.75 | 1.88 | 8 | 640 | ||
| FP32 | COCOval | 1.37 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predizione | 0.62 | 0.75 | 1.13 | 8 | 640 | ||
| FP16 | COCOval | 0.85 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predizione | 0.52 | 0.38 | 1.00 | 8 | 640 | ||
| INT8 | COCOval | 0.74 | 0.47 | 0.33 | 1 | 640 |
Dispositivi integrati#
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 mostrati per mean, min (più veloce) e max (più lento) per ogni test, utilizzando i pesi pretrained yolov8n.engine
| Precision | Test di valutazione | media (ms) | min | max (ms) | mAPval 50(B) | mAPval 50-95(B) | batch | dimensione (pixel) |
|---|---|---|---|---|---|---|---|
| FP32 | Predizione | 6.11 | 6.10 | 6.29 | 8 | 640 | ||
| FP32 | COCOval | 6.17 | 0.52 | 0.37 | 1 | 640 | |
| FP16 | Predizione | 3.18 | 3.18 | 3.20 | 8 | 640 | ||
| FP16 | COCOval | 3.19 | 0.52 | 0.37 | 1 | 640 | |
| INT8 | Predizione | 2.30 | 2.29 | 2.35 | 8 | 640 | ||
| INT8 | COCOval | 2.32 | 0.46 | 0.32 | 1 | 640 |
Consulta la nostra guida rapida su NVIDIA Jetson con Ultralytics YOLO per saperne di più sulla configurazione.
Consulta la nostra guida rapida su NVIDIA DGX Spark con Ultralytics YOLO per saperne di più sulla configurazione.
Metodi di valutazione#
Espandi le sezioni seguenti per informazioni su come sono stati esportati e testati questi modelli.
Configurazioni di esportazione
Consulta la modalità export per informazioni dettagliate 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 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, quantize=8, data="coco8.yaml"
)Ciclo predict
Consulta la modalità predict 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 of the same image
verbose=False,
device="cuda",
)Configurazione della convalida
Consulta la modalità val per saperne di più sugli argomenti di configurazione della convalida.
from ultralytics import YOLO
model = YOLO("yolo26n.engine")
results = model.val(
data="data.yaml", # COCO, ImageNet, or DOTAv1 for appropriate model task
batch=1,
imgsz=640,
verbose=False,
device="cuda",
)Distribuzione dei modelli YOLO26 esportati in TensorRT#
Dopo aver esportato correttamente i tuoi modelli Ultralytics YOLO26 in formato TensorRT, ora puoi distribuirli. Per istruzioni approfondite sulla distribuzione dei tuoi modelli TensorRT in vari contesti, consulta le seguenti risorse:
-
Distribuire Ultralytics con un server Triton: la nostra guida su come utilizzare il server NVIDIA Triton Inference (precedentemente TensorRT Inference Server) specificamente con i modelli Ultralytics YOLO.
-
Distribuzione di reti neurali profonde con NVIDIA TensorRT: questo articolo spiega come utilizzare NVIDIA TensorRT per distribuire in modo efficiente reti neurali profonde su piattaforme di distribuzione basate su GPU.
-
AI end-to-end per PC basati su NVIDIA: distribuzione con NVIDIA TensorRT: questo post del blog spiega l'utilizzo di NVIDIA TensorRT per ottimizzare e distribuire modelli AI su PC basati su NVIDIA.
-
Repository GitHub per NVIDIA TensorRT: Questo è il repository GitHub ufficiale che contiene il codice sorgente e la documentazione per NVIDIA TensorRT.
Riepilogo#
In questa guida ci siamo concentrati sulla conversione dei modelli Ultralytics YOLO26 nel formato di modello TensorRT di NVIDIA. Questo passaggio di conversione è fondamentale per migliorare l'efficienza e la velocità dei modelli YOLO26, rendendoli più efficaci e adatti a diversi ambienti di distribuzione.
Per ulteriori informazioni sui dettagli di utilizzo, consulta la documentazione ufficiale di TensorRT.
Se vuoi conoscere altre integrazioni Ultralytics YOLO26, la nostra pagina della guida alle integrazioni offre un'ampia selezione di risorse informative e approfondimenti.
FAQ#
Per convertire i tuoi modelli Ultralytics YOLO26 in formato TensorRT per un'inferenza ottimizzata 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") # creates 'yolo26n.engine' # Run inference model = YOLO("yolo26n.engine") results = model("https://ultralytics.com/images/bus.jpg")
Per ulteriori dettagli, visita la guida all'installazione di YOLO26 e la documentazione sull'esportazione.
-
L'utilizzo di TensorRT per ottimizzare i modelli YOLO26 offre diversi vantaggi:
- Maggiore velocità di inferenza: TensorRT ottimizza i livelli del modello e utilizza la calibrazione della precisione (INT8 e FP16) per accelerare l'inferenza senza sacrificare significativamente la precisione.
- 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 i kernel GPU ottimizzati per ogni livello del modello, garantendo le massime prestazioni.
Per saperne di più, consulta la documentazione ufficiale di TensorRT di NVIDIA e la nostra panoramica approfondita di TensorRT.
Sì, puoi esportare modelli YOLO26 usando TensorRT con quantizzazione INT8. Questo processo comporta la quantizzazione post-addestramento (PTQ) e la calibrazione, a meno che il checkpoint non sia stato addestrato con
quantize=8(quantization-aware training), nel qual caso gli intervalli trasportati dal 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 ulteriori dettagli, consulta la sezione sull'esportazione in TensorRT con quantizzazione INT8.
-
La distribuzione dei modelli YOLO26 TensorRT su un NVIDIA Triton Inference Server può essere eseguita utilizzando le seguenti risorse:
- Distribuire Ultralytics YOLO26 con Triton Server: istruzioni dettagliate per configurare e utilizzare Triton Inference Server.
- Distribuzione di reti neurali profonde con NVIDIA TensorRT: la guida di NVIDIA sulla distribuzione di modelli di deep learning con TensorRT, con opzioni e configurazioni dettagliate per la distribuzione.
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 all'hardware utilizzato. Ecco alcuni benchmark tipici:
-
NVIDIA A100:
- FP32 Inferenza: ~0,52 ms / immagine
- FP16 Inferenza: ~0,34 ms / immagine
- INT8 Inferenza: ~0,28 ms / immagine
- Leggera riduzione di mAP con la precisione INT8, ma significativo miglioramento della velocità.
-
GPU consumer (ad esempio, RTX 3080):
- FP32 Inferenza: ~1,06 ms / immagine
- FP16 Inferenza: ~0,62 ms / immagine
- INT8 Inferenza: ~0,52 ms / immagine
Benchmark dettagliati delle prestazioni per diverse configurazioni hardware sono disponibili nella sezione sulle prestazioni.
Per approfondimenti più completi sulle prestazioni di TensorRT, consulta la documentazione Ultralytics e i nostri report di analisi delle prestazioni.
-