Imparare ONNX per il trading - pagina 14

 

Tutorial ESP - Come: progettare un acceleratore in Keras/Pytorch/ONNX



Tutorial ESP - Come: progettare un acceleratore in Keras/Pytorch/ONNX

Il tutorial introduce uno strumento chiamato Chalice per ML, che può generare automaticamente un acceleratore da un modello Keras/Pytorch/ONNX. Il tutorial procede quindi a dimostrare come integrare l'acceleratore in ESP (Early Stage Prototyper). Il relatore mostra anche come progettare un acceleratore in Keras/Pytorch/ONNX e passa attraverso le fasi di importazione di un acceleratore, aggiunta di un banco di prova, generazione di RTL e creazione di due versioni dell'acceleratore. Il video copre anche la compilazione di Linux e la creazione di un'applicazione in spazio utente Linux per l'acceleratore. Infine, il tutorial termina con le risorse per un ulteriore apprendimento.

  • 00:00:00 In questa sezione del tutorial, il relatore introduce uno strumento chiamato Chalice per ML che può generare automaticamente un acceleratore da un modello Keras/Pytorch/ONNX. Il flusso viene dimostrato utilizzando HLS 4 ML per generare un acceleratore da un modello Keras predefinito fornito all'interno dell'ESP per il repository GitHub di NXP. L'acceleratore generato viene quindi integrato e testato in ESP utilizzando uno script interattivo. Il relatore sottolinea che gli utenti devono consultare le guide dei prerequisiti e configurare il proprio ambiente prima di tentare di seguire il tutorial. Il tutorial offre anche materiali predefiniti che gli utenti possono utilizzare per sperimentare senza dover eseguire tutti i passaggi.

  • 00:05:00 In questa sezione del tutorial, l'istruttore spiega come integrare l'acceleratore progettato nei passaggi precedenti in ESP (Early Stage Prototyper). Viene assegnato l'ID esadecimale a tre cifre per l'acceleratore, tenendo presente che il numero non deve essere maggiore di 1024 in decimale. Viene quindi definita la larghezza dei bit di dati dell'acceleratore, che è di 32 bit nel caso d'uso corrente, e vengono determinate le dimensioni dei file di input e output. Infine, l'istruttore dimostra l'esecuzione della sintesi di alto livello per l'acceleratore a tre livelli MLP e mostra come eseguire HLS con ESP. Tutti i passaggi sono gli stessi delle altre guide per gli acceleratori System C o C++ e la cartella del progetto HLS per MLP viene aggiunta a ESP con tutti i file necessari per eseguire il wrapping e interfacciare l'acceleratore con il resto del sistema ESP.

  • 00:10:00 In questa sezione del video, il relatore mostra i passaggi per progettare un acceleratore in Keras/Pytorch/ONNX. Per prima cosa mostrano come importare un acceleratore e aggiungere un banco di prova che testa automaticamente la simulazione. Quindi passano attraverso la fase HLS, che genera un progetto in esecuzione su una ricerca selettrice e sulla tecnologia dell'FPGA. L'RTL generato viene quindi inserito nella tecnologia dell'FPGA e vengono create due versioni dell'acceleratore, una a 32 bit e l'altra a 64 bit. Il relatore configura un SOC con il comando ESP X config e mostra come compilare un'applicazione bare metal che è stata generata automaticamente. Per simulare il test bare metal di un acceleratore, è necessario specificare il programma di test. Una volta superata la convalida, è possibile generare un bitstream FPGA.

  • 00:15:00 In questa sezione, il video tutorial illustra la compilazione di Linux, che non solo compila i cinici, ma compila anche le applicazioni di test dello spazio utente per gli acceleratori. Una volta terminato Linux, viene creato un eseguibile per l'acceleratore, che è l'applicazione dello spazio utente Linux che verrà eseguita su FPGA. Il tutorial procede quindi alla programmazione dell'FPGA e all'esecuzione del test bare metal utilizzando il comando make FPGA run. Per eseguire il test dell'unità bare metal del deceleratore, viene specificato un programma di test generato in precedenza. Successivamente, è stato eseguito Linux ed è stata eseguita l'applicazione di unit test, che ha trovato con successo il venditore Reiter e il test è stato superato con convalida. Il tutorial si conclude con alcune risorse per un ulteriore apprendimento.
 

Inferenza ottimale su hardware flessibile con runtime ONNX



Inferenza ottimale su hardware flessibile con runtime ONNX

Questo tutorial copre la distribuzione di modelli su CPU, GPU e OpenVINO utilizzando ONNX Runtime. Il relatore dimostra l'uso di diversi provider di esecuzione, incluso OpenVINO, per l'inferenza su hardware flessibile. Il codice per l'inferenza è principalmente lo stesso in tutti gli ambienti, con la differenza principale nel provider di esecuzione. ONNX Runtime esegue l'inferenza più velocemente di PyTorch su CPU e GPU ed esiste una libreria ONNX Runtime separata per OpenVINO. Nel complesso, l'esercitazione fornisce una panoramica su come distribuire i modelli su varie opzioni hardware utilizzando ONNX Runtime.

  • 00:00:00 In questa sezione, il relatore illustra il processo di configurazione degli ambienti virtuali e l'utilizzo del runtime ONNX per eseguire l'inferenza su un modello ResNet50 su CPU, GPU e OpenVINO. Il relatore osserva che ONNX Runtime utilizzerà la GPU se rileva un acceleratore compatibile, altrimenti passerà per impostazione predefinita alla CPU. Il codice per l'inferenza è principalmente lo stesso in tutti e tre gli ambienti, con la differenza principale che sta cambiando il provider di esecuzione. Il relatore dimostra che ONNX Runtime può eseguire l'inferenza più velocemente di PyTorch su CPU e GPU e osserva che esiste una libreria ONNX Runtime separata per OpenVINO.

  • 00:05:00 In questa sezione, il relatore dimostra l'uso di diversi provider di esecuzione come OpenVINO e OpenVino su CPU per l'inferenza su hardware flessibile con ONNX Runtime. Impostando il provider di esecuzione su OpenVINO, lo stesso codice fornisce 30 ms e un utilizzo della CPU di circa 0,78. Il tutorial offre una panoramica su come distribuire i modelli su CPU, GPU e OpenVINO utilizzando ONNX Runtime.
 

