Ottimizzazione dell'inferenza con OpenVINO per YOLO
Introduzione
Quando distribuisci modelli di deep learning, in particolare quelli per il rilevamento di 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 sulla latenza e sul throughput. Che tu stia lavorando su applicazioni consumer o su implementazioni su larga scala, comprendere e applicare queste strategie di ottimizzazione garantirà che i tuoi modelli funzionino in modo efficiente su vari dispositivi.
Ottimizzazione per la latenza
L'ottimizzazione della latenza è vitale per le applicazioni che richiedono una risposta immediata da un singolo modello dato un singolo input, tipica negli scenari consumer. L'obiettivo è ridurre al minimo il ritardo tra l'input e il risultato dell'inferenza. Tuttavia, ottenere una bassa latenza implica un'attenta considerazione, specialmente quando si eseguono inferenze simultanee o si gestiscono più modelli.
Strategie chiave per l'ottimizzazione della latenza:
- Singola inferenza per dispositivo: Il modo più semplice per ottenere una bassa latenza è limitarsi a un'inferenza alla volta per dispositivo. Una maggiore concorrenza spesso porta a un aumento della latenza.
- Sfruttare i sotto-dispositivi: Dispositivi come CPU multi-socket o GPU multi-tile possono eseguire più richieste con un aumento minimo della latenza utilizzando i loro sotto-dispositivi interni.
- Suggerimenti sulle prestazioni di OpenVINO: L'utilizzo di
ov::LATENCYdi OpenVINO per 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 mitigare il caricamento del modello e i tempi di compilazione che influiscono sulla latenza, usa il caching del modello ove possibile. Per gli scenari in cui il caching non è fattibile, le CPU generalmente offrono i tempi di caricamento del modello più rapidi.
- Mapping vs Lettura del modello: 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, considera l'utilizzo di
ov::enable_mmap(false)per tornare alla lettura. - Selezione automatica del dispositivo (AUTO): Questa modalità avvia l'inferenza sulla CPU, passando a un acceleratore non appena pronto, riducendo senza problemi la latenza della prima inferenza.
Ottimizzazione per il throughput
L'ottimizzazione del throughput è fondamentale per gli scenari che servono numerose richieste di inferenza simultaneamente, massimizzando l'utilizzo delle risorse senza sacrificare significativamente le prestazioni delle singole richieste.
Approcci all'ottimizzazione del throughput:
-
Suggerimenti sulle prestazioni di OpenVINO: Un metodo di alto livello e a prova di futuro per migliorare il throughput tra i dispositivi utilizzando i suggerimenti sulle prestazioni.
import openvino.properties.hint as hints config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT} compiled_model = core.compile_model(model, "GPU", config) -
Batching esplicito e flussi (streams): Un approccio più granulare che prevede il batching esplicito e l'uso di flussi per un'avanzata ottimizzazione delle prestazioni.
Progettazione di applicazioni orientate al throughput:
Per massimizzare il throughput, le applicazioni dovrebbero:
- Elaborare gli input in parallelo, sfruttando appieno le capacità del dispositivo.
- Decomporre il flusso di dati in richieste di inferenza simultanee, programmate per l'esecuzione parallela.
- Utilizzare l'API asincrona con callback per mantenere l'efficienza ed evitare il sotto-utilizzo del dispositivo.
Esecuzione su più dispositivi (Multi-Device):
La modalità multi-dispositivo di OpenVINO semplifica la scalabilità del throughput bilanciando automaticamente le richieste di inferenza tra i dispositivi senza richiedere la gestione dei dispositivi a livello di applicazione.
Guadagni di prestazioni nel mondo reale
L'implementazione delle ottimizzazioni OpenVINO con i modelli Ultralytics YOLO può produrre significativi miglioramenti delle prestazioni. Come dimostrato nei benchmark, puoi sperimentare velocità di inferenza fino a 3 volte superiori su CPU Intel, con accelerazioni ancora maggiori possibili sull'intero spettro hardware di Intel, inclusi GPU integrate, GPU dedicate e VPU.
Ad esempio, quando esegui modelli YOLOv8 su CPU Intel Xeon, le versioni ottimizzate con OpenVINO superano costantemente le controparti PyTorch in termini di tempo di inferenza per immagine, senza compromettere l'accuratezza.
Implementazione pratica
Per esportare e ottimizzare il tuo modello Ultralytics YOLO per OpenVINO, puoi utilizzare la funzionalità di export:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # 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 with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)Conclusione
Ottimizzare i modelli Ultralytics YOLO per latenza e throughput con OpenVINO può migliorare significativamente le prestazioni della tua applicazione. Applicando attentamente le strategie delineate in questa guida, puoi garantire che i tuoi modelli funzionino in modo efficiente, soddisfacendo le esigenze di vari scenari di distribuzione. Ricorda, la scelta tra l'ottimizzazione per la latenza o per il throughput dipende dalle tue specifiche esigenze applicative e dalle caratteristiche dell'ambiente di distribuzione.
Per informazioni tecniche più dettagliate e gli ultimi aggiornamenti, consulta la documentazione di OpenVINO e il repository Ultralytics YOLO. Queste risorse forniscono guide approfondite, tutorial e supporto dalla community per aiutarti a ottenere il massimo dai tuoi modelli di deep learning.
Garantire che i tuoi modelli ottengano prestazioni ottimali non significa solo modificare le configurazioni; si tratta di comprendere le esigenze della tua applicazione e prendere decisioni informate. Che tu stia ottimizzando per risposte in tempo reale o massimizzando il throughput per l'elaborazione su larga scala, la combinazione di modelli Ultralytics YOLO e OpenVINO offre un potente toolkit per distribuire soluzioni AI ad alte prestazioni.
FAQ
Come ottimizzo i modelli Ultralytics YOLO per una bassa latenza utilizzando OpenVINO?
L'ottimizzazione dei modelli Ultralytics YOLO per una bassa latenza comporta diverse strategie chiave:
- Singola inferenza per dispositivo: Limita le inferenze a una alla volta per dispositivo per ridurre al minimo i ritardi.
- Sfruttare i sotto-dispositivi: 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::LATENCYdi OpenVINO durante la compilazione del modello per una messa a punto semplificata e indipendente dal dispositivo.
Per ulteriori suggerimenti pratici sull'ottimizzazione della latenza, dai un'occhiata alla sezione Ottimizzazione della latenza della nostra guida.
Perché dovrei usare OpenVINO per ottimizzare il throughput di Ultralytics YOLO?
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: Semplice messa a punto delle prestazioni di alto livello tra i dispositivi.
- Batching esplicito e flussi: Messa a punto per prestazioni avanzate.
- Esecuzione su più dispositivi: Bilanciamento automatico del carico di inferenza, facilitando la gestione a livello di applicazione.
Esempio di configurazione:
import openvino.properties.hint as hints
config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)Scopri di più sull'ottimizzazione del throughput nella sezione Ottimizzazione del throughput della nostra guida dettagliata.
Qual è la best practice per ridurre la latenza della prima inferenza in OpenVINO?
Per ridurre la latenza della prima inferenza, considera queste pratiche:
- Caching del modello: Usa il caching del modello per diminuire i tempi di caricamento e compilazione.
- Mapping vs Lettura del modello: 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 (AUTO): Utilizza la modalità AUTO per iniziare con l'inferenza su CPU e passare a un acceleratore senza interruzioni.
Per strategie dettagliate sulla gestione della latenza della prima inferenza, consulta la sezione Gestione della latenza della prima inferenza.
Come bilancio l'ottimizzazione per latenza e throughput con Ultralytics YOLO e OpenVINO?
Bilanciare l'ottimizzazione della latenza e del throughput richiede la comprensione delle esigenze della tua applicazione:
- Ottimizzazione della latenza: Ideale per applicazioni in tempo reale che richiedono risposte immediate (ad esempio, app consumer).
- Ottimizzazione del throughput: Ideale per scenari con molte inferenze simultanee, massimizzando l'uso delle risorse (ad esempio, implementazioni su larga scala).
L'utilizzo dei suggerimenti sulle prestazioni di alto livello di OpenVINO e delle modalità multi-dispositivo può aiutare a trovare il giusto equilibrio. Scegli i suggerimenti sulle prestazioni di OpenVINO appropriati in base ai tuoi requisiti specifici.
Posso utilizzare i modelli Ultralytics YOLO con altri framework AI oltre a OpenVINO?
Sì, i modelli Ultralytics YOLO sono altamente versatili e possono essere integrati con vari framework AI. Le opzioni includono:
- TensorRT: Per l'ottimizzazione della GPU NVIDIA, segui la guida all'integrazione di TensorRT.
- CoreML: Per i dispositivi Apple, consulta le nostre istruzioni per l'esportazione in CoreML.
- TensorFlow.js: Per app web e Node.js, vedi la guida alla conversione TF.js.
Esplora altre integrazioni sulla pagina delle integrazioni di Ultralytics.