Ottimizzazione dell'inferenza di OpenVINO per YOLO#
Introduzione#
Quando distribuisci modelli di deep learning, in particolare quelli per il rilevamento degli oggetti come i modelli Ultralytics YOLO, ottenere prestazioni ottimali è fondamentale. Questa guida approfondisce l'uso del toolkit OpenVINO di Intel per ottimizzare l'inferenza, concentrandosi su latenza e throughput. Che tu stia lavorando ad applicazioni per utenti finali o a distribuzioni su larga scala, comprendere e applicare queste strategie di ottimizzazione garantirà che i tuoi modelli funzionino in modo efficiente su diversi dispositivi.
Ottimizzazione della latenza#
L'ottimizzazione della latenza è fondamentale per le applicazioni che richiedono una risposta immediata da un singolo modello a fronte di un singolo input, come avviene tipicamente negli scenari per utenti finali. L'obiettivo è ridurre al minimo il ritardo tra l'input e il risultato dell'inferenza. Tuttavia, ottenere una latenza ridotta richiede un'attenta valutazione, soprattutto quando esegui inferenze simultanee o gestisci più modelli.
Strategie chiave per l'ottimizzazione della latenza#
- Una singola inferenza per dispositivo: Il modo più semplice per ottenere una latenza ridotta consiste nel limitarsi a una sola inferenza alla volta per dispositivo. Una concorrenza aggiuntiva spesso comporta un aumento della latenza.
- Utilizzo dei sottodispositivi: Dispositivi come CPU multi-socket o GPU multi-tile possono eseguire più richieste con un aumento minimo della latenza, sfruttando i propri sottodispositivi interni.
- Suggerimenti sulle prestazioni di OpenVINO: L'utilizzo di
ov::LATENCYper la proprietàov::performance_modedurante la compilazione del modello semplifica la messa a punto delle prestazioni, offrendo un approccio indipendente dal dispositivo e a prova di futuro.
Gestione della latenza della prima inferenza#
- Caching del modello: Per ridurre l'impatto dei tempi di caricamento e compilazione del modello sulla latenza, usa il caching del modello quando possibile. Negli scenari in cui il caching non è praticabile, le CPU offrono generalmente i tempi di caricamento del modello più rapidi.
- Mapping del modello vs. lettura: Per ridurre i tempi di caricamento, OpenVINO ha sostituito la lettura del modello con il mapping. Tuttavia, se il modello si trova su un'unità rimovibile o di rete, valuta l'utilizzo di
ov::enable_mmap(false)per tornare alla lettura. - Selezione automatica del dispositivo: Questa modalità avvia l'inferenza sulla CPU e passa a un acceleratore quando è pronto, riducendo senza interruzioni la latenza della prima inferenza.
Ottimizzazione del throughput#
L'ottimizzazione del throughput è fondamentale negli scenari che gestiscono simultaneamente numerose richieste di inferenza, massimizzando l'utilizzo delle risorse senza sacrificare significativamente le prestazioni delle singole richieste.
Approcci all'ottimizzazione della velocità effettiva#
-
Suggerimenti sulle prestazioni di OpenVINO: Un metodo di alto livello e a prova di futuro per migliorare il throughput su diversi dispositivi tramite i suggerimenti sulle prestazioni.
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
Batching e stream espliciti: Un approccio più granulare che prevede il batching esplicito e l'uso degli stream per una messa a punto avanzata delle prestazioni.
Progettazione di applicazioni orientate alla velocità effettiva#
Per massimizzare il throughput, le applicazioni dovrebbero:
- Elaborare gli input in parallelo, sfruttando appieno le capacità del dispositivo.
- Scomporre il flusso di dati in richieste di inferenza simultanee, pianificate per l'esecuzione parallela.
- Utilizzare l'API asincrona con callback per mantenere l'efficienza ed evitare che il dispositivo rimanga senza lavoro.
Esecuzione su più dispositivi#
La modalità multi-dispositivo di OpenVINO semplifica l'aumento del throughput bilanciando automaticamente le richieste di inferenza tra i dispositivi, senza richiedere la gestione dei dispositivi a livello applicativo.
Miglioramenti delle prestazioni nel mondo reale#
L'implementazione delle ottimizzazioni di OpenVINO con i modelli di Ultralytics YOLO può produrre miglioramenti significativi delle prestazioni. Come dimostrato nei benchmarks, puoi ottenere velocità di inferenza fino a 3 volte superiori su CPU Intel, con accelerazioni ancora maggiori possibili sull'intera gamma di hardware Intel, tra cui GPU integrate, GPU dedicate e NPU.
Ad esempio, quando esegui modelli YOLO26 su CPU Intel Xeon, le versioni ottimizzate con OpenVINO superano costantemente le controparti PyTorch in termini di tempo di inferenza per immagine, senza compromettere la precisione.
Implementazione pratica#
Per esportare e ottimizzare il tuo modello Ultralytics YOLO per OpenVINO, puoi usare la funzionalità di esportazione:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", quantize=16) # Export with FP16 precisionDopo l'esportazione, puoi eseguire l'inferenza con il modello ottimizzato:
# Load the OpenVINO model
ov_model = YOLO("yolo26n_openvino_model/")
# Run inference (Ultralytics auto-selects OpenVINO LATENCY mode for batch=1)
results = ov_model("https://ultralytics.com/images/bus.jpg", verbose=True)Conclusioni#
Ottimizzare i modelli Ultralytics YOLO per latenza e throughput con OpenVINO può migliorare significativamente le prestazioni della tua applicazione. Applicando con attenzione le strategie descritte in questa guida, gli sviluppatori possono garantire che i loro modelli funzionino in modo efficiente, soddisfacendo i requisiti di diversi scenari di distribuzione. Ricorda che la scelta tra l'ottimizzazione della latenza e quella del throughput dipende dalle esigenze specifiche della tua applicazione e dalle caratteristiche dell'ambiente di distribuzione.
Per informazioni tecniche più dettagliate e gli aggiornamenti più recenti, consulta la documentazione di OpenVINO e il repository Ultralytics YOLO. Queste risorse offrono guide approfondite, tutorial e supporto della community per aiutarti a sfruttare al meglio i tuoi modelli di deep learning.
Garantire che i tuoi modelli raggiungano prestazioni ottimali non significa solo modificare le configurazioni, ma anche comprendere le esigenze della tua applicazione e prendere decisioni consapevoli. Che tu stia ottimizzando le risposte in tempo reale o massimizzando il throughput per l'elaborazione su larga scala, la combinazione dei modelli Ultralytics YOLO e OpenVINO offre agli sviluppatori un potente toolkit per distribuire soluzioni di AI ad alte prestazioni.
FAQ#
L'ottimizzazione dei modelli Ultralytics YOLO per una latenza ridotta prevede diverse strategie principali:
- Una singola inferenza per dispositivo: Limita le inferenze a una alla volta per dispositivo per ridurre al minimo i ritardi.
- Utilizzo dei sottodispositivi: Utilizza dispositivi come CPU multi-socket o GPU multi-tile, in grado di gestire più richieste con un aumento minimo della latenza.
- Suggerimenti sulle prestazioni di OpenVINO: Usa
ov::LATENCYdurante la compilazione del modello per una messa a punto semplificata e indipendente dal dispositivo.
Per ulteriori suggerimenti pratici sull'ottimizzazione della latenza, consulta la sezione sull'ottimizzazione della latenza della nostra guida.
OpenVINO migliora il throughput dei modelli Ultralytics YOLO massimizzando l'utilizzo delle risorse del dispositivo senza sacrificare le prestazioni. I vantaggi principali includono:
- Suggerimenti sulle prestazioni: Messa a punto delle prestazioni semplice e di alto livello su diversi dispositivi.
- Batching e stream espliciti: Messa a punto per prestazioni avanzate.
- Esecuzione su più dispositivi: Bilanciamento automatico del carico di inferenza, che semplifica la gestione a livello applicativo.
Configurazione di esempio:
import openvino as ov import openvino.properties.hint as hints core = ov.Core() model = core.read_model("yolo26n_openvino_model/yolo26n.xml") config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config)Scopri di più sull'ottimizzazione del throughput nella sezione sull'ottimizzazione del throughput della nostra guida dettagliata.
Per ridurre la latenza della prima inferenza, valuta queste pratiche:
- Caching del modello: Usa il caching del modello per ridurre i tempi di caricamento e compilazione.
- Mapping del modello vs. lettura: Usa il mapping (
ov::enable_mmap(true)) per impostazione predefinita, ma passa alla lettura (ov::enable_mmap(false)) se il modello si trova su un'unità rimovibile o di rete. - Selezione automatica del dispositivo: Usa la modalità AUTO per avviare l'inferenza sulla CPU e passare senza interruzioni a un acceleratore.
Per strategie dettagliate sulla gestione della latenza della prima inferenza, consulta la sezione sulla gestione della latenza della prima inferenza.
Bilanciare l'ottimizzazione della latenza e del throughput richiede di comprendere le esigenze della tua applicazione:
- Ottimizzazione della latenza: Ideale per applicazioni in tempo reale che richiedono risposte immediate, ad esempio le app per utenti finali.
- Ottimizzazione del throughput: Ideale per gli scenari con molte inferenze simultanee, in cui si massimizza l'utilizzo delle risorse, ad esempio le distribuzioni su larga scala.
L'uso dei suggerimenti sulle prestazioni di alto livello e delle modalità multi-dispositivo di OpenVINO può aiutarti a trovare il giusto equilibrio. Scegli i suggerimenti sulle prestazioni di OpenVINO appropriati in base ai tuoi requisiti specifici.
Sì, i modelli Ultralytics YOLO sono estremamente versatili e possono essere integrati con diversi framework di AI. Tra le opzioni disponibili:
- TensorRT: Per l'ottimizzazione delle GPU NVIDIA, segui la guida all'integrazione di TensorRT.
- CoreML: Per i dispositivi Apple, consulta le nostre istruzioni per l'esportazione in CoreML.
- LiteRT.js: Per app web e Node.js, consulta la guida all'integrazione di LiteRT e il runtime web LiteRT.js.
Scopri altre integrazioni nella pagina delle integrazioni di Ultralytics.