Inferenza di Machine Learning in Flink con ONNX



Inferenza di Machine Learning in Flink con ONNX

Il video illustra i vantaggi e l'implementazione dell'utilizzo di ONNX nell'inferenza di machine learning e della sua distribuzione nel framework di calcolo distribuito, Flink. La separazione delle preoccupazioni tra l'addestramento del modello e l'inferenza della produzione, la capacità di definire le specifiche per input e output e l'indipendenza dal linguaggio rendono ONNX uno strumento prezioso per i data scientist. Il video mostra come caricare un modello ONNX in Flink, fornendo i componenti chiave della funzione rich map e spiegando come raggruppare i modelli insieme al codice utilizzando un file jar. Il relatore affronta anche considerazioni come la gestione della memoria, l'ottimizzazione dei batch e l'accelerazione hardware con ONNX e ne sottolinea i vantaggi per l'inferenza dell'apprendimento automatico in tempo reale in Flink.

  • 00:00:00 In questa sezione del video, Colin Germain spiega l'importanza dell'inferenza dell'apprendimento automatico in tempo reale utilizzando un esempio giocattolo dal dominio del rilevamento degli attacchi informatici. Illustra come l'attesa per rilevare un incidente può portare alla perdita di importanti esfiltrazioni di dati. Inoltre, spiega perché l'apprendimento automatico è fondamentale per catturare la variazione di diversi tipi di tecniche ed exploit utilizzati da avversari esterni. Infine, sottolinea l'importanza di ridimensionare la soluzione utilizzando il calcolo distribuito in Flink. Colin introduce il modello ONNX, che svolge un ruolo fondamentale nella soluzione, e spiega come possono utilizzare un modello di machine learning in PyTorch e serializzarlo con ONNX per distribuirlo in Flink.

  • 00:05:00 In questa sezione, il relatore spiega i vantaggi dell'utilizzo di ONNX, che sta per Open Neural Network Exchange, in una pipeline di machine learning. ONNX consente la separazione delle preoccupazioni tra la fase di addestramento del modello e la fase di inferenza della produzione, facilitando ai data scientist lo sviluppo di modelli in Python e quindi l'utilizzo del modello ONNX con diversi strumenti per l'inferenza. ONNX fornisce un contratto che definisce il calcolo di un grafico aciclico diretto da utilizzare per l'apprendimento automatico. Ogni operatore nel grafico ha una versione, consentendo la compatibilità con le versioni precedenti e la pubblicazione continua in futuro. Il relatore rileva inoltre i vantaggi del confezionamento di modelli ONNX con il framework di streaming Apache Flink per una distribuzione più semplice.

  • 00:10:00 In questa sezione del video, il relatore discute i vantaggi dell'utilizzo di ONNX per l'inferenza di machine learning, inclusa la possibilità di definire le specifiche per input e output e il supporto per tutte le versioni dei modelli nella libreria di runtime ONNX. L'indipendenza dalla lingua di ONNX e la disponibilità di convertitori per la maggior parte dei framework ML semplificano l'inserimento di modelli in ONNX e il relatore suggerisce di utilizzare netron per scopi diagnostici. Infine, il relatore presenta un semplice esempio di utilizzo di un modello di torcia pi con ONNX per l'elaborazione end-to-end senza formazione.

  • 00:15:00 In questa sezione, il relatore discute il metodo in avanti utilizzato per definire il calcolo e come viene utilizzato dalla coppia elevata per gestire la propagazione all'indietro dei gradienti per l'allenamento. Viene illustrato un esempio di base dell'utilizzo della classe add offset, che compensa i tensori di un valore definito. Il relatore passa quindi a discutere l'esportazione in ONNX e l'importanza di fornire gli input corretti per i modelli dinamici. Il modello ONNX viene caricato in memoria utilizzando l'ambiente di runtime e la sessione ONNX di Scala, che consente di eseguire l'inferenza sul modello. Viene creata una classe per contenere il modello caricato da utilizzare nell'inferenza.

  • 00:20:00 In questa sezione, il relatore spiega come il modello ONNX può essere caricato in Flink utilizzando un array di byte e un metodo di caricamento. Dimostrano inoltre come la funzione rich map può essere utilizzata per mantenere il modello caricato ed eseguire l'inferenza in modo pulito e organizzato. L'oratore passa attraverso i componenti chiave della funzione rich map, tra cui l'impostazione del tensore ONNX, la definizione degli input e degli output e l'esecuzione della sessione del modello per ottenere i risultati. Notano che il codice può essere modificato per supportare più output, rendendolo una soluzione flessibile per diversi tipi di modelli. Infine, il relatore tocca l'aspetto del packaging dei modelli ONNX, spiegando come possono essere raggruppati insieme al file jar contenente il codice, eliminando la necessità di connettersi a endpoint esterni o scaricare file da fonti diverse.

  • 00:25:00 In questa sezione, il relatore discute un esempio di inferenza di apprendimento automatico in Flink utilizzando il classico problema di classificazione delle cifre scritte a mano, noto come MNIST. Mostrano il modello PyTorch utilizzato per classificare gli array di pixel 28x28 e come può essere convertito in un grafico ONNX da utilizzare in Flink, utilizzando lo stesso approccio di dimensionamento batch di prima. L'oratore discute quindi un altro esempio di apprendimento automatico che utilizza trasformatori in PNL, in particolare una versione più piccola di BERT, che è stata pre-addestrata su un vocabolario di parole. Il modello del trasformatore viene utilizzato per prevedere il sentimento, la traduzione e altre attività di parole e può essere ulteriormente addestrato per nuove attività di previsione in Flink.

  • 00:30:00 In questa sezione, il relatore mostra la libreria Hugging Face Transformers, che consente di importare facilmente modelli pre-addestrati e trasferire l'apprendimento in Python. Sebbene questi modelli possano tendere a essere grandi, la libreria include funzioni di ottimizzazione e quantizzazione per migliorare le prestazioni. Tuttavia, è importante notare che le fasi di pre-elaborazione, come la tokenizzazione, non fanno ancora parte del grafico e potrebbero non essere accessibili in scala. Il relatore sottolinea inoltre i vantaggi di sfruttare tutte le capacità del linguaggio Scala in Flink, separando le dipendenze di formazione dall'inferenza della produzione e disaccoppiando efficacemente i due pezzi. Nel complesso, mentre ci sono alcuni svantaggi, come le dimensioni del modello e le sfide di pre-elaborazione, il metodo offre vantaggi in termini di sfruttamento delle capacità di Flink e distribuzione in un file JAR.

  • 00:35:00 In questa sezione, il relatore nota che quando si utilizza l'inferenza di machine learning in Flink con ONNX, ci sono alcune considerazioni importanti da tenere a mente. Uno è un'attenta gestione della memoria quando si ha a che fare con modelli di grandi dimensioni, come i modelli di trasformatori che possono occupare centinaia di megabyte. Inoltre, l'ottimizzazione in batch e l'accelerazione hardware, come l'uso di GPU, possono influire sulle prestazioni. La pre-elaborazione può essere eseguita con grafici ONNX personalizzati, ma ciò richiede un lavoro aggiuntivo e non è così semplice come mostrato in precedenza. L'oratore sottolinea che ONNX consente l'apprendimento automatico in tempo reale in Flink e separa bene il codice di formazione Python dal codice di produzione Scala, il che può essere una vittoria per i data scientist. Il relatore affronta anche domande sull'utilizzo di ONNX con modelli basati su TensorFlow e sul motivo per cui ONNX è stato scelto rispetto all'API Java, PyTorch o TensorFlow.

  • 00:40:00 In questa sezione, il relatore parla di ONNX come schema indipendente dal framework per il grafico che è anche indipendente dalla lingua. Il relatore ha affermato che una delle proprietà interessanti dell'utilizzo di ONNX è che se si utilizza PyTorch e si desidera passare a TensorFlow, è possibile utilizzare ONNX come "veicolo" per spostarsi tra i due framework, il che mostra la flessibilità del framework. Il pubblico ha chiesto se il relatore avesse sperimentato i modelli TensorFlow con il progetto Scala di TensorFlow, al quale ha risposto negativamente. Infine, il relatore invita il pubblico a visitare il repository ONNX, creare un problema su GitHub o contattarlo su LinkedIn per domande, in particolare sulle assunzioni.
 

