Ottimizzazione dell'inferenza OpenVINO per YOLO
Introduzione
Quando si distribuiscono 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'utilizzo del toolkit OpenVINO di Intel per ottimizzare l'inferenza, concentrandosi su latenza e throughput. Che si lavori su applicazioni consumer o su implementazioni su larga scala, comprendere e applicare queste strategie di ottimizzazione garantirà che i modelli funzionino in modo efficiente su vari dispositivi.
Ottimizzazione per la latenza
L'ottimizzazione della latenza è fondamentale per le applicazioni che richiedono una risposta immediata da un singolo modello dato un singolo input, tipico 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, soprattutto quando si eseguono inferenze concorrenti o si gestiscono più modelli.
Strategie chiave per l'ottimizzazione della latenza:
- Inferenza singola per dispositivo: Il modo più semplice per ottenere una bassa latenza è limitare a una inferenza alla volta per dispositivo. Un'ulteriore concorrenza spesso porta a una maggiore latenza.
- Sfruttare i sottodispositivi: dispositivi come CPU multi-socket o GPU multi-tile possono eseguire più richieste con un aumento minimo della latenza utilizzando i loro sottodispositivi interni.
- Suggerimenti sulle prestazioni di OpenVINO: Utilizzando OpenVINO.
ov::hint::PerformanceMode::LATENCY
per ilov::hint::performance_mode
la proprietà durante 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 i tempi di caricamento e compilazione del modello che influiscono sulla latenza, utilizza la memorizzazione nella cache del modello ove possibile. Per gli scenari in cui la memorizzazione nella cache non è praticabile, le CPU offrono generalmente i tempi di caricamento del modello più rapidi.
- Mappatura vs. Lettura del modello: Per ridurre i tempi di caricamento, OpenVINO ha sostituito la lettura del modello con la mappatura. Tuttavia, se il modello si trova su un'unità rimovibile o di rete, valuta la possibilità di utilizzare
ov::enable_mmap(false)
per tornare alla lettura. - Selezione automatica del dispositivo: Questa modalità inizia l'inferenza sulla CPU, passando a un acceleratore una volta pronto, riducendo senza problemi la latenza della prima inferenza.
Ottimizzazione per la velocità di elaborazione
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 su tutti i dispositivi utilizzando 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 stream: Un approccio più granulare che coinvolge il batching esplicito e l'uso di stream per la messa a punto avanzata delle prestazioni.
Progettazione di applicazioni orientate alla produttività:
Per massimizzare la velocità effettiva, le applicazioni devono:
- Elabora gli input in parallelo, sfruttando appieno le capacità del dispositivo.
- Decomposizione del flusso di dati in richieste di inferenza concorrenti, pianificate per l'esecuzione in parallelo.
- Utilizza l'API asincrona con callback per mantenere l'efficienza ed evitare la carenza di risorse del dispositivo.
Esecuzione Multi-Dispositivo:
La modalità multi-dispositivo di OpenVINO semplifica l'aumento della velocità di elaborazione bilanciando automaticamente le richieste di inferenza tra i dispositivi senza richiedere la gestione dei dispositivi a livello di applicazione.
Guadagni di performance nel mondo reale
L'implementazione delle ottimizzazioni OpenVINO con i modelli Ultralytics YOLO può produrre miglioramenti significativi delle prestazioni. Come dimostrato nei benchmark, gli utenti possono sperimentare velocità di inferenza fino a 3 volte superiori sulle CPU Intel, con accelerazioni ancora maggiori possibili attraverso lo spettro hardware di Intel, incluse GPU integrate, GPU dedicate e VPU.
Ad esempio, quando si eseguono modelli YOLOv8 su CPU Intel Xeon, le versioni ottimizzate per OpenVINO superano costantemente le loro 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("yolov8n.pt")
# Export the model to OpenVINO format
model.export(format="openvino", half=True) # Export with FP16 precision
Dopo l'esportazione, puoi eseguire l'inferenza con il modello ottimizzato:
# Load the OpenVINO model
ov_model = YOLO("yolov8n_openvino_model/")
# Run inference with performance hints for latency
results = ov_model("path/to/image.jpg", verbose=True)
Conclusione
L'ottimizzazione dei modelli Ultralytics YOLO per la latenza e la velocità di elaborazione con OpenVINO può migliorare significativamente le prestazioni della tua applicazione. Applicando attentamente le strategie delineate in questa guida, gli sviluppatori possono garantire che i loro modelli funzionino in modo efficiente, soddisfacendo le esigenze di vari scenari di implementazione. Ricorda, la scelta tra l'ottimizzazione per la latenza o la velocità di elaborazione dipende dalle esigenze specifiche della tua applicazione e dalle caratteristiche dell'ambiente di implementazione.
Per informazioni tecniche più dettagliate e gli ultimi aggiornamenti, consulta la documentazione di OpenVINO e il repository YOLO di Ultralytics. Queste risorse forniscono guide approfondite, tutorial e supporto della community per aiutarti a ottenere il massimo dai tuoi modelli di deep learning.
Garantire che i tuoi modelli raggiungano prestazioni ottimali non significa solo modificare le configurazioni; si tratta di comprendere le esigenze della tua applicazione e prendere decisioni informate. Sia 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 gli sviluppatori per implementare soluzioni di intelligenza artificiale ad alte prestazioni.
FAQ
Come posso ottimizzare i modelli Ultralytics YOLO per bassa latenza utilizzando OpenVINO?
L'ottimizzazione dei modelli Ultralytics YOLO per una bassa latenza prevede diverse strategie chiave:
- Inferenza singola per dispositivo: Limita le inferenze a una alla volta per dispositivo per ridurre al minimo i ritardi.
- Sfruttare i sottodispositivi: utilizzare dispositivi come CPU multi-socket o GPU multi-tile che possono gestire più richieste con un aumento minimo della latenza.
- Suggerimenti sulle prestazioni di OpenVINO: Utilizza OpenVINO
ov::hint::PerformanceMode::LATENCY
durante la compilazione del modello per una messa a punto semplificata e indipendente dal dispositivo.
Per suggerimenti più pratici sull'ottimizzazione della latenza, consulta la sezione Ottimizzazione della latenza della nostra guida.
Perché dovrei usare OpenVINO per ottimizzare il throughput di Ultralytics YOLO?
OpenVINO migliora la velocità di elaborazione dei modelli Ultralytics YOLO massimizzando l'utilizzo delle risorse del dispositivo senza sacrificare le prestazioni. I vantaggi principali includono:
- Suggerimenti sulle prestazioni: Ottimizzazione delle prestazioni semplice e di alto livello su tutti i dispositivi.
- Batching esplicito e stream: Ottimizzazione per prestazioni avanzate.
- Esecuzione su più dispositivi: Bilanciamento automatico del carico di inferenza, semplificando 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 sull'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: Utilizza la memorizzazione nella cache del modello per ridurre i tempi di caricamento e compilazione.
- Mappatura vs. Lettura del modello: Utilizza la mappatura (
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: Utilizza la modalità AUTO per iniziare con l'inferenza della CPU e passare a un acceleratore senza problemi.
Per strategie dettagliate sulla gestione della latenza della prima inferenza, consultare la sezione Gestione della latenza della prima inferenza.
Come posso bilanciare l'ottimizzazione per la latenza e il 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 di livello 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 di prestazioni di alto livello e delle modalità multi-dispositivo di OpenVINO può aiutare a trovare il giusto equilibrio. Scegli gli appropriati suggerimenti sulle prestazioni di OpenVINO in base alle tue esigenze specifiche.
Posso utilizzare i modelli Ultralytics YOLO con altri framework di intelligenza artificiale oltre a OpenVINO?
Sì, i modelli Ultralytics YOLO sono altamente versatili e possono essere integrati con vari framework di IA. Le opzioni includono:
- TensorRT: Per l'ottimizzazione della GPU NVIDIA, seguire la guida all'integrazione di TensorRT.
- CoreML: Per i dispositivi Apple, fare riferimento alle nostre istruzioni per l'export in CoreML.
- TensorFlow.js: Per le app web e Node.js, consulta la guida alla conversione TF.js.
Esplora ulteriori integrazioni nella pagina delle integrazioni di Ultralytics.