Vai al contenuto

Ottimizzazione dell'inferenza OpenVINO per i modelli Ultralytics YOLO : Una guida completa

OpenVINO Ecosistema

Introduzione

Quando si utilizzano modelli di deep learning, in particolare quelli per il rilevamento di oggetti come i modelli di Ultralytics YOLO , è fondamentale ottenere prestazioni ottimali. Questa guida analizza l'utilizzo del toolkit OpenVINO di Intel per ottimizzare l'inferenza, concentrandosi su latenza e throughput. Sia che tu stia lavorando ad applicazioni consumer o a implementazioni su larga scala, la comprensione e l'applicazione di queste strategie di ottimizzazione ti garantiranno un'esecuzione efficiente dei tuoi modelli su diversi dispositivi.

Ottimizzazione della latenza

L'ottimizzazione della latenza è fondamentale per le applicazioni che richiedono una risposta immediata da parte di un singolo modello dato un singolo input, tipico degli scenari consumer. L'obiettivo è ridurre al minimo il ritardo tra l'input e il risultato dell'inferenza. Tuttavia, ottenere una bassa latenza richiede un'attenta considerazione, soprattutto 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 è quello di limitare a una sola inferenza alla volta per dispositivo. Un'ulteriore concomitanza porta spesso 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.
  • OpenVINO Suggerimenti sulle prestazioni: Utilizzando il sito OpenVINO ov::hint::PerformanceMode::LATENCY per il ov::hint::performance_mode durante la compilazione del modello, semplifica la messa a punto delle prestazioni, offrendo un approccio indipendente dal dispositivo e a prova di futuro.

Gestire la latenza della prima interferenza:

  • Caching dei modelli: per ridurre i tempi di caricamento e compilazione dei modelli che incidono sulla latenza, usa il caching dei modelli quando è possibile. Per gli scenari in cui la cache non è praticabile, le CPU offrono generalmente i tempi di caricamento dei modelli più rapidi.
  • Mappatura del modello vs. lettura: 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, considera l'uso di ov::enable_mmap(false) per tornare a leggere.
  • Selezione automatica del dispositivo: Questa modalità inizia l'inferenza sulla CPU, passando all'acceleratore una volta pronto, riducendo così la latenza della prima inferenza.

Ottimizzazione del throughput

L'ottimizzazione del throughput è fondamentale per gli scenari che servono numerose richieste di inferenza simultaneamente, massimizzando l'utilizzo delle risorse senza sacrificare in modo significativo le prestazioni delle singole richieste.

Approcci all'ottimizzazione del throughput:

  1. OpenVINO Suggerimenti sulle prestazioni: 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 as props
import openvino.properties.hint as hints

config = {hints.performance_mode: hints.PerformanceMode.THROUGHPUT}
compiled_model = core.compile_model(model, "GPU", config)
  1. Batching esplicito e flussi: Un approccio più granulare che prevede il batching esplicito e l'uso di flussi per la regolazione avanzata delle prestazioni.

Progettare applicazioni orientate al throughput:

Per massimizzare il throughput, le applicazioni devono:

  • Elabora gli input in parallelo, sfruttando appieno le capacità del dispositivo.
  • Decomporre il flusso di dati in richieste di inferenza concorrenti, programmate per l'esecuzione in parallelo.
  • Utilizza l'API Async con le callback per mantenere l'efficienza ed evitare l'inedia del dispositivo.

Esecuzione su più dispositivi:

OpenVINOLa modalità multidispositivo semplifica la scalata del throughput bilanciando automaticamente le richieste di inferenza tra i dispositivi senza richiedere la gestione dei dispositivi a livello di applicazione.

Conclusione

L'ottimizzazione dei modelli Ultralytics YOLO per la latenza e il throughput con OpenVINO può migliorare significativamente le prestazioni della tua applicazione. Applicando attentamente le strategie descritte in questa guida, gli sviluppatori possono assicurarsi che i loro modelli funzionino in modo efficiente, soddisfacendo le esigenze dei vari scenari di distribuzione. Ricorda che la scelta tra ottimizzare la latenza o il throughput dipende dalle esigenze specifiche della tua applicazione e dalle caratteristiche dell'ambiente di distribuzione.

Per informazioni tecniche più dettagliate e per gli ultimi aggiornamenti, consulta la documentazione diOpenVINO e l'archivioUltralytics YOLO . Queste risorse forniscono guide approfondite, tutorial e il supporto della comunità per aiutarti a ottenere il massimo dai tuoi modelli di deep learning.


Garantire ai tuoi modelli prestazioni ottimali non significa solo modificare le configurazioni, ma anche comprendere le esigenze della tua applicazione e prendere decisioni informate. Sia che si tratti di ottimizzare le risposte in tempo reale o di massimizzare il throughput per l'elaborazione su larga scala, la combinazione dei modelli di Ultralytics YOLO e di OpenVINO offre agli sviluppatori un potente kit di strumenti per implementare soluzioni di intelligenza artificiale ad alte prestazioni.



Creato 2024-03-17, Aggiornato 2024-03-17
Autori: glenn-jocher (1)

Commenti