Migliorare l'esperienza di acquisto online con ONNX



Migliorare l'esperienza di acquisto online con ONNX

Questo video illustra come le aziende di e-commerce utilizzano l'intelligenza artificiale per creare approfondimenti di grande impatto che differenziano le vittorie e le sconfitte nello spazio di vendita al dettaglio online. L'oratore fornisce un esempio di Bazaar Voice, la più grande rete di marchi e rivenditori che fornisce oltre 8 miliardi di recensioni totali e di come utilizzano la corrispondenza dei prodotti per condividere le recensioni. Il relatore descrive quindi come hanno sviluppato un modello di machine learning in Python, lo hanno esportato in formato ONNX e lo hanno distribuito a una funzione serverless utilizzando un ambiente nodo per eseguire l'inferenza su un runtime ONNX. Questa soluzione consente l'abbinamento ad alta velocità di centinaia di milioni di prodotti in migliaia di cataloghi di clienti mantenendo bassi i costi, con conseguenti risparmi significativi e milioni di recensioni extra per marchi e rivenditori. Il relatore conclude invitando gli spettatori a esplorare altri modi di utilizzare le capacità di ONNX e condividere i loro casi d'uso per i futuri progressi tecnologici.

  • 00:00:00 In questa sezione, apprendiamo che la digitalizzazione del commercio ha portato le società di e-commerce a possedere la scala di dati che raccolgono e utilizzano l'intelligenza artificiale per creare approfondimenti di grande impatto come elemento di differenziazione tra vincere e perdere nello spazio di vendita al dettaglio online. Un esempio è il miliardo di acquirenti al mese per Bazaar Voice, la più grande rete mondiale di marchi e rivenditori che fornisce oltre 8 miliardi di recensioni totali e come la condivisione delle recensioni sia alimentata dalla corrispondenza dei prodotti. La corrispondenza dei prodotti, la funzione principale del modello di apprendimento automatico creato, viene eseguita confrontando identificatori univoci, ma ogni mese vengono eseguite manualmente oltre un milione di corrispondenze di prodotti. La soluzione è un modello scikit-learn costruito con Python e viene esportato in formato ONNX, avendo implementato la soluzione più leggera ed economica pur mantenendo le prestazioni.

  • 00:05:00 In questa sezione, il relatore discute varie opzioni per implementare modelli di machine learning per un'esperienza di acquisto online e conclude che le funzioni serverless sono l'opzione migliore grazie al loro basso costo e alla loro facile implementazione. Spiegano quindi come hanno sviluppato un modello in Python, lo hanno esportato in formato ONNX e lo hanno distribuito a una funzione serverless utilizzando un ambiente nodo per eseguire l'inferenza su un runtime ONNX. La modularità di questa soluzione consente di collegarla facilmente a qualsiasi servizio e, utilizzando metriche come la memoria utilizzata e il tempo di esecuzione, sono stati in grado di trovare la dimensione di memoria ottimale per garantire le migliori prestazioni mantenendo bassi i costi. Mentre i limiti delle dimensioni della distribuzione e il lavoro entro i limiti di timeout sono considerazioni, la potenza del runtime ONNX e ONNX in combinazione con le funzioni serverless ha consentito la corrispondenza ad alta velocità di centinaia di milioni di prodotti in migliaia di cataloghi client, con conseguenti risparmi significativi sui costi e 15 milioni recensioni extra per marchi e rivenditori.

  • 00:10:00 In questa sezione, il relatore conclude il video invitando gli spettatori a esplorare altri modi di utilizzare le funzionalità di ONNX e condividere i loro casi d'uso. Come qualcuno che lavora attivamente in questo spazio, l'oratore è incuriosito e costretto da dove queste tecnologie potrebbero portarci in futuro.
 

DSS online n. 4: implementazione del deep learning end-to-end con ONNX


DSS online n. 4: implementazione del deep learning end-to-end con ONNX

Questo video discute le sfide dell'implementazione del deep learning end-to-end, inclusa la gestione di linguaggi, framework, dipendenze e variabilità delle prestazioni diversi, nonché l'attrito tra i team e i lock-in del formato proprietario. L'Open Neural Network Exchange (ONNX) viene introdotto come formato basato su buffer di protocollo per la serializzazione del deep learning. Supporta i principali framework di deep learning e fornisce un artefatto autonomo per l'esecuzione del modello. ONNX ML è anche discusso come parte della specifica ONNX che fornisce supporto per la pre-elaborazione tradizionale del machine learning. I limiti di ONNX sono riconosciuti, ma è visto come un progetto in rapida crescita con un forte supporto da parte di grandi organizzazioni che offre una vera portabilità attraverso diverse dimensioni di linguaggi, framework, runtime e versioni.

  • 00:00:00 In questa sezione, Nick Pentreath, ingegnere capo presso IBM, introduce l'implementazione del deep learning end-to-end con Open Neural Network Exchange. Ci sono molti passaggi nel flusso di lavoro di machine learning, tra cui l'analisi dei dati, la pre-elaborazione per i modelli, l'addestramento del modello, la distribuzione in applicazioni reali e la sua manutenzione e monitoraggio. Pentreath discute di come il flusso di lavoro si estende a diversi team e strumenti, rendendo essenziale disporre di un'infrastruttura al servizio del modello.

  • 00:05:00 In questa sezione, il relatore discute le tre domande cruciali per la distribuzione del machine learning: cosa stiamo implementando, dove stiamo implementando e come stiamo implementando. La distribuzione di un modello di machine learning comporta l'incorporazione dell'intera serie di passaggi che precedono il modello addestrato, incluse le trasformazioni, l'estrazione delle funzionalità e la pre-elaborazione. È imperativo applicare le stesse fasi di pre-elaborazione nell'ambiente live utilizzate durante l'addestramento, poiché eventuali differenze possono portare a una distorsione dei dati che può portare a risultati catastrofici. Il relatore osserva che anche il deep learning necessita ancora di un'attenta pre-elaborazione e ingegneria delle funzionalità e sottolinea le sfide che derivano dalla standardizzazione della pre-elaborazione. Queste sfide includono diversi layout di dati e modalità di colore tra diversi framework che possono avere impatti sottili ma significativi sulle previsioni.

  • 00:10:00 In questa sezione, il video discute le sfide quando si tratta di implementare una pipeline di deep learning end-to-end, inclusa la gestione e il collegamento di linguaggi, framework, dipendenze e variabilità delle prestazioni diversi, nonché l'attrito tra i team , la mancanza di standardizzazione tra framework open source e lock-in di formati proprietari. Sebbene l'implementazione basata su container porti vantaggi significativi, richiede comunque una sorta di framework di servizio e non risolve il problema della standardizzazione. Ecco perché il video suggerisce di utilizzare standard aperti per esportare modelli da diversi framework in un formato standardizzato, che fornisce una separazione delle preoccupazioni tra il produttore del modello e il consumatore del modello, consentendo loro di concentrarsi sui rispettivi compiti senza preoccuparsi dei problemi di implementazione o dove il modello è venuto da.

  • 00:15:00 In questa sezione, il relatore discute l'importanza dell'open source e degli standard aperti nella distribuzione del deep learning. Spiegano i vantaggi di avere un unico stack e un set standardizzato di strumenti per l'analisi e la visualizzazione e sottolineano il ruolo fondamentale della governance aperta nel fornire visibilità ed evitare la concentrazione del controllo. Il relatore introduce quindi l'open neural network exchange (ONNX), un formato basato su buffer di protocollo per definire la serializzazione dei modelli di machine learning con particolare attenzione al deep learning. ONNX supporta i principali framework di deep learning come PyTorch, Caffe, TensorFlow, Keras, Apple Core ML e MXNet e fornisce un artefatto autonomo per l'esecuzione del modello.

  • 00:20:00 In questa sezione, il relatore discute di come ONNX ML (Machine Learning) faccia parte della specifica ONNX che fornisce supporto per la pre-elaborazione del machine learning tradizionale, insieme a tipi aggiuntivi come sequenze e mappe. ONNX comprende un'ampia comunità e un ecosistema di esportatori scritti per vari framework di machine learning tradizionali, nonché modelli come modelli lineari, insiemi di alberi e potenziamento del gradiente. Per rappresentare tutto questo, ONNX funge da standard che si colloca tra i produttori di modelli e i consumatori. Lo zoo del modello ONNX contiene una serie di modelli ampiamente utilizzati e standard in diversi domini, tra cui l'analisi delle immagini, la classificazione, la segmentazione e l'elaborazione del linguaggio naturale, tutti rappresentati nei formati ONNX. Il runtime ONNX, un progetto open source di Microsoft, è un runtime completamente conforme che supporta sia il core deep learning che gli operatori ONNX ML.

  • 00:25:00 In questa sezione, il relatore discute i limiti di ONNX, in particolare in termini di alcune funzionalità mancanti come l'elaborazione delle immagini, l'elaborazione avanzata delle stringhe e i modelli di clustering di hashing. Inoltre, ci sono problemi quando si tratta di esportare pipeline ibride da framework come Spark ML, e questo richiede un po' di codice personalizzato. Tuttavia, ONNX è un progetto attivo in rapida crescita e gode di un forte sostegno da parte di grandi organizzazioni. Offre una vera portabilità attraverso diverse dimensioni di linguaggi, framework, runtime e versioni, che risolve un punto dolente significativo per l'implementazione di pipeline di deep learning in modo aperto e portatile. ONNX è open source e open governance, quindi chiunque può essere coinvolto.
 

ONNX e ONNX Runtime con Vinitra Swamy e Pranav Sharma di Microsoft



ONNX e ONNX Runtime con Vinitra Swamy e Pranav Sharma di Microsoft

Il video illustra il formato ONNX (Open Neural Network Exchange), creato per rendere i modelli interoperabili ed efficienti nella serializzazione e nel controllo delle versioni. ONNX è costituito da un livello di rappresentazione intermedio, specifiche dell'operatore e supporta diversi tipi di dati. Il runtime ONNX, implementato in C++ e assembler, offre compatibilità con le versioni precedenti ed è estendibile tramite provider di esecuzione, operatori personalizzati e ottimizzatori di grafici. L'API offre supporto per piattaforme, linguaggi di programmazione e provider di esecuzione. Gli utenti possono creare sessioni, ottimizzare i modelli e serializzarli per un utilizzo futuro. I relatori forniscono una dimostrazione della versatilità e dell'efficienza di ONNX Runtime, con la capacità di funzionare su dispositivi Android.

  • 00:00:00 In questa sezione, Venetra del team di ingegneri ONNX presenta ONNX, l'Open Neural Network Exchange, che è uno standard interoperabile per i modelli AI. Spiega che Microsoft ha integrato l'apprendimento automatico in quasi ogni aspetto della propria suite di prodotti, da HoloLens a Xbox a Skype, il che ha portato a varie sfide di implementazione su larga scala. ONNX è stato creato per ottimizzare l'inferenza efficiente standardizzando il processo di distribuzione del modello per diversi framework e obiettivi di distribuzione. L'obiettivo è supportare modelli da molti framework implementando uno standard e fornire un'esperienza coerente a tutti gli utenti, siano essi data scientist, prestatori di hardware, autori di servizi o ingegneri ML.

  • 00:05:00 In questa sezione, Vinitra Swamy e Pranav Sharma parlano di ONNX, un consorzio di partner fondatori che include Microsoft, Facebook, Amazon, NVIDIA e Intel, tra gli altri. ONNX è costituito da un livello di rappresentazione intermedio e da una specifica completa dell'operatore che definisce gli operatori in modo standard nonostante i diversi insiemi di operatori di ciascun framework. Il codice per convertire i modelli in ONNX non è lungo e la conversione potrebbe far risparmiare molto agli utenti in termini di inferenza e interoperabilità. Inoltre, ONNX dispone di principi di progettazione che consentono l'interoperabilità sia per i modelli di deep learning che di machine learning. Gli utenti possono iniziare con ONNX accedendo allo zoo dei modelli ONNX, ai servizi di creazione dei modelli o ai convertitori.

  • 00:10:00 La sezione discute i componenti e la progettazione di ONNX, un formato modello creato per renderlo interoperabile e compatibile con le versioni precedenti, supportando allo stesso tempo serializzazione e controllo delle versioni efficienti. Il formato consiste in un modello, un grafico computazionale con nodi e una specifica dell'operatore. I tipi di dati supportati includono i tipi tensoriali standard e due tipi non tensoriali, sequenze e mappe. Le specifiche dell'operatore includono input, output, vincoli ed esempi. Viene fornito un esempio di specifica dell'operatore per l'operatore relu.

  • 00:15:00 In questa sezione del video, Vinitra Swamy e Pranav Sharma discutono delle diverse versioni e operatori supportati nel formato ONNX (Open Neural Network Exchange). Spiegano che ONNX ha oltre 156 operazioni specifiche di deep learning e 18 operazioni tradizionali di machine learning che sono interoperabili tra i diversi operatori. Inoltre, gli utenti possono creare operazioni personalizzate per i propri modelli utilizzando il framework ONNX. Sottolineano inoltre l'importanza del controllo delle versioni, che viene eseguito su tre diversi livelli: livello di rappresentazione intermedio, offset e singoli operatori. Infine, discutono ONNX Runtime, che è un motore di inferenza open source e ad alte prestazioni per ONNX. È multipiattaforma e progettato per essere compatibile con le versioni precedenti, rendendolo adatto per l'implementazione in ambienti di produzione.

  • 00:20:00 In questa sezione, l'attenzione è rivolta all'architettura di ONNX Runtime e al modo in cui un modello viene eseguito al suo interno. La compatibilità con le versioni precedenti e le prestazioni erano le principali preoccupazioni per ONNX Runtime, che è implementato in C++ e alcune parti in assembler. ONNX Runtime supporta gli acceleratori hardware utilizzando qualcosa chiamato "provider di esecuzione". L'algoritmo di partizionamento consente l'esecuzione del modello in una fase di esecuzione ibrida e i singoli provider di esecuzione possono ottimizzare ulteriormente i sottografi per prestazioni migliori. Infine, ONNX Runtime funge da interprete passando attraverso tutti i nodi del grafico per eseguire il modello.

  • 00:25:00 In questa sezione, i relatori discutono le modalità di esecuzione in ONNX e ONNX Runtime, che sono sequenziali e parallele. Gli utenti possono controllare il numero di thread che desiderano configurare per ciascuna modalità di esecuzione e i risultati vengono inviati tramite l'API. I relatori notano che dispositivi diversi potrebbero non condividere la stessa memoria, quindi i nodi di copia della memoria vengono inseriti in base alle ottimizzazioni eseguite. Parlano anche del processo di partizionamento del grafico, in cui gli utenti devono specificare un elenco prioritario di provider di esecuzione in cui eseguire il grafico. Tuttavia, nella prossima versione, ci sarà una nuova fase chiamata partizionamento intelligente, in cui ONNX scoprirà il modo migliore per posizionare il grafico e come eseguirlo in modo efficiente. I relatori toccano anche i fornitori di esecuzione, che sono astrazioni software in cima agli acceleratori hardware. Due tipi di provider di esecuzione sono basati su kernel e basati su runtime e quest'ultimo è una scatola nera in cui il provider di esecuzione esegue parti del grafico per noi.

  • 00:30:00 In questa sezione, i relatori discutono i principi di progettazione di ONNX Runtime, sottolineando la sua estensibilità attraverso opzioni come provider di esecuzione, operatori personalizzati e ottimizzatori di grafici. Forniscono inoltre una matrice di piattaforme supportate, linguaggi di programmazione e provider di esecuzione, tra cui Tensor RT, Direct ML e OpenVINO. I relatori spiegano i costrutti di alto livello di una sessione e il modo thread-safe per creare l'oggetto sessione prima di chiamare la funzione run. Discutono anche di come il tempo necessario per ottimizzare un modello dipenda dalle dimensioni del modello e dalle sue opportunità di ottimizzazione.

  • 00:35:00 In questa sezione, i relatori discutono la creazione di sessioni e l'uso di opzioni di esecuzione e opzioni di sessione, con la possibilità di serializzare il modello ottimizzato per un uso futuro. Spiegano anche il processo di registrazione degli operatori personalizzati, con la possibilità di utilizzare Python per coloro che preferiscono non utilizzare C#. La versione ONNX Runtime 1.0 è stata rilasciata, garantendo l'assenza di interruzioni delle API in futuro, con
    compatibilità che risale a CentOS 7.6. Viene discusso anche ONNX Go Live Tool, uno strumento open source per la conversione e l'ottimizzazione dei modelli per prestazioni ottimali. La sezione si conclude con esempi di servizi Microsoft che utilizzano ONNX, tra cui un aumento delle prestazioni di 14 volte nel modello di determinazione mancante di Office e un aumento delle prestazioni di 3 volte nel modello di riconoscimento ottico dei caratteri utilizzato nei servizi cognitivi.

  • 00:40:00 In questa sezione, i relatori discutono dell'API di runtime ONNX, che è in modalità di anteprima e consente di eseguire il runtime ONNX su dispositivi Android. Menzionano anche il supporto alla formazione, che è attualmente esplorativo e mira a vedere se il runtime ONNX può essere utilizzato per ottimizzare i modelli già creati. I relatori danno quindi una dimostrazione dell'utilizzo del runtime ONNX su un modello di rilevamento di oggetti YOLOv3, dimostrando che il runtime ONNX è versatile, efficiente e utile per i casi che richiedono buone prestazioni o devono supportare un modello in diversi framework.

  • 00:45:00 In questa sezione del video, i relatori dimostrano ONNX Runtime identificando le immagini e le rispettive classi con un modello ampio e complicato. Presentano anche una rapida demo su Onnx Ecosystem Converter, che consente agli utenti di caricare e convertire modelli da diversi framework in Jupyter Notebook. Convertono un modello di classificazione dei documenti da CoreML, il framework di machine learning di Apple, a ONNX e ne convalidano l'accuratezza. Notano che è un costo una tantum convertire un modello in ONNX ed è un processo efficiente.

  • Ringraziano il pubblico per l'ascolto ed esprimono il loro entusiasmo per continuare con la sessione di domande e risposte.
 

Jan-Benedikt Jagusch Christian Bourjau: Rendere le applicazioni di Machine Learning veloci e semplici con ONNX



Jan-Benedikt Jagusch Christian Bourjau: Rendere le applicazioni di Machine Learning veloci e semplici con ONNX

In questo video sull'apprendimento automatico e la distribuzione, i relatori discutono delle sfide legate alla messa in produzione dei modelli, in particolare la difficoltà di decapaggio e distribuzione dei modelli. Introducono ONNX, un formato di file universale per l'esportazione di modelli di machine learning, e spiegano come può aiutare a separare l'addestramento e l'inferenza, rendendo l'implementazione più rapida ed efficiente. Forniscono una demo dal vivo utilizzando scikit-learn, che spiega come convertire una pipeline di machine learning in formato ONNX. Discutono anche dei limiti dei container Docker per la distribuzione di modelli di machine learning e sottolineano i vantaggi dell'utilizzo di ONNX. Toccano l'argomento della crittografia dei modelli per una maggiore sicurezza e affrontano il problema dell'usabilità di ONNX, che è ancora un ecosistema giovane con alcuni messaggi di errore criptici.

  • 00:00:00 In questa sezione del video, i relatori discutono dell'importanza di disaccoppiare l'addestramento del modello dall'inferenza utilizzando ONNX. I relatori osservano che il 55% delle aziende che hanno iniziato con l'apprendimento automatico non è riuscito a mettere in produzione i propri modelli e sostengono che l'automazione dei processi aziendali mettendo in produzione i modelli è dove risiede la maggior parte del valore. Tuttavia, notano anche che l'implementazione dei modelli è più complicata di quanto possa sembrare inizialmente, motivo per cui discuteranno di come ONNX può aiutare a superare questa sfida. Inoltre, illustrano il processo di avvio, sviluppo e collisione di un progetto di machine learning con i requisiti di distribuzione.

  • 00:05:00 In questa sezione, i relatori discutono delle sfide legate alla messa in produzione di modelli di machine learning, concentrandosi in particolare sulle difficoltà di decapaggio e distribuzione del modello. Esplorano i problemi che sorgono nell'utilizzo di un pacchetto incompiuto, come un pickle, per trasferire il modello e come devono essere installati gli ambienti e le dipendenze corretti per caricare correttamente il modello in produzione. Affrontano anche il problema dei modelli troppo lenti per l'uso in produzione, portando a modifiche e ottimizzazioni del modello. Infine, discutono della necessità di un formato di file universale per esportare il modello, semplificando l'utilizzo di qualsiasi runtime per la distribuzione.

  • 00:10:00 In questa sezione, i relatori discutono il concetto di disaccoppiamento dell'addestramento dal tempo di previsione utilizzando strumenti per l'addestramento per esportare un modello di apprendimento automatico in un formato di file universale, come ONNX , al fine di liberare gli strumenti utilizzati per l'implementazione . Spiegano che ONNX è "il modo standardizzato per descrivere l'intero modello, inclusa la progettazione delle funzionalità e per memorizzarlo in un formato binario". Notano inoltre che ONNX è una buona opzione per coloro che hanno diversi tipi di modelli di apprendimento automatico, non solo reti neurali. Tuttavia, sottolineano che per utilizzare ONNX , un modello di apprendimento automatico deve essere descritto come un grafico computazionale con nodi che sono operatori e bordi che sono dati che scorrono attraverso il grafico e che ONNX è fortemente tipizzato con informazioni sul tipo e forma.

  • 00:15:00 In questa sezione, i relatori discutono le specifiche di ONNX , che definisce un insieme di operatori che devono essere utilizzati per garantire la compatibilità con il formato. Al momento di questo discorso, c'erano 175 operatori, compresi quelli più complicati come i regressori lineari e i veri regressori d'insieme. ONNX specifica anche i dati necessari per archiviare ogni operatore, rendendo l'intero file autonomo senza bisogno di altre dipendenze. I relatori sottolineano che qualsiasi cosa rappresentabile in un grafico aciclico diretto può essere convertito in ONNX, non solo in modelli di machine learning. Inoltre, l'intera pipeline può essere convertita in ONNX , purché ogni fase possa essere rappresentata come un proprio grafico aciclico diretto.

  • 00:20:00 In questa sezione, i relatori dimostrano come creare un semplice imputer e regressor utilizzando operazioni numpy, che possono essere facilmente definite come un grafico di operatori onyx. Sostituendo ogni nodo nel grafico scikit-learn con un grafico stesso, scikit-learn può essere convertito in un formato onix. Mentre i framework di machine learning consolidati come PyTorch, TensorFlow, Light GBM e XGBoost dispongono già di convertitori disponibili, è necessario scrivere convertitori personalizzati per stimatori e trasformatori personalizzati. Tuttavia, la curva di apprendimento è ripida ma fattibile ed è fondamentale che il codice personalizzato si inserisca in un mazzo. I relatori forniscono anche una demo dal vivo utilizzando i dati di addestramento e una pipeline di scikit-learn, che viene poi convertita in un formato onix.

  • 00:25:00 In questa sezione, Jan-Benedikt Jagusch e Christian Bourjau spiegano che ONNX è fortemente tipizzato e richiede informazioni iniziali dai dati forniti. Per semplificare questo processo, convertono facilmente i tipi da un frame di dati Panda mappando i tipi di dati Panda ai tipi di dati ONNX. Il modello ONNX è quindi completamente autonomo, estratto dalla logica di previsione della pipeline. Il team di ingegneria dei dati deve solo scaricarlo in un file e utilizzare il runtime ONNX per analizzare i dati, che è l'unica dipendenza indipendentemente dal modello di dati serializzato da TensorFlow, Python o altrove. Il runtime ONNX fornisce collegamenti Python che migliorano la velocità di previsione fino a un fattore dieci. Anche la velocità di previsione a riga singola è una priorità poiché è essenziale negli ambienti online, impiegando solo 170 millisecondi, che è simile a Scikit-learn.

  • 00:30:00 In questa sezione, i relatori discutono i vantaggi dell'utilizzo di onyx per separare l'ambiente di formazione dall'ambiente di distribuzione. Spiegano che esportando i modelli nel formato di file universale di ONNX , gli utenti possono interpretare i loro modelli utilizzando un runtime che fornisce le caratteristiche prestazionali necessarie per la distribuzione nel mondo reale. I relatori affrontano anche una questione sull'utilizzo dei container Docker, evidenziandone i limiti in termini di scalabilità e flessibilità. Raccomandano di esaminare onyx per la sua capacità di fornire sia prestazioni che flessibilità, con la possibilità di archiviare modelli oltre a migliorare l'implementazione.

  • 00:35:00 In questa sezione, i relatori discutono i limiti dell'utilizzo di Docker per la distribuzione di modelli di machine learning e sottolineano invece i vantaggi della serializzazione dei modelli su ONNX. Sebbene Docker possa funzionare per fornire un'API REST e in alcuni casi, l'artefatto prodotto include molti livelli, rendendo difficile caricare la formulazione matematica del modello. D'altra parte, la serializzazione del modello su ONNX fornisce una pura essenza del modello che è leggibile e facile da caricare. I relatori avvertono che sebbene ONNX abbia molti vantaggi, non è una soluzione perfetta per tutti i casi d'uso e richiede un certo sovraccarico per convertire stimatori e trasformatori personalizzati. Inoltre, l'ecosistema è ancora relativamente nuovo e gli utenti potrebbero dover dedicare del tempo a risolvere i problemi o leggere i problemi di GitHub. Infine, i relatori menzionano brevemente la possibilità di implementare modelli ONNX su GPU, cosa tecnicamente possibile con il runtime ONNX predefinito.

  • 00:40:00 In questa sezione, i relatori discutono della possibilità di crittografare i modelli ONNX per proteggerli dall'uso non intenzionale o dal reverse engineering. Dicono che mentre è possibile leggere i coefficienti dal modello, se è complesso, diventa difficile poiché ONNX non conserva le informazioni sull'operatore e sulla pipeline. ONNX fornisce sicurezza mediante l'offuscamento in una certa misura, ma non è crittografato. Tuttavia, menzionano che è possibile compilare il file fino al codice macchina per l'offuscamento e ulteriore sicurezza. I relatori affrontano anche la questione dell'inserimento dei passaggi di pre-elaborazione che hanno I/O rispetto al database, il che richiederebbe che tutti i dati siano nel database per l'istanziatore all'interno del grafico ONNX. Infine, discutono del problema dell'usabilità di Onyx, poiché i messaggi di errore possono essere criptici, ma sono ottimisti sul fatto che l'ecosistema migliorerà, data la sua giovane età e il sostegno aziendale.
 

ONNX Runtime Azure EP per l'inferenza ibrida su Edge e Cloud



ONNX Runtime Azure EP per l'inferenza ibrida su Edge e Cloud

Il team ONNX Runtime ha rilasciato il suo primo passo nel mondo ibrido consentendo agli sviluppatori di utilizzare un'unica API sia per l'edge che per il cloud computing con Azure EP, che elimina i problemi di connettività dei dispositivi e consente agli sviluppatori di passare al modello cloud che hanno ottimizzato , risparmiando sui costi e riducendo la latenza. Questa nuova funzionalità consente agli sviluppatori di aggiornare la logica dell'applicazione e scegliere quale percorso intraprendere tramite Azure EP, offrendo più capacità e potenza. Il team dimostra la distribuzione di server per bambini e modelli di rilevamento degli oggetti, nonché come testare l'endpoint e configurare semplicemente Onnx Runtime Azure. I relatori discutono anche della possibilità di passare dall'elaborazione locale a quella remota e dei potenziali casi d'uso, compresi i modelli con prestazioni inferiori o superiori. ONNX Runtime Azure EP può essere precaricato e configurato facilmente con i pacchetti necessari per la distribuzione, contribuendo alla facilità d'uso del software.

  • 00:00:00 In questa sezione, Azure EP viene presentato come il primo passo del team di runtime ONNX nel mondo ibrido per consentire agli sviluppatori di utilizzare un'unica API sia per l'edge che per il cloud computing. In questo modo, gli sviluppatori non dovranno preoccuparsi della connettività del dispositivo e potranno passare al modello cloud che hanno ottimizzato e che stanno utilizzando lì, risparmiando sui costi e sulla latenza. Questa nuova funzionalità consente agli sviluppatori di aggiornare la logica dell'applicazione e scegliere quale percorso intraprendere tramite Azure EP, offrendo loro maggiori capacità e potenza. Nel complesso, il team di runtime ONNX è entusiasta di vedere cosa viene dalla comunità degli sviluppatori e come viene implementata questa nuova funzionalità.

  • 00:05:00 In questa sezione, Randy Schrey, che ha contribuito alla nuova versione 1.14 di ONNX Runtime (ORT), mostra alcune delle fantastiche funzionalità fornite con la versione. Innanzitutto, mostra un endpoint chiamato su Azure Machine Learning, che funge da lato server per i modelli. Discute anche del server Triton utilizzato per fornire endpoint, diviso da Nvidia, e delle sue prestazioni e stabilità impressionanti. Schrey mostra come distribuire un server per bambini e fornisce una panoramica di come appare, inclusa la specifica del nome, della versione e della posizione del modello. Evidenzia inoltre la struttura delle cartelle che deve essere seguita durante la distribuzione di un server Triton e mostra il file di configurazione che descrive come il modello ottiene l'input e l'output.

  • 00:10:00 In questa sezione, il relatore discute la struttura della propria cartella per la distribuzione dei modelli di rilevamento degli oggetti e spiega come il server Triton può trovare il modello per la distribuzione. Rispondono anche a una domanda sull'utilizzo di modelli serviti su Azure e menzionano le attuali limitazioni di Trtis su Azure, affermando che supporta solo il server Triton come lato server. Il relatore discute quindi il test dell'endpoint, il processo per l'installazione semplice di Onnx Runtime Azure e come possono usare Onnx Runtime Azure per l'inferenza ibrida su Edge e Cloud per lavorare con l'endpoint online dal lato client. Il relatore fornisce uno script e spiega alcune delle configurazioni necessarie per caricare e utilizzare un modello utilizzando Onnx Runtime Azure.

  • 00:15:00 In questa sezione, i relatori dimostrano come utilizzare ONNX Runtime Azure EP per l'inferenza ibrida su edge e cloud. Mostrano come configurare la chiave di autenticazione ed eseguire l'inferenza, con la possibilità di passare dall'elaborazione locale a quella remota modificando un singolo parametro nel codice. Discutono potenziali casi d'uso, come la scelta tra modelli con prestazioni inferiori e superiori, e notano che mentre l'attuale versione di anteprima richiede il server di inferenza Triton, il piano prevede di supportare tutti i tipi di server di distribuzione in futuro.

  • 00:20:00 In questa sezione viene spiegato che ONNX Runtime Azure EP può essere precaricato e facilmente configurato con i pacchetti necessari per il deployment. Questa caratteristica contribuisce alla facilità di distribuzione e utilizzo del software.
 

INT8 Inferenza di modelli addestrati con riconoscimento della quantizzazione utilizzando ONNX-TensorRT




INT8 Inferenza di modelli addestrati con riconoscimento della quantizzazione utilizzando ONNX-TensorRT

Dheeraj Peri, un ingegnere del software di deep learning presso NVIDIA, spiega le basi della quantizzazione e come TensorRT supporta le reti quantizzate attraverso varie fusioni. Si concentrano sui modelli addestrati utilizzando il framework TensorFlow 2.0 e su come eseguire la quantizzazione post-addestramento (PTQ) e l'addestramento consapevole della quantizzazione (QAT). Viene spiegato il processo di distribuzione di un modello addestrato utilizzando il toolkit di quantizzazione Nvidia TF2 con ONNX-TensorRT e vengono presentati i risultati di accuratezza e latenza per vari modelli ResNet. Nel complesso, viene dimostrato il flusso di lavoro QAT end-to-end dall'implementazione di TensorFlow a TensorRT tramite ONNX-TensorRT.

  • 00:00:00 In questa sezione, Dheeraj, un ingegnere del software di deep learning presso NVIDIA, discute le basi della quantizzazione e come TensorRT supporta le reti quantizzate attraverso varie fusioni. Spiega che la quantizzazione è il processo di conversione di valori continui in un insieme discreto di valori utilizzando tecniche di ridimensionamento lineare o non lineare. Si concentrano sui modelli addestrati utilizzando il framework TensorFlow 2.0 e su come eseguire la quantizzazione post-addestramento (PTQ) e l'addestramento consapevole della quantizzazione (QAT). Dhiraj evidenzia anche le differenze tra il toolkit di quantizzazione di NVIDIA e il toolkit mod TF, in cui i nodi sono posizionati in modo diverso nei livelli di convoluzione.

  • 00:05:00 In questa sezione viene spiegato il processo di distribuzione di un modello addestrato utilizzando il toolkit di quantizzazione Nvidia TF2 con ONNX-TensorRT. Il processo prevede la quantizzazione del modello TensorFlow 2.0 pre-addestrato con il toolkit Nvidia, la messa a punto per un numero limitato di epoche per simulare il processo di quantizzazione e quindi la conversione del modello in un formato ONNX. Il grafico ONNX viene quindi utilizzato per generare il motore TensorRT utilizzando l'API TensorRT. Vengono presentati i risultati di accuratezza e latenza per vari modelli ResNet e si osserva che i modelli QAT (quantization-aware-trained) mostrano una migliore precisione rispetto ai modelli di quantizzazione post-training (PTQ) durante l'inferenza. I modelli QAT mostrano una latenza simile rispetto ai modelli PTQ ma dipende dal posizionamento dei nodi QDQ e dalle loro fusioni. Nel complesso, viene dimostrato il flusso di lavoro QAT end-to-end dall'implementazione di TensorFlow a TensorRT tramite ONNX-TensorRT.
 

Quantizzazione pratica post training di un modello ONNX



Quantizzazione pratica post training di un modello ONNX

Il video illustra come implementare la quantizzazione per ridurre le dimensioni di un modello TensorFlow a un modello quantizzato ONNX. Il modello ONNX è notevolmente più piccolo e può essere eseguito più velocemente su una CPU. L'autore fornisce frammenti di codice e istruzioni su come implementare la quantizzazione dinamica e su come controllare la velocità della CPU.

Il video mostra il processo di quantizzazione di un modello di machine learning per renderlo più veloce e leggero, pur riconoscendo che potrebbe portare a un calo della precisione. I modelli ONNX e TensorFlow vengono confrontati con un modello quantizzato, quest'ultimo risultato essere più veloce e leggero. Tuttavia, il modello quantizzato non beneficia tanto dell'uso delle GPU quanto gli altri modelli. L'accuratezza del modello quantizzato viene quindi valutata e si scopre che ha solo un leggero calo. Viene discusso anche il processo di visualizzazione dei modelli ONNX, con la dimostrazione dell'uso dell'app Loot Rodas Neutron. Il processo complessivo si traduce in una riduzione delle dimensioni del modello da un gigabyte a 83 megabyte con una perdita minima di precisione.

Motivazione: