Imparare ONNX per il trading - pagina 5

 

ONNX: passato, presente e futuro - Jim Spohrer, IBM e Prasanth Pulavarthi, Microsoft



ONNX: passato, presente e futuro - Jim Spohrer, IBM e Prasanth Pulavarthi, Microsoft

Il video "ONNX: Past, Present, and Future" presenta Jim Spohrer di IBM e Prasanth Pulavarthi di Microsoft che discutono della crescita e del futuro del framework AI open source ONNX. Sottolineano l'importanza di standardizzare l'implementazione dei modelli di intelligenza artificiale attraverso il formato di interscambio fornito da ONNX, consentendo un'ottimizzazione senza soluzione di continuità in diversi framework di deep learning. Inoltre, discutono dei recenti sviluppi nella capacità del runtime ONNX di lavorare con vari acceleratori hardware e offrono suggerimenti e risorse per iniziare con ONNX. I relatori rispondono alle domande del pubblico in merito alle capacità di ONNX, all'implementazione commerciale e ai piani di certificazione imminenti, esortando gli spettatori a partecipare alla comunità ONNX.

  • 00:00:00 In questa sezione, Jim Spohrer di IBM e Prasanth Pulavarthi di Microsoft si presentano e forniscono una panoramica del passato, presente e futuro di ONNX, un framework IA open source. ONNX funge da formato di interscambio standardizzato, consentendo a diversi strumenti di interagire e ottimizzare l'inferenza in vari framework di deep learning. I relatori esortano gli spettatori a partecipare alla community ONNX controllando le notizie e iniziando le informazioni sul sito Web ONNX, nonché unendosi alla community su GitHub e Gitter. Evidenziano anche i recenti incontri della comunità virtuale, in cui i partner ONNX hanno discusso i loro progetti e come stanno utilizzando ONNX in modi innovativi.

  • 00:05:00 In questa sezione, i relatori discutono della crescita della comunità ONNX e della sua importanza come formato di interscambio tra numerosi progetti open source nel campo dell'intelligenza artificiale e dell'apprendimento automatico. Evidenziano i progressi della comunità ONNX in termini di richieste pull, contributori, star, fork, articoli pubblicati e zoo modello e incoraggiano più organizzazioni e individui a partecipare. I relatori introducono anche ONNX in Microsoft e il suo utilizzo in vari prodotti, sottolineando la necessità di un formato standardizzato come ONNX nel variegato panorama delle soluzioni AI e ML. Offrono suggerimenti su come utilizzare ONNX e accolgono con favore le domande del pubblico.

  • 00:10:00 In questa sezione, i relatori discutono dei problemi comuni che gli sviluppatori devono affrontare quando tentano di implementare modelli ML in produzione, come l'elevata latenza di inferenza, l'esecuzione di modelli su dispositivi edge e IoT e la necessità di eseguire lo stesso modello su dispositivi diversi hardware e sistemi operativi. Per risolvere questi problemi, i relatori introducono il formato ONNX e il runtime ONNX, che consente agli sviluppatori di rappresentare modelli da vari framework in un formato comune ed eseguirli in modo efficiente su diverse piattaforme e acceleratori. Il servizio vocale di Microsoft viene fornito come esempio di come ONNX ha migliorato l'agilità e le prestazioni nella produzione.

  • 00:15:00 In questa sezione, i relatori discutono di come l'utilizzo del runtime ONNX possa portare a vantaggi in termini di agilità, prestazioni e accuratezza. Citano esempi dei servizi cognitivi di Microsoft, come la sintesi vocale e la visione artificiale, nonché Azure Connect, un dispositivo con funzionalità di tracciamento del corpo. Viene inoltre evidenziato l'aspetto della portabilità di ONNX, in quanto consente di utilizzare lo stesso modello e lo stesso codice applicativo su diverse piattaforme e acceleratori hardware, risparmiando tempo e sforzi di personalizzazione. Inoltre, i relatori toccano Windows ML, che utilizza il runtime ONNX come formato comune per i modelli, semplificando l'inferenza di machine learning nel sistema operativo Windows.

  • 00:20:00 In questa sezione, Jim Spohrer e Prasanth Pulavarthi discutono alcuni dei recenti sviluppi e risultati del runtime ONNX. Una delle sue caratteristiche più significative è la sua capacità di lavorare con diversi tipi di acceleratori hardware, come GPU o VPU. Offre inoltre supporto multilingua, consentendo agli utenti di convertire i modelli addestrati in ambienti Python in C#. Un esempio di azienda che utilizza il runtime ONNX è un ISV che addestra i propri modelli finanziari in Python utilizzando scikit-learn ma utilizza il runtime ONNX per la produzione in C#. Inoltre, il runtime di ONNX ha recentemente ottimizzato l'inferenza e l'addestramento di modelli di trasformatore come BERT e GPT2, con conseguenti notevoli accelerazioni e risparmi sui costi per gli utenti.

  • 00:25:00 In questa sezione, i relatori forniscono informazioni su come iniziare con ONNX e ONNX runtime. Il Model Zoo, accessibile tramite un URL, offre una varietà di modelli pre-addestrati da scaricare e iniziare a utilizzare con il runtime ONNX per la visione, il linguaggio e i prossimi modelli vocali. Inoltre, i relatori incoraggiano il contributo dei modelli al Model Zoo. I modelli esistenti di altri framework possono anche essere convertiti o esportati nel formato ONNX. Framework come PyTorch, Keras, TensorFlow e Scikit-Learn hanno funzionalità di esportazione ONNX e il runtime ONNX può essere installato su Windows, Linux e Mac con supporto per più linguaggi di programmazione.

  • 00:30:00 In questa sezione, i relatori discutono dell'accelerazione hardware e di come diversi acceleratori hardware possono essere integrati tramite l'API chiamata provider di esecuzione. Il runtime ONNX ha un'implementazione della CPU altamente ottimizzata e un'implementazione CUDA, e fornitori di hardware come Nvidia e Intel hanno collaborato con ONNX per integrare le loro ottimizzazioni con il runtime ONNX. Ciò garantisce che qualsiasi modello ONNX possa essere eseguito con il pieno supporto per l'intera specifica ONNX, anche se una particolare operazione non è supportata da uno specifico acceleratore. I relatori incoraggiano gli spettatori a provare ONNX e condividere le risorse disponibili nella comunità ONNX, tra cui governance aperta, SIG e gruppi di lavoro.

  • 00:35:00 In questa sezione, i relatori discutono della struttura di governance aperta del progetto ONNX, che consiste in diversi gruppi di interesse speciale (SIG) e gruppi di lavoro. Spiegano che i SIG e i gruppi di lavoro si incontrano periodicamente e che tutto è aperto, e gli incontri sono tutti pubblicati in calendario sul calendario di AI. Inoltre, la struttura di governance aperta descrive come vengono selezionati i contributori e gli approvatori, che rispettivamente ottengono diritti di voto su decisioni diverse o hanno autorizzazioni di fusione. In definitiva, i relatori incoraggiano le persone a partecipare al progetto ONNX unendosi ai diversi canali e gruppi, iscrivendosi alla mailing list e partecipando alle discussioni.

  • 00:40:00 In questa sezione, i relatori rispondono a varie domande del pubblico su argomenti quali potenziali pubblicazioni di libri sull'argomento ONNX, le capacità di registrazione del runtime ONNX e i metodi utilizzati per ridurre il tempo di addestramento al machine learning. Menzionano anche alcune distribuzioni commerciali di modelli basati su ONNX in vari scenari come Servizi cognitivi di Azure, modelli per ufficio e il motore di ricerca Bing.

  • 00:45:00 In questa sezione, i relatori hanno discusso della distribuzione commerciale dei modelli ONNX al di fuori di Microsoft e hanno affermato che esistono numerosi modelli di livello di produzione utilizzati da società finanziarie e altre organizzazioni su Azure. Hanno anche risposto alle domande del pubblico su ONNX, incluso se supporta CNTK (sì, hanno un'esportazione ONNX) e se è necessaria la conoscenza degli strumenti di accelerazione hardware (no, poiché il runtime ONNX fornisce un livello di astrazione). Hanno anche toccato i vantaggi dell'utilizzo di ONNX durante l'addestramento rispetto alla conversione a ONNX dopo l'addestramento, spiegando che il runtime ONNX può accelerare il processo di addestramento, ottenendo modelli di trasformatori più veloci. Infine, hanno espresso la volontà di conoscere potenziali piani di certificazione e diversi modi in cui le persone utilizzano ONNX.

  • 00:50:00 In questa sezione, i relatori rispondono a una domanda sulla capacità di ONNX di supportare tutti i tipi di pipeline. Anche se non è al 100% a causa di alcune lacune esistenti, i tipi di modello comuni sono in genere supportati e gli utenti possono fare riferimento a ONNX Converter GitHub per un elenco di pipeline supportate o provarlo personalmente per vedere se la loro pipeline può essere completamente convertita. I relatori concludono quindi la sessione ringraziando i partecipanti e incoraggiandoli a unirsi alla comunità ONNX.
 

Onnx-mlir: un compilatore basato su MLIR per modelli ONNX - Lo stato più recente



Onnx-mlir: un compilatore basato su MLIR per modelli ONNX - Lo stato più recente

Onnx-mlir è un compilatore per modelli ONNX che utilizza MLIR e LLVM per l'ottimizzazione e la generazione di codice, supportando CPU e acceleratori personalizzati. Dong Lin di IBM Research sottolinea l'importanza di test approfonditi e sottolinea l'uso del framework nei servizi di punteggio online e nei framework di servizio dei modelli. Onnx-mlir ha più dialetti per CPU e acceleratore, con ottimizzazioni a vari livelli, e ha dimostrato di accelerare un modello di rilevamento delle frodi con carta di credito di 11 volte utilizzando un acceleratore IBM. Il progetto accoglie i contributi della comunità per ottimizzare operatori importanti e supportare operatori ML di nicchia e altri acceleratori come le GPU.

  • 00:00:00 In questa sezione, Dong Lin di IBM Research illustra ONNX-MLIR, un compilatore per modelli ONNX che utilizza MLIR e LLVM per l'ottimizzazione di alto livello e la generazione di codice di basso livello. Il compilatore mira a fornire un riferimento per il dialetto ONNX in MLIR e rendere l'ottimizzazione conveniente non solo per le CPU ma anche per gli acceleratori personalizzati. È facile da integrare con altri compilatori basati su MLIR e supporta diversi linguaggi di programmazione come Python, C++ e Java. Dong Lin sottolinea anche l'importanza di testare attentamente il compilatore e afferma che è stato utilizzato per servizi di punteggio online e framework di servizio di modelli, con il supporto recentemente introdotto per acceleratori personalizzati.

  • 00:05:00 In questa sezione, il relatore discute il compilatore ONNX-MLIR, che può ottimizzare e supportare nuovi acceleratori. Il compilatore ha più dialetti per CPU e acceleratore, con ottimizzazioni a vari livelli. Il relatore ha dimostrato la capacità del framework di accelerare un modello di rilevamento delle frodi con carta di credito di 11 volte utilizzando un acceleratore IBM, ma non ha potuto rivelare ulteriori dettagli. Hanno sottolineato il loro interesse per i contributi della comunità per far crescere il progetto open source, poiché mirano a ottimizzare operatori importanti, supportare operatori di apprendimento automatico di nicchia e altri acceleratori come le GPU.
 

PFVM - Un compilatore di reti neurali che utilizza ONNX come rappresentazione intermedia



PFVM - Un compilatore di reti neurali che utilizza ONNX come rappresentazione intermedia

In questo video, Zijian Xu di Preferred Networks presenta PFVM, un compilatore di reti neurali che utilizza ONNX come rappresentazione intermedia per l'ottimizzazione dei moduli. Discute di come PFVM prende l'ONNX esportato come input, lo ottimizza ed esegue il modello con backend specificati utilizzando API di terze parti. Genji descrive l'importanza dell'ottimizzazione, inclusa l'estensione di ONNX con gli operatori dei clienti, l'inferenza delle forme e la semplificazione dei grafici. Affronta anche i limiti degli attuali compilatori ONNX, inclusa la necessità di un maggiore supporto nel caso dinamico, e suggerisce di implementare più funzioni di inferenza. Zijian Xu sottolinea l'importanza di ridurre l'overhead dell'intervallo del kernel e l'utilizzo della memoria per un calcolo più veloce e suggerisce di utilizzare le informazioni statiche disponibili sulle macchine per la pianificazione e la modellazione dell'inferenza.

  • 00:00:00 In questa sezione, Zijian Xu di Preferred Networks parla di PFVM, un compilatore di reti neurali che utilizza ONNX come rappresentazione intermedia. Presenta l'azienda e spiega come utilizza il deep learning per risolvere i problemi del mondo reale. Quindi si concentra su ONNX per l'ottimizzazione dei moduli piuttosto che sull'implementazione dei moduli. Spiega che PFVM funziona come compilatore e runtime, prendendo ONNX esportato come input, ottimizzandolo ed eseguendo il modello con backend specificati utilizzando API di terze parti. Genji descrive il processo di ottimizzazione, discutendo di come estendono ONNX con gli operatori dei clienti per l'ottimizzazione del dispositivo e della memoria. Discute anche l'importanza dell'inferenza della forma nell'ottimizzazione dei moduli e introduce tre ottimizzazioni dei casi. Il primo caso è la fusione per elemento.

  • 00:05:00 In questa sezione del video, il relatore discute l'importanza di ridurre l'overhead dell'intervallo del kernel per un calcolo più rapido nell'esecuzione di grafici di calcolo su CUDA. Propongono di fondere operatori a livello di elemento in un singolo operatore di gruppo di fusione per ridurre l'intervallo del kernel, ma avvertono che non tutti gli operatori possono essere fusi insieme con successo. È necessario verificare se gli operatori possono essere trasmessi o meno prima di un gruppo di fusione gradiente. Il relatore sottolinea inoltre l'importanza dell'inferenza della forma e della semplificazione dei grafici per l'ottimizzazione dei modelli di reti neurali. Infine, affrontano la questione se i modelli contengano operatori non necessari e rispondono che alcune ottimizzazioni sono necessarie per un calcolo più veloce.

  • 00:10:00 In questa sezione, il relatore discute di come i modelli generati da programmi come la prima generazione o la rete neurale e la ricerca dell'architettura neurale possano contenere operatori non necessari. Dimostrano l'importanza delle ottimizzazioni utilizzando un esempio in cui un grafico computazionale sinistro utilizza molta memoria per calcolare il nodo cinque. Modificando il grafico computazionale, è possibile ottenere lo stesso output con un ridotto utilizzo della memoria. PFVM può eseguire il checkpoint automatico per ridurre l'utilizzo della memoria, ma richiede la conoscenza delle dimensioni del tensore per stimare accuratamente l'utilizzo della memoria. Il relatore sottolinea l'importanza del riferimento alla forma e come le dimensioni sconosciute limitino le opportunità di ottimizzazione nella maggior parte dei telai di modellatura.

  • 00:15:00 In questa sezione, il relatore discute i limiti dell'attuale compilatore ONNX all'avanguardia, inclusa l'impossibilità di eseguire determinate attività come la trasfusione di elementi e il checkpoint automatico, nonché la necessità di maggiore supporto in il caso dinamico L'oratore suggerisce di implementare più funzioni di inferenza per il caso dinamico e sollecita il feedback degli utenti per determinare se supportare o meno casi come la concatenazione di due tensori. Il relatore discute anche i vantaggi dell'utilizzo delle informazioni statiche disponibili su macchine come elementi core e mn4 per la pianificazione e la modellazione dell'inferenza.
 

Stack del compilatore TVM YVR18-332 e supporto ONNX



Stack del compilatore TVM YVR18-332 e supporto ONNX

Il video YVR18-332 illustra lo stack del compilatore TVM, che è uno stack di deep learning guidato dalla comunità che supporta una gamma di hardware e front-end, incluso ONNX. Il relatore spiega come TVM può ottimizzare i modelli a livello stereo, consentendo agli sviluppatori di esplorare lo spazio di ricerca e trovare la migliore configurazione. Discutono anche delle ottimizzazioni automatiche offerte da TVM, comprese le trasformazioni di loop e l'accelerazione GPU. L'oratore parla della roadmap TVM che include l'abilitazione del supporto a 8 bit e la sintonizzazione automatica a livello di grafico. Inoltre, discutono dell'interfaccia ONNX TV e della necessità di unificare l'interfaccia standard per tutti gli ecosistemi. Infine, il video fa una pausa per il pranzo.

  • 00:00:00 In questa sezione, il relatore introduce lo stack del compilatore TVM e il modo in cui supporta ONNX tramite GBM. TVM è uno stack di deep learning dal livello di classe fino al livello del cancro ed è un progetto comunitario guidato da ricercatori dell'Università di Washington con il contributo di diverse aziende e organizzazioni. Lo stack del compilatore TVM supporta una varietà di hardware tra cui CPU, GPU, FPGA e prevede di abilitare il supporto ASIC, con un simulatore per la verifica della progettazione dell'hardware. Lo stack supporta anche vari front-end tra cui MXNet, ONNX e TensorFlow e dispone di un'implementazione IR di classe computazionale chiamata NVM con una gamma di opzioni di ottimizzazione.

  • 00:05:00 In questa sezione, il relatore discute lo stack del compilatore TVM e il supporto ONNX. Spiegano che lo stack del compilatore TVM può eseguire molte ottimizzazioni a livello stereo, come trasformazioni di loop e accelerazione GPU, e che ONNX è una nuova funzionalità aggiunta per entrare nel TVM automatico. Il relatore spiega anche il diploma Canadian Miss applaudito dal meccanismo di distribuzione remota TVM, che consente agli utenti di compilare un modello sul proprio dispositivo host e distribuirlo in remoto sul dispositivo di destinazione. Inoltre, discutono delle ottimizzazioni automatiche introdotte da TVM, che possono ridurre il lavoro noioso per gli sviluppatori e lo sono
    progettato per esplorare lo spazio di ricerca e trovare la migliore configurazione.

  • 00:10:00 In questa sezione, il relatore discute lo stack del compilatore TVM e il supporto per ONNX. Dicono che lo stack del compilatore TVM incorpora gli algoritmi di sintonizzazione più avanzati, inclusi algoritmi di potenziamento del gradiente estremo isolati, per fornire prestazioni migliori. Evidenziano inoltre il progetto open source che consente l'ottimizzazione automatizzata e può sfruttare il lavoro precedente per ottimizzare lo spazio di ricerca. L'oratore parla poi di come TVM può essere utilizzato per l'acceleratore aperto Vita e le sue tre parti principali. Spiegano come TVM può essere utilizzato per l'ottimizzazione della pianificazione e implementato in remoto utilizzando VPS RPC. Infine, forniscono una tabella di marcia per TVM, che include l'abilitazione del supporto a 8 bit e l'ottimizzazione automatica a livello di grafico, pianificando anche di abilitare l'uso sugli stick Ultra 9 di Xilinx e sull'istanza F1 di Amazon.

  • 00:15:00 In questa sezione, il relatore discute lo stack del compilatore TVM e come prevede di eseguire l'aggiornamento a NVM v2, soprannominato Relay. L'implementazione di Relay richiede la scelta di un flusso di controllo del pod per migliorare il sistema dei tipi e controllare come migliorare il sistema del server di compilazione. L'oratore spiega come Relay si inserisce nello stack del compilatore TVM quando supporta ONNX. ONNX definisce tre parti principali, vale a dire il modello del grafico di calcolo e gli operatori di costruzione e un database standard. Per supportare le estensioni ONNX ml, il front-end TVM ha implementato un front-end in DVM. Tuttavia, la conversione di ONNX nel grafico simbolico NM VM può causare alcuni problemi di mancata corrispondenza. Inoltre, la comunità sta discutendo se utilizzare ONNX o Relay come grafico IR nella comunità TVM e l'unico modo per progredire è lavorare insieme per unire Relay da utilizzare per la futura conversione del modello.

  • 00:20:00 In questa sezione, il relatore discute l'interfaccia ONNX TV per l'integrazione del framework, che è un'interfaccia standard per l'inferenza della rete neurale su diversi acceleratori. L'interfaccia include il rilevamento del runtime del pod, la selezione dei backend di esecuzione e il rilevamento a lungo termine degli operatori ONNX. L'oratore suggerisce che la comunità dovrebbe discutere su come unificare l'interfaccia standard per tutti gli ecosistemi. Inoltre, l'oratore parla dello stack del compilatore TVM e di come potrebbe incorporare un'implementazione codificata a mano come parte del suo spazio di ricerca. Tuttavia, non c'è ancora una buona idea su questo meccanismo, quindi l'oratore accoglie idee e discussioni.

  • 00:25:00 In questa sezione, l'argomento della discussione è lo stack del compilatore TVM e il suo supporto per ONNX. Viene chiarito che ONNX ha sia un formato di descrizione che un'API di runtime e che il sistema uguale ONNX si sta espandendo oltre il semplice formato di scambio aperto. L'obiettivo è unificare l'API in modo che le applicazioni di livello superiore possano chiamare un'unica API standard per l'inferenza di runtime, rendendo più semplice per gli sviluppatori in quest'area. Non ci sono altre domande e il video si interrompe per il pranzo.
 

.NET MAUI Community Standup - ONNX Runtime con Mike Parker



.NET MAUI Community Standup - ONNX Runtime con Mike Parker

In questo video il relatore ospite Mike Parker presenta il runtime ONNX, uno strumento open source e multipiattaforma che consente l'ottimizzazione e l'accelerazione del machine learning su più piattaforme hardware. Parker spiega l'importanza dell'utilizzo del runtime ONNX e mostra come può essere utilizzato nei progetti .NET MAUI per classificare le immagini utilizzando il modello di classificazione degli oggetti MobileNet. Gli host e Parker discutono dei vantaggi dell'esecuzione di modelli di machine learning su un dispositivo e della possibilità di evitare i costi dell'infrastruttura di back-end. Inoltre, il team condivide risorse utili, tra cui il blog di Parker su questo argomento e la partnership con Al Blount per il supporto di .NET MAUI e Xamarin.

  • 00:00:00 In questa sezione della community stand-up per .NET MAUI, il team presenta Mike Parker, un membro del moderno team di consulenza per i clienti dell'app client, che condivide la sua conoscenza di ONNX Runtime, uno strumento di machine learning per l'ottimizzazione e l'accelerazione dei modelli su più piattaforme hardware. Spiega come ONNX Runtime sia open source e multipiattaforma, consentendo agli sviluppatori di utilizzare vari framework e hardware per applicazioni di machine learning. Mostra inoltre come la community .NET può trarre vantaggio da ONNX Runtime nei propri progetti.

  • 00:05:00 In questa sezione, gli host presentano se stessi e il loro ospite, Mike, che si unisce per discutere con loro dell'Onnx Runtime. Gli host affermano che esamineranno prima alcuni blog di Microsoft e della community prima di passare alla discussione di alcuni PR da .NET MAUI e repository adiacenti, di cui sono entusiasti. Infine, trasferiranno la discussione a Mike Park per parlare delle librerie Onnx Runtime, di come le ha usate in Xamarin e dei suoi scritti e podcast sull'argomento. Gli host menzionano anche che è il 20° anniversario di .NET e che .NET MAUI Preview 12 è stato distribuito. Avvertono anche gli utenti di un cambiamento radicale e menzionano che Dave ha lavorato con i manutentori della libreria della comunità su di esso.

  • 00:10:00 In questa sezione, i relatori discutono dello sforzo di unificazione di .NET e della necessità di ricompilare e aggiornare le librerie e le dipendenze iOS quando Xamarin passa a MAUI. Il team sta attualmente lavorando su un modo per adottare queste modifiche per qualsiasi progetto di associazione a librerie native e pacchetti NuGet e assicura agli utenti che verranno fornite indicazioni. Inoltre, il team discute la mancanza del supporto MAUI nell'anteprima 5 di VS Mac 2022 e spiega che ci stanno lavorando, ma che prima hanno dovuto dare la priorità alla ricostruzione di tutto il lavoro di Xamarin sul runtime di .NET 6 con una nuova SAC dell'interfaccia utente. Infine, il team annuncia l'aggiornamento dell'associazione SDK di Facebook e menziona lo sforzo per aggiornare e mantenere altre librerie di terze parti come le librerie di Google.

  • 00:15:00 In questa sezione, il team di Xamarin parla dei componenti che mantiene, che in precedenza erano un obiettivo principale ma che ora vengono ristretti a ciò che è più critico per il supporto. Il team incoraggia gli utenti a contattare se hanno dipendenze da questi componenti durante la transizione a .NET 6. Discutono anche di un'esercitazione Maui Hello World e di una serie di blog sull'analisi del codice sorgente .NET Maui. Inoltre, viene evidenziato il blog di Andreas su Z Index e la personalizzazione dell'interfaccia utente, che mostra l'impilamento degli elementi uno sopra l'altro utilizzando Z Index.

  • 00:20:00 In questa sezione, il relatore presenta alcuni post di blog e progetti che le persone hanno ricreato utilizzando .NET MAUI. I blog includono la ricreazione di un progetto di carta d'imbarco in Xamarin Forms, la discussione sullo sviluppo di una macchina a stati con Xamarin Forms, l'organizzazione del file di avvio .NET MAUI, un'analisi approfondita dell'architettura dei gestori e un blog sulla comunicazione bidirezionale da Xamarin Forms a JavaScript utilizzando una WebView per questo. Le presentazioni mostrano quanta attenzione c'è sul design in questi giorni, rendendo Xamarin Forms/MAUI più estensibile e utile e come utilizzare sia JavaScript che i binding in modo più efficace.

  • 00:25:00 In questa sezione della trascrizione, gli host discutono degli ultimi contributi della community a .NET MAUI, tra cui una versione del servizio forum Xamarin 5.0 e nuova documentazione. Incoraggiano i contributori a fornire feedback sulla partecipazione al repository e menzionano la disponibilità di un controllo del chip nel toolkit della community, sebbene non sia direttamente nella confezione. I padroni di casa menzionano anche la recente aggiunta di ombre, che è una nuova funzionalità di MAUI, e suggeriscono di ravvivare il loro bot modificandolo.

  • 00:30:00 In questa sezione, Mike Parker fornisce un aggiornamento sullo stato delle versioni di anteprima di .NET MAUI, evidenziando i progressi compiuti con l'anteprima 13. C'è molto verde e molte nuove funzionalità, tra cui testo in formato etichetta, span, e abbraccia i gesti, che stanno tutti riempiendo le lacune nella piattaforma. La community ha inoltre condiviso una nuova proprietà associata denominata "Galadriel", che consente la semplice aggiunta di badge alle schede e alle voci di menu in Xamarin Forms Shell. Inoltre, il team .NET MAUI ha lavorato per migliorare le prestazioni di avvio della piattaforma e i risultati sono promettenti con l'avvio dell'app in 576 millisecondi su un Pixel 5 con AOT profilato.

  • 00:35:00 In questa sezione, .NET MAUI Community Standup illustra la disponibilità delle estensioni di markup C# per la compilazione dell'interfaccia utente su Xamarin Forms e .NET MAUI, che forniscono una sintassi più fluida per lo sviluppo dell'interfaccia utente. Parlano anche del runtime onnx, un modello portatile in grado di eseguire inferenze su piattaforme diverse utilizzando un singolo set di API, con esempi come il riconoscimento facciale e il tagging delle foto. Il runtime onnx è disponibile su GitHub e può essere usato in Xamarin e nelle app per dispositivi mobili. Il processo per l'utilizzo del runtime onnx prevede il caricamento del modello, la preparazione dell'input, l'esecuzione dell'inferenza e l'elaborazione dell'output in un formato utilizzabile.

  • 00:40:00 In questa sezione del video, Mike Parker spiega come hanno utilizzato il runtime ONNX in un'app Xamarin Forms per classificare le immagini utilizzando il modello di classificazione degli oggetti MobileNet. Sottolinea l'importanza di seguire la documentazione del modello e normalizzare i valori RGB. Parker menziona anche un'utile app chiamata Netron che consente di visualizzare dimensioni, forme e nomi di input e output di input e output. L'app è solo un singolo pulsante che carica ed esegue il modello e visualizza l'etichetta superiore in un avviso. Parker osserva che è bello che tutto ciò avvenga sul dispositivo senza coinvolgere il cloud.

  • 00:45:00 In questa sezione, i relatori discutono i vantaggi dell'esecuzione di modelli di machine learning sul dispositivo, inclusa la possibilità di funzionare senza connettività ed evitare i costi dell'infrastruttura di back-end. Toccano anche le loro esperienze utilizzando le API Microsoft Azure Vision basate su cloud e come sono stati in grado di ottenere tempi di elaborazione più rapidi utilizzando il runtime ONNX. Inoltre, spiegano come hanno semplificato l'esperienza dell'app di onboarding del team sostituendo il codice specifico della piattaforma e del modello con un singolo modello ONNX. Infine, discutono del processo di preparazione di un modello, usando il servizio Azure Custom Vision e creando un pacchetto Nougat che consente a ONNX di lavorare con Xamarin.

  • 00:50:00 In questa sezione del video, Mike Parker illustra il loro lavoro con il runtime ONNX e l'adattamento del loro codice di interoperabilità nativo per supportare piattaforme con AOT, come iOS. Prosegue inoltre descrivendo gli scenari del mondo reale in cui è possibile utilizzare questa tecnologia, inclusa la semplificazione dei flussi di lavoro e il miglioramento dell'accessibilità nelle app. Tuttavia, osserva che lavorare con modelli predefiniti può essere opprimente per coloro che non hanno un background di data science tradizionale e suggerisce di essere selettivi sui modelli da incorporare. Infine, vengono condivise alcune risorse utili, incluso il blog di Mike su questo argomento.

  • 00:55:00 In questa sezione, i presentatori parlano della disponibilità di Mike Parker per l'assunzione e presentano Al Blount, che può fornire supporto alle aziende che necessitano di aiuto con Xamarin Forms e .NET Maui. Discutono anche brevemente dell'attuale lavoro del team di Mike sull'aggiornamento a Maui, ma non possono ancora condividere alcun dettaglio. I presentatori concludono il video ringraziando gli spettatori per essersi uniti e annunciando l'imminente festa di compleanno del 20° anniversario di .NET.
 

[Virtual meetup] Interoperable AI: ONNX e ONNXRuntime in C++ (M. Arena, M. Verasani)



[Virtual meetup] Interoperable AI: ONNX e ONNXRuntime in C++ (M. Arena, M. Verasani)

Il video discute le sfide dell'utilizzo di diversi framework per addestrare algoritmi di machine learning, che portano a una mancanza di interoperabilità, e introduce ONNX e ONNXRuntime che mirano a creare un formato universale per i modelli di deep learning. ONNX converte le reti neurali in grafici computazionali statici, consentendo prestazioni ottimizzate durante l'inferenza. ONNXRuntime consente la conversione di qualsiasi framework in formato ONNX e fornisce librerie di accelerazione che possono essere utilizzate per indirizzare qualsiasi piattaforma hardware. Il video presenta esempi di utilizzo di ONNX e ONNXRuntime, oltre a discutere il loro utilizzo in C++ e fornire consigli per una migliore comprensione del progetto e della relativa documentazione.

Marco Arena e Matteo Verasani discutono anche dei vantaggi dell'utilizzo di ONNX e ONNXRuntime in C++ per i modelli di machine learning, evidenziando la flessibilità del framework e la sua capacità di convertire facilmente modelli da diversi framework senza sacrificare le prestazioni. Forniscono esempi di conversione di modelli in formato ONNX e dimostrano l'uso di ONNXRuntime per la modalità di inferenza, mostrando miglioramenti nelle prestazioni con un modello Python classico. Inoltre, discutono del loro lavoro con i sistemi embedded e dei potenziali vantaggi del benchmarking ONNXRuntime su GPU. I relatori menzionano anche futuri incontri virtuali ed esprimono la speranza di incorporare maggiori opportunità di networking per i partecipanti.

  • 00:00:00 In questa sezione del video, i relatori discutono dei problemi che sorgono quando si utilizzano diversi framework per addestrare algoritmi di apprendimento automatico per vari casi d'uso, portando a una mancanza di interoperabilità. Questa può essere una sfida quando si lavora in un team in cui i membri possono avere diversi livelli di esperienza con quadri diversi. Per risolvere questo problema, i relatori introducono ONNX e ONNXRuntime, che consentono l'interoperabilità tra framework convertendo le reti in un formato comune. ONNXRuntime consente quindi di distribuire i modelli convertiti su qualsiasi hardware di destinazione, incluse CPU, GPU e FPU.

  • 00:05:00 In questa sezione, i relatori discutono del progetto ONNX (Open Neural Network Exchange), che mira a essere un formato universale per modelli di deep learning, consentendo l'interoperabilità tra diversi framework. Il progetto è guidato dalla comunità e supportato da numerose aziende, con l'obiettivo di convertire diversi tipi di modelli e framework in un unico formato per la produzione. ONNX converte le reti neurali in grafici computazionali statici, che differiscono dai grafici dinamici in quanto vengono pre-inizializzati prima dell'addestramento. Mentre i grafici statici sono più efficienti dal punto di vista computazionale, i grafici dinamici offrono una maggiore flessibilità per le diverse dimensioni di input.

  • 00:10:00 In questa sezione, i relatori discutono di come ONNX fornisca un grafico computazionale statico, molto utile nel processo di inferenza. Mentre altri framework come Python hanno grafici computazionali dinamici, ONNX fornisce un grafico statico che è già stato controllato durante le fasi di formazione e sviluppo, consentendo prestazioni più ottimizzate. Inoltre, lo strumento di runtime ONNX di Microsoft consente la conversione di qualsiasi framework in formato ONNX e fornisce librerie di accelerazione che possono essere utilizzate per indirizzare qualsiasi piattaforma hardware, rendendolo uno strumento utile e versatile per l'inferenza e la produzione.

  • 00:15:00 In questa sezione del video, i relatori parlano della loro esperienza nell'utilizzo di ONNX e ONNX Runtime per l'interoperabilità AI. Spiegano come creano un modello PyTorch in Python, lo convertono in formato ONNX e utilizzano ONNX Runtime per la distribuzione, consentendo loro di scrivere le proprie pipeline e indirizzare piattaforme diverse, come GPU o dispositivi Android. Dimostrano inoltre i miglioramenti delle prestazioni derivanti dall'utilizzo di ONNX Runtime rispetto ad altri motori di inferenza, ottenendo risultati fino a 4 volte più veloci. Sottolineano la flessibilità di ONNX, consentendo loro di convertire i modelli creati in altri framework come Matlab per utilizzarli con ONNX Runtime senza dover riscrivere la pipeline di distribuzione.

  • 00:20:00 In questa sezione, i relatori discutono il processo di utilizzo di ONNX e ONNXRuntime in C++. Spiegano che i modelli devono prima essere convertiti in formato ONNX prima di poter essere eseguiti su ONNXRuntime. Sebbene la serializzazione TensorFlow non sia nativa di ONNXRuntime, sono disponibili librerie open source per la conversione. Rispondono anche a domande riguardanti la possibilità di scriptare il processo di conversione e il livello di miglioramento riscontrato con ONNX rispetto a C++. Notano che sono necessari ulteriori benchmarking e analisi. Il repository ONNXRuntime è open source e supportato da Microsoft e offre una gamma di informazioni, guide ed esempi per gli utenti.

  • 00:25:00 In questa sezione, il video illustra le funzionalità di ONNXRuntime in una scala di complessità da semplice a più sofisticata. La colonna verde contiene funzionalità di base sufficienti per attività di machine learning più semplici, mentre la colonna magenta include funzionalità leggermente più sofisticate come provider di esecuzione e supporto per la profilazione. La colonna rossa rappresenta le funzionalità avanzate per attività più complesse come la possibilità di aggiungere operatori personalizzati ONNX o eseguire la messa a punto sul trading. Il presentatore fornisce anche collegamenti a due repository demo per ONNXRuntime in C++ e Python.

  • 00:30:00 In questa sezione, il relatore introduce ONNX e ONNXRuntime in C++. Spiegano che dovrebbe essere creato un ambiente all'interno del programma per gestire il trade pool e la sessione, che stabilisce il modello in esame. Le caratteristiche della sessione possono anche essere personalizzate e le impostazioni predefinite possono essere eseguite utilizzando la sessione. Inoltre, ONNXRuntime ottimizzerà il modello implementando la pre-elaborazione richiesta per gestire i dati prima dell'esecuzione della sessione. Lo strumento può anche eseguire attività di ispezione come informazioni sul numero di input e output, tipi di dati e nomi. In definitiva, gli utenti possono creare i propri input e tensori nel formato richiesto.

  • 00:35:00 In questa sezione del video, il relatore spiega come creare un oggetto che allochi i tensori sulla CPU e li trasferisca al provider di esecuzione. L'oratore crea tensori di input e output, passando nel buffer i valori di input e la forma del tensore come argomenti. Il tensore per l'output viene quindi creato passando i valori di output alla libreria OnnxRuntime. L'oratore spiega l'importanza dell'uso dei nomi per avviare l'inferenza, in quanto consente flessibilità nel modificare l'ordine degli input. La demo mostra un semplice esempio di come i valori di output vengono stampati sullo schermo.

  • 00:40:00 In questa sezione, il relatore fornisce consigli per coloro che vogliono comprendere meglio il progetto ONNX e la sua documentazione. Raccomandano di consultare le "Parti C" per accedere alle sezioni meglio documentate di ONNX e dettagliare la loro esperienza con l'ispezione dei dati in ONNX. Il relatore spiega anche che sebbene le librerie di runtime ONNX siano disponibili tramite altri gestori di pacchetti, consigliano di ricompilare le librerie poiché le architetture e i provider variano e mostra come hanno compilato lo stesso codice per creare due pacchetti di runtime ONNX destinati a una CPU o una GPU.

  • 00:45:00 In questa sezione, il relatore discute il runtime ONNX con esempi di utilizzo della DLL in C++. Le opzioni di sessione aggiunte al codice variano a seconda delle preferenze del client e tenta di utilizzare i provider aggiunti nell'ordine specificato. L'oratore fornisce un'applicazione di esempio di come il sistema occupa l'utilizzo della RAM e della GPU. Come esempio è stata utilizzata una re-net AI di gioco primaria, che è stata pre-addestrata su un set di dati di 1.000 immagini. Il sistema ha i suoi requisiti di post-elaborazione e pre-elaborazione.

  • 00:50:00 In questa sezione del video, il relatore discute la pre-elaborazione delle immagini utilizzando Python e l'uso di fonti di estensione per semplificare il processo. Le immagini vengono ridimensionate a una dimensione ottimale e convertite in float prima di essere normalizzate. Il processo di normalizzazione prevede la divisione dei valori per la media e l'esecuzione della deviazione standard. La post-elaborazione della rete neurale comporta una semplice normalizzazione softmax. Il relatore dimostra anche come aprire, elaborare e produrre immagini utilizzando ONNX Runtime con codice minimo. La classe utilizzata per leggere le classi da un file di testo è semplicistica e vengono utilizzate alcune utilità per evitare codice boilerplate non necessario.

  • 00:55:00 In questa sezione, il relatore discute il processo di misurazione del tempo di inferenza per una rete neurale utilizzando ONNXRuntime in C++. Spiega di aver aggiunto la porzione di inferenza alla rete discussa in precedenza e di aver misurato il tempo di inferenza utilizzando l'orologio di sistema. Quindi passa a dimostrare come utilizzare un logger personalizzato in ONNXRuntime per scopi di profilazione. Il relatore discute anche brevemente una rete mobile separata che è stata sviluppata in collaborazione con l'Università di Modena e la complessità coinvolta nella sua pre-elaborazione e post-elaborazione.

  • 01:00:00 In questa sezione, l'oratore discute l'output di un rilevatore e mostra come disegna riquadri di delimitazione su oggetti come orsi e segnali. Menzionano anche l'uso di ONNXRuntime e il modo in cui consente le opzioni di sessione e l'ottimizzazione, inclusa l'abilitazione della profilazione per l'ottimizzazione delle prestazioni. Il file di traccia risultante può essere ispezionato in dettaglio per vedere quanto tempo è necessario per inizializzare il modello ed eseguirlo sulle immagini, inclusi quali operatori sono stati utilizzati e quale provider è stato scelto. Menzionano anche la capacità di ONNX di ottimizzare un grafico prima di eseguirlo, il che può migliorare le prestazioni e ridurre il tempo necessario per caricare il modello.

  • 01:05:00 In questa sezione, il relatore parla dell'ottimizzazione di un modello abilitando o disabilitando le ottimizzazioni, che possono avere un impatto sulla portabilità del modello su target diversi. Esplorano diversi livelli di ottimizzazione e il modo in cui ciascuno influisce sulle prestazioni del modello. Il relatore mostra che l'abilitazione della modalità di esecuzione parallela può consentire al modello di utilizzare più thread, ma in alcuni casi potrebbe non avere un impatto significativo sulle prestazioni. Menzionano anche la possibilità di parallelizzare l'elaborazione di più immagini utilizzando un'utilità. Infine, il relatore osserva che le ottimizzazioni possono avere un notevole impatto sulle prestazioni del modello, come dimostrato dal tempo di caricamento ridotto dei modelli ottimizzati.

  • 01:10:00 In questa sezione, Marco Arena e Marco Verasani discutono i vantaggi dell'utilizzo di ONNX e ONNX Runtime in C++. Uno dei principali vantaggi è la possibilità di avere un singolo livello di inferenza che accetta ONNX come formato, consentendo la portabilità e la flessibilità nell'utilizzo di diversi framework per la creazione di modelli. Questa funzionalità è particolarmente utile in situazioni in cui diversi team possono utilizzare vari framework ed è necessaria una pipeline di inferenza standard per la produzione. Inoltre, l'uso di ONNX Runtime in C++ può portare a prestazioni di runtime più rapide e ottimizzate per i modelli di deep learning. Nel complesso, l'ecosistema ONNX offre molte opzioni e opportunità per perfezionare e ottimizzare le prestazioni dei modelli di deep learning.

  • 01:15:00 In questa sezione, i relatori discutono i vantaggi dell'utilizzo di ONNX e ONNXRuntime in C++ per i modelli di machine learning, in quanto consente flessibilità nei framework e facile conversione tra di essi senza sacrificare le prestazioni. Menzionano anche che ONNXRuntime è supportato su Linux e dimostrano come utilizzare i notebook Python e Jupyter per la prototipazione e l'esportazione di modelli in formato ONNX. Usano un piccolo tutorial come esempio per mostrare come convertire i modelli da altri framework in ONNX ed evidenziare l'utilità dello strumento Netron per visualizzare il grafico computazionale dei modelli. I relatori incoraggiano gli spettatori a porre domande e condividere le conoscenze sullo strumento.

  • 01:20:00 In questa sezione, i relatori discutono il processo di conversione di un modello in formato ONNX e la sua esecuzione in modalità di inferenza utilizzando ONNXRuntime in C++. Dimostrano come creare un grafico computazionale e definire le dimensionalità di input e output, nonché come utilizzare il tempo per confrontare le prestazioni del modello su CPU e GPU. Mostrano anche l'uso del popolare modello di elaborazione del linguaggio naturale BERT, che utilizza l'operatore trasformatore ed è implementato nella libreria Hugging Face. I relatori sottolineano l'importanza di installare il pacchetto corretto per l'utilizzo di ONNXRuntime con CPU o GPU.

  • 01:25:00 In questa sezione del video, il presentatore mostra come convertire un modello BERT in formato ONNX in Python. Il processo prevede la definizione degli input del modello e la conversione del modello utilizzando la funzione "torch.onnx.export". Il presentatore spiega che ONNX aggiunge operatori a ciascuna versione, il che sottolinea la necessità di lavorare sulla versione corretta di ONNX con gli operatori necessari per il modello specifico. L'asse dinamico è anche evidenziato come una caratteristica importante per consentire forme di input/output dinamiche, come lunghezze di sequenza variabili nell'elaborazione del linguaggio naturale. Infine, il presentatore mostra un confronto tra Python e ONNX in termini di prestazioni durante l'esecuzione dell'inferenza sul modello.

  • 01:30:00 In questa sezione del meetup virtuale, i relatori condividono una dimostrazione del loro lavoro con ONNX e ONNXRuntime in C++. Mostrano un miglioramento delle prestazioni visto nell'inferenza di un classico modello Python eseguito tramite ONNXRuntime. Dimostrano anche uno strumento chiamato "Network Viewer", che consente agli utenti di visualizzare il grafico computazionale statico di un modello e vedere le operazioni che vengono eseguite, inclusi i tipi di input e output previsti. Lo strumento mostra anche la versione di ONNX utilizzata per la conversione e l'offset utilizzato durante il processo di conversione. I relatori richiedono feedback dagli spettatori e forniscono un collegamento ai partecipanti per fornire commenti.

  • 01:35:00 In questa sezione, Marco Arena e Matteo Verasani parlano del loro lavoro nello studio di piattaforme per sistemi embedded, tra cui GPU, FGA e CPU. Hanno eseguito quattro reti neurali per il rilevamento di oggetti su questi sistemi integrati e hanno analizzato i risultati in termini di consumo energetico e velocità di inferenza. Discutono anche dell'importanza dell'utilizzo di rilevatori a uno stadio per i sistemi integrati e forniscono collegamenti ai repository per ONNX e ONNXRuntime. Menzionano i potenziali vantaggi del benchmarking di ONNXRuntime sulle GPU ed esprimono interesse a invitare il team ONNXRuntime di Microsoft a partecipare a eventi futuri. Infine, invitano gli spettatori a partecipare al loro prossimo evento online e ai futuri incontri.

  • 01:40:00 Questa sezione del video parla della ricerca di motivi per non tornare ai meetup di persona e di come sono stati fortunati ad avere una concessione dai partecipanti per il loro incontro online. Discutono anche dei piani imminenti per la loro serie di incontri virtuali, che include l'eliminazione della sezione Python e l'attenzione alle parti iniziali della loro dimostrazione, sulla base dei materiali mostrati da Malattia, Verasani e i repository ONNX e ONNX Runtime. Sono inoltre disponibili link e fonti ufficiali per chi cerca maggiori informazioni sull'argomento. Alla fine, esprimono la speranza di incorporare più tempo per il networking e mantenere la chat aperta per coloro che sono interessati a restare dopo cena, ma ammettono i limiti dei meetup online.
 

[CppDay20] AI interoperabile: ONNX e ONNXRuntime in C++ (M. Arena, M.Verasani)



[CppDay20] AI interoperabile: ONNX e ONNXRuntime in C++ (M. Arena, M.Verasani)

L'uso di algoritmi di machine learning e deep learning è in aumento e sono necessari strumenti in grado di implementare questi algoritmi su piattaforme diverse. Lo strumento ONNX fornisce l'interoperabilità tra diversi framework e piattaforme, consentendo agli sviluppatori di convertire i loro algoritmi da un framework all'altro e distribuirli su dispositivi diversi, anche se non hanno familiarità con il framework o la piattaforma specifica. ONNX Runtime è un motore di inferenza che può sfruttare acceleratori personalizzati per accelerare i modelli durante la fase di inferenza e può scegliere come target una varietà di piattaforme hardware. I relatori dimostrano l'uso di ONNX e ONNX Runtime nella programmazione C++, con esempi di regressione lineare e modelli di reti neurali. Discutono inoltre dei vantaggi dell'utilizzo di ONNX e ONNX Runtime per ottimizzare l'esecuzione di una rete, ottimizzare i tempi di caricamento ed eseguire immagini sequenziali.

  • 00:00:00 In questa sezione del video, i relatori discutono del crescente utilizzo di algoritmi di machine learning e deep learning per varie applicazioni e della necessità di strumenti in grado di implementare questi algoritmi su diverse piattaforme. Introducono uno strumento chiamato ONNX che fornisce l'interoperabilità tra diversi framework e piattaforme. Spiegano come gli sviluppatori possono utilizzare ONNX per convertire i propri algoritmi da un framework a un altro e distribuirli su dispositivi diversi, anche se non hanno familiarità con il framework o la piattaforma specifica. I relatori utilizzano l'esempio della conversione di un algoritmo Python in formato ONNX e quindi nel framework Core ML da distribuire su un dispositivo Apple. Sottolineano l'utilità di ONNX nel rendere gli algoritmi di deep learning e machine learning più accessibili e distribuibili su un'ampia gamma di piattaforme.

  • 00:05:00 In questa sezione, il relatore discute ONNX e ONNX Runtime, che sono strumenti che consentono l'IA interoperabile. ONNX consente il trasferimento di modelli tra diversi framework di deep learning, come PyTorch e Tensorflow, senza richiedere la conoscenza di ciascun framework. ONNX Runtime, fornito da Microsoft, è un motore di inferenza che può sfruttare acceleratori personalizzati per accelerare i modelli durante la fase di inferenza. È in grado di indirizzare una varietà di piattaforme hardware e non richiede all'utente di creare il proprio motore di inferenza in C++.

  • 00:10:00 In questa sezione, i relatori discutono i vantaggi dell'utilizzo del formato ONNX per i modelli di machine learning e l'interoperabilità che fornisce per diversi framework di formazione. Spiegano la pipeline per lo sviluppo di algoritmi di deep learning, la loro conversione in formato ONNX e l'utilizzo del motore di inferenza del runtime ONNX per eseguire il modello su diverse piattaforme e linguaggi di programmazione. I relatori presentano anche grafici delle prestazioni che mostrano un miglioramento significativo delle prestazioni degli algoritmi quando si utilizza il runtime ONNX, rispetto ad altri framework come PyTorch e scikit-learn. Infine, Marco prende il sopravvento e parla dell'utilizzo del motore di runtime ONNX nella programmazione C++.

  • 00:15:00 In questa sezione, il relatore parla della sua esperienza con l'interoperabilità tra framework di machine learning e presenta il progetto ONNX come uno sforzo importante per raggiungere questo obiettivo. Dicono che non hanno riscontrato molti problemi di conversione durante la conversione di modelli tra framework, ma il problema principale si verifica quando un operatore non è supportato nel formato ONNX o nel formato ONNX Runtime. Il relatore risponde anche a una domanda sui problemi di conversione e spiega che gli operatori non supportati da ONNX possono causare problemi nella conversione.

  • 00:20:00 In questa sezione, i relatori discutono della loro esperienza con la conversione di TensorFlow in ONNX e affermano di non aver riscontrato molti problemi di conversione. Discutono anche del debug e della risoluzione dei problemi quando si tratta di manipolare tensori in C++ e menzionano l'uso di altre librerie come estensori o Python per farlo. Introducono il punto di ingresso per ONNX, onx.ai, che consente agli utenti di selezionare l'architettura e il linguaggio di programmazione desiderati e dimostrano l'uso di ONNXRuntime in C++. Dicono che il codice è lo stesso per la GPU, l'unica differenza è la libreria collegata.

  • 00:25:00 In questa sezione, il relatore mostra una demo dell'utilizzo di ONNXRuntime per caricare, ispezionare ed eseguire l'inferenza su un modello. Inizia creando un ambiente per l'API sottostante, con funzionalità opzionali come la personalizzazione del registro o del threading. Quindi crea una sessione che rappresenta l'inferenza da eseguire su un particolare modello, che può essere caricato da un percorso o da un flusso di byte. Dimostra come utilizzare un allocatore per ispezionare le informazioni del modello, come il numero e i nomi di input e output. Nota che questa demo mostra la libreria raw e che in situazioni di vita reale verrebbe utilizzato un wrapper per evitare di gestire stringhe e altre complessità.

  • 00:30:00 In questa sezione, il relatore discute un semplice modello di regressione lineare e come passare un input alla rete senza copiare i dati utilizzando un'API esterna chiamata CreateTensor. L'oratore sottolinea l'importanza di andare all'api c sotto l'api c++ quando la documentazione non è chiara. Inoltre, discutono delle varie opzioni disponibili durante l'esecuzione della sessione di inferenza, incluso il recupero parziale dell'output e la personalizzazione dei nomi di output. Infine, notano che i valori di output sono memorizzati in un vettore e sono gli stessi tensori allocati in precedenza.

  • 00:35:00 In questa sezione, il relatore discute l'accesso ai dati in C++ utilizzando la funzione get tensor mutable data e la necessità di specificare il tipo utilizzato a causa della cancellazione del tipo. L'esempio fornito mostra come stampare i valori sullo standard output utilizzando questo metodo. L'oratore menziona anche la necessità di prestare attenzione all'allocazione dei tensori e dei buffer di output e come utilizzare i buffer di output pre-allocati. La discussione si sposta quindi sull'esecuzione di un modello lineare con un provider di esecuzione GPU usando il pacchetto GPU Microsoft ML ONNXRuntime come scelta predefinita per l'esecuzione di ONNXRuntime sulla CPU. Infine, il relatore introduce brevemente due progetti dimostrativi per reti di visione: un classificatore chiamato ResNet e un rilevatore chiamato MobileNet. Il codice demo è simile all'esempio precedente e il relatore evidenzia la pre-elaborazione e la post-elaborazione coinvolte in queste reti.

  • 00:40:00 In questa sezione, il relatore mostra come utilizzare ONNXRuntime per profilare l'esecuzione di una rete neurale utilizzando un timer esterno. Aggiungendo un'opzione di profilazione durante la creazione della sessione, ONNXRuntime può produrre un file JSON che contiene il tempo di esecuzione trascorso su ciascuna fase e l'esplosione di tutti gli operatori nel grafico che erano stati eseguiti. Questo strumento può fornire ulteriori dettagli, ad esempio se il modello è in esecuzione su CPU o GPU o se viene eseguito in sequenza o in parallelo. La profilazione può aiutare a mettere a punto l'esecuzione di una rete e verificare se è in esecuzione su un altro acceleratore.

  • 00:45:00 In questa sezione, il relatore dimostra l'impatto dell'ottimizzazione sul tempo di caricamento e sul tempo di esecuzione di un modello utilizzando ONNX e ONNXRuntime in C++. La disabilitazione dell'ottimizzazione si traduce in un tempo di esecuzione significativamente più lungo, mentre l'abilitazione porta a tempi di caricamento più lunghi. Tuttavia, è possibile salvare una versione ottimizzata del modello che bilancia l'ottimizzazione e il tempo di caricamento. Il relatore mostra al pubblico come ottimizzare il modello utilizzando diverse opzioni disponibili e salvarlo. Inoltre, il relatore tocca brevemente l'esecuzione parallela e dimostra come può ridurre significativamente il tempo di elaborazione per un batch di immagini.

  • 00:50:00 In questa sezione, l'oratore discute l'esecuzione di immagini sequenziali e la contesa nel pool di thread globale, causando tempi di esecuzione più lunghi per ciascuna immagine. Menzionano anche l'uso di uno strumento di profilazione per affinare le misurazioni del tempo per i singoli input e l'esplosione di tutti gli operatori che eseguono per immagine. L'oratore spiega l'utilizzo della libreria Extensor per la manipolazione del tensore, simile a numpy per Python, utilizzata per la preelaborazione delle immagini in un classificatore ResNet più semplice. Viene anche menzionata la distinzione ONNX Runtime per i livelli base, intermedio e avanzato, con funzionalità avanzate come operatori personalizzati, arene di memoria e allocatori. Vengono discussi anche il supporto al trading e gli esempi di Python, con collegamenti a demo e diapositive fornite.

  • 00:55:00 In questa sezione, i relatori discutono di un benchmark che hanno condotto sugli algoritmi di rilevamento degli oggetti, concentrandosi sui rilevatori a uno stadio che sono utili per i dispositivi integrati. Hanno confrontato FPGA, GPU e CPU e hanno scoperto che i dispositivi NVIDIA, le CPU Intel Core E7 e gli FPGA erano le migliori piattaforme per determinati tipi di operazioni. Hanno anche affermato che esiste un certo supporto per i modelli di addestramento in ONNX, sebbene solo in Python. Alla domanda se avrebbero preso in considerazione l'utilizzo di ONNXRuntime in produzione, hanno affermato che lo stanno già utilizzando nei test e nel passaggio alla produzione. Hanno notato che anche Microsoft lo sta utilizzando in molti progetti, incluso Windows ML, e che è in sviluppo da tre anni.
 

Accelerazione del machine learning con ONNX Runtime e Hugging Face



Accelerazione del machine learning con ONNX Runtime e Hugging Face

Il video "Accelerare l'apprendimento automatico con ONNX Runtime e Hugging Face" discute la creazione della libreria Optimum di Hugging Face, che si concentra sull'accelerazione dei modelli di trasformatore dall'addestramento all'inferenza applicando facilmente il runtime ONNX. La libreria semplifica il ponte tra la libreria del trasformatore e l'accelerazione hardware, creando un toolkit di facile utilizzo per le prestazioni di produzione. Applicando le ottimizzazioni fornite da ONNX Runtime, gli utenti possono beneficiare di tutta l'accelerazione hardware, con conseguenti pipeline di inferenza più veloci. Una collaborazione all'interno della comunità Hugging Face sta abilitando l'ottimizzazione del modello da sequenza a sequenza utilizzando queste classi di pipeline di inferenza accelerata e un esempio end-to-end ha mostrato che l'utilizzo della libreria Optimum può comportare un aumento del throughput del 44% o una diminuzione della latenza conservando 99,6% della precisione del modello originale.

  • 00:00:00 In questa sezione, Jeff di Hugging Face illustra l'obiettivo dell'azienda di rendere la potenza dei modelli di trasformatore accessibile a tutte le aziende del mondo attraverso modelli e strumenti pre-addestrati facilmente accessibili. Spiega che trasferire l'apprendimento e l'attenzione è tutto ciò di cui hai bisogno la carta ha cambiato il campo dell'apprendimento automatico, ottenendo prestazioni rivoluzionarie nelle attività di elaborazione del linguaggio naturale e producendo risultati all'avanguardia in ogni singola modalità di apprendimento automatico. Jeff presenta la libreria Optimum, progettata per accelerare i modelli di trasformatore applicando facilmente il runtime ONNX, rendendo più semplice per ingegneri e sviluppatori di software l'utilizzo di questi modelli in produzione.

  • 00:05:00 In questa sezione, il relatore discute la creazione della libreria Hugging Face Optimum che si concentra sull'accelerazione dei modelli di trasformatore dall'addestramento all'inferenza. La libreria offre un toolkit di riferimento per l'accelerazione hardware con API di alto livello dedicate alle prestazioni di produzione. Il pacchetto Onnx Runtime all'interno di Optimum fornisce l'integrazione nativa di DeepSpeed, un modo per accelerare la formazione. Optimum offre anche Ort Optimizer per semplificare i modelli grafici, Rt Quantizer per ottimizzare i pesi e si rivolge a fornitori di esecuzione specifici per sfruttare le ottimizzazioni specifiche dell'hardware. Nel complesso, Optimum semplifica il ponte tra la libreria del trasformatore e l'accelerazione hardware, creando un toolkit di facile utilizzo per le prestazioni di produzione.

  • 00:10:00 In questa sezione, il relatore parla dell'ottimizzazione dei modelli di machine learning utilizzando ONNX Runtime e Hugging Face's Optimize Library. Passando da Auto Model for Task a RT Model for Task, gli utenti possono applicare facilmente le ottimizzazioni fornite da ONNX Runtime e beneficiare di tutta l'accelerazione hardware, con conseguente pipeline di inferenza più veloci. La community di Hugging Face sta inoltre collaborando per consentire l'ottimizzazione del modello da sequenza a sequenza utilizzando queste classi di pipeline di inferenza accelerata. L'esempio end-to-end delineato nel post del blog mostra che l'utilizzo della libreria Optimum può comportare un aumento del throughput del 44% o una diminuzione della latenza conservando il 99,6% della precisione del modello originale.
 

Accelerazione dell'inferenza ML su larga scala con ONNX, Triton e Seldon | PyData globale 2021



Accelerazione dell'inferenza ML su larga scala con ONNX, Triton e Seldon | PyData globale 2021

Nel video "Accelerating ML Inference at Scale with ONNX, Triton and Seldon | PyData Global 2021", Alejandro Saucedo di Seldon Technologies discute le sfide della scalabilità dell'inferenza di machine learning e come utilizzare ONNX e Triton per ottimizzare e produrre modelli. Utilizzando il modello GPT-2 TensorFlow come caso d'uso, la sessione copre la pre-elaborazione, la selezione di token ottimali e la distribuzione del modello utilizzando Tempo e il server di inferenza Triton. Saucedo sottolinea la necessità di astrarre le complessità dell'infrastruttura e facilitare una facile implementazione garantendo al tempo stesso riproducibilità e conformità. Il discorso si conclude con collaborazioni con progetti open source per la formazione end-to-end e componenti di distribuzione.

  • 00:00:00 In questa sezione Alejandro Saucedo presenta se stesso e la sua azienda, Seldon Technologies, che si concentra sull'implementazione e il monitoraggio del machine learning. Spiega che la sessione coprirà la sfida di accelerare l'inferenza dell'apprendimento automatico su larga scala adottando un approccio pratico, utilizzando il modello GPT-2 TensorFlow come caso d'uso. L'obiettivo è ottimizzare il modello utilizzando ONNX e testarlo localmente utilizzando uno strumento chiamato Tempo prima di produrlo su Kubernetes. L'obiettivo principale è astrarre le complessità dell'infrastruttura sottostante in modo che i professionisti della scienza dei dati possano concentrarsi sul lato della scienza dei dati. Saucedo spiega anche cos'è GPT-2 e le sue applicazioni, osservando che si tratta di un modello relativamente complesso che richiede una notevole quantità di calcolo per l'addestramento e l'inferenza.

  • 00:05:00 In questa sezione del video, il relatore discute l'uso di modelli preaddestrati, in particolare GPT-2, e come possono essere sfruttati per varie applicazioni, come giochi e generazione di codice. Il relatore spiega come utilizzare la libreria Hugging Face per recuperare il modello GPT-2 pre-addestrato e discute i componenti del modello, inclusi il tokenizer e il modello di testa, che vengono utilizzati per la pre-elaborazione e l'inferenza. L'oratore passa quindi attraverso un esempio di pre-elaborazione di una frase leggibile dall'uomo utilizzando il tokenizer e utilizzando la funzione di generazione per prevedere 20 token. Infine, il relatore spiega il flusso di lavoro sottostante della funzione di generazione, che esegue l'inferenza più volte per il modello, e come riconvertire l'output leggibile dalla macchina in un formato leggibile dall'uomo utilizzando il decodificatore del tokenizer.

  • 00:10:00 In questa sezione, il relatore spiega il processo di selezione del token ottimale per un modello e le sfide che i professionisti devono affrontare durante il ridimensionamento del modello. Le sfide includono la necessità di hardware specializzato, dipendenze complesse tra i componenti e la necessità di riproducibilità e conformità. Il relatore introduce quindi il formato ONNX, che è ampiamente adottato nell'industria e consente la trasformazione di modelli Python o PyTorch in un formato standardizzato per server ottimizzati da leggere e modificare per prestazioni ottimali. Tuttavia, la conversione in ONNX non è necessaria e i professionisti possono comunque distribuire direttamente i propri modelli. Il relatore introduce anche il framework Tempo, che semplifica il processo di distribuzione e ridimensionamento dei modelli.

  • 00:15:00 In questa sezione, il relatore discute come produrre il modello utilizzando Tempo e il server di inferenza Triton. Il primo passaggio consiste nel definire un wrapper Tempo per il modello GPT-2 e quindi eseguire il modello ottimizzato nel server ottimizzato di Nvidia. Successivamente, è necessario definire una logica del trasformatore personalizzata per convertire i token leggibili dalla macchina in stringhe leggibili dall'uomo, consentendo agli utenti di interagire con il modello in modo facile e semplice. Dopo aver testato il modello in Docker in locale, può essere distribuito nello stack Kubernetes con un semplice comando. Viene mostrato il codice per la definizione del wrapper e il relatore spiega che questo metodo consente di utilizzare diversi tipi di framework di modelli, rendendolo uno strumento versatile per la produzione dell'inferenza ML.

  • 00:20:00 In questa sezione, il relatore discute su come creare una logica di trasformatore personalizzata utilizzando i modelli PyTorch con ONNX e Triton. Innanzitutto, la trascrizione spiega come inviare token tramite questa logica personalizzata, utilizzando la conversione di stringhe e la funzione di previsione. Il relatore spiega quindi come caricare artefatti dal modello GPT2 e definire la funzione di previsione come endpoint REST, prima di scorrere i token e generare la risposta. Il punto chiave è che, passando i token attraverso il modello e ripetendo diverse esecuzioni, possiamo restituire una stringa da questa complessa infrastruttura. Inoltre, il relatore afferma che questo approccio può essere implementato facilmente in Kubernetes tramite la funzione di distribuzione remota.

  • 00:25:00 In questa sezione, il relatore discute l'accelerazione del machine learning su larga scala, concentrandosi in particolare sull'ottimizzazione di un modello GPT-2 TensorFlow con ONNX e sulla sua esecuzione con Triton utilizzando Docker, quindi sulla sua distribuzione in Kubernetes seguendo le best practice. L'obiettivo è ridurre al minimo le perdite dell'infrastruttura sottostante e garantire un'implementazione affidabile con il minimo sforzo. Il relatore menziona anche le loro collaborazioni con i team Tempo e Metaflow per fornire formazione end-to-end e componenti di implementazione in progetti open source. Il discorso si conclude con una sessione di domande e risposte.
 

AI Show Live - Episodio 62 - Inferenza multipiattaforma con ONNX Runtime



AI Show Live - Episodio 62 - Inferenza multipiattaforma con ONNX Runtime

Nell'episodio "Multiplatform Inference with the ONNX Runtime" di AI Show Live, gli host mostrano come distribuire un modello di super risoluzione e un modello di rilevamento degli oggetti su più piattaforme utilizzando il framework ONNX Runtime. Discutono le fasi di pre-elaborazione e post-elaborazione per entrambe le piattaforme mobile e web, dimostrano i vantaggi dell'utilizzo di un'unica soluzione, spiegano il processo di conversione di un modello PyTorch in un modello ONNX e mostrano come pre-elaborare i dati per l'inferenza con ONNX Tempo di esecuzione. Inoltre, dimostrano l'implementazione del modello di elaborazione del linguaggio naturale BERT utilizzando Onnx Runtime in C#. Il codice ei modelli open source sono disponibili per la personalizzazione per le soluzioni degli utenti.

Nella seconda parte dell'AI Show Live, i relatori trattano una varietà di argomenti relativi all'inferenza della corsa con ONNX Runtime. Dimostrano il processo di classificazione del testo utilizzando un esempio tratto dagli esempi di inferenza ONNX ed esplorano l'installazione di pacchetti e strumenti necessari per creare modelli di classificazione BERT in C#. Discutono anche dell'uso di IntelliCode con VS 2022 e illustrano i passaggi della preparazione per l'inferenza del modello, inclusa la creazione di tensori, la configurazione della sessione di inferenza del runtime ONNX e la post-elaborazione dell'output. Inoltre, toccano l'importanza di consultare la documentazione del modello e selezionare il tokenizer corretto per risultati accurati.

  • 00:00:00 In questa sezione dell'AI Show Live, la conduttrice Cassie Breviu presenta gli ospiti speciali Victor, Kalia e David, stagisti del team ONNX Runtime, che presenteranno un progetto su come implementare un modello di super risoluzione e un modello di rilevamento degli oggetti su dispositivi mobili e Web utilizzando il framework ONNX Runtime. Il progetto mira a migliorare il rilevamento degli oggetti sulle immagini attraverso l'output in super risoluzione, dimostrando la capacità del runtime ONNX per l'implementazione multipiattaforma.

  • 00:05:00 In questa sezione, gli host introducono un progetto che utilizza React Native ed Expo per creare un'app che può essere distribuita su diverse piattaforme per dispositivi mobili e Web. Spiegano che l'utilizzo della funzionalità dei moduli nativi di React Native consente l'implementazione di funzioni e modelli in altri linguaggi come C++ e Java, che possono essere utilizzati nel codice JavaScript. Questa funzione consente loro di scrivere funzioni di pre-elaborazione in un linguaggio diverso, come la loro funzione get pixels scritta in Java, per gestire meglio i dati, rendendo più facile ottenere i dati pixel di un'immagine per i loro modelli di machine learning.

  • 00:10:00 In questa sezione del video di YouTube, il relatore discute le fasi di pre-elaborazione e post-elaborazione di un'applicazione mobile che utilizza un modello di super risoluzione. A differenza di altri modelli che funzionano con valori RGB, questo modello funziona solo con il componente di luminanza (Y) di un'immagine. Pertanto, il relatore mostra come convertire un'immagine RGB in un'immagine YCbCr per estrarre il componente Y. Il relatore mostra anche come caricare il modello nell'ambiente mobile utilizzando il formato ONNX Runtime, che fornisce una build ottimizzata e di dimensioni ridotte per applicazioni mobili e web. Infine, viene eseguita la fase di post-elaborazione per elaborare l'output del modello.

  • 00:15:00 In questa sezione del video, l'host e l'ospite dimostrano la funzione di post-elaborazione che prende un array dal loro modello e riporta YCbCr in RGB. Quindi utilizzano la funzione di un modello nativo per ottenere l'origine dell'immagine per la visualizzazione. La pre-elaborazione e la post-elaborazione in linguaggi non Python tendono ad essere la parte difficile quando si rendono operativi e si deducono modelli in altri linguaggi. Mostrano una demo in cui il modello viene distribuito localmente su un dispositivo mobile e successivamente riutilizzano il codice per distribuire lo stesso modello in un browser Web. Un visualizzatore chiede se lo stesso può essere fatto in C#, cosa che l'ospite ritiene possibile.

  • 00:20:00 in questa sezione, Kalia dimostra le differenze di pre e post-elaborazione per l'esecuzione del modello sul Web rispetto alle piattaforme mobili. Sul Web, le tele off-screen e l'API Canvas vengono utilizzate per ottenere i dati dell'immagine, mentre sui dispositivi mobili non è necessario andare avanti e indietro tra le API. Una volta che la tela fuori schermo disegna l'immagine, la funzione di pre-elaborazione regola i dati dell'immagine sul canale y, utilizzato dal modello a super risoluzione. La funzione di post-elaborazione converte quindi i dati dal formato y cbcr al formato rgb in modo che possano essere visualizzati su uno schermo. Il codice di Kalia per le funzioni di pre e post-elaborazione può essere utilizzato in Java, C# o React.

  • 00:25:00 In questa sezione del video, i relatori discutono dei vantaggi dell'utilizzo di un'unica soluzione per più dispositivi, ad esempio con ONNX Runtime. Dimostrano come eseguire un modello mobile su una piattaforma Web e i vantaggi dell'inferenza sul dispositivo, tra cui l'efficienza dei costi e la privacy. I relatori spiegano anche il processo di conversione di un modello PyTorch in un modello ONNX e quindi in un formato ONNX Runtime. Infine, introducono l'aspetto del rilevamento degli oggetti del progetto e spiegano come hanno utilizzato ONNX Runtime per rilevare gli oggetti nelle immagini.

  • 00:30:00 In questa sezione del video, il presentatore discute i dettagli del modello utilizzato nel progetto, che è un modello AI di rilevamento di oggetti che utilizza la super risoluzione per aumentare la precisione del rilevamento complessivo. Spiegano le differenze nella pre-elaborazione e nella post-elaborazione tra il loro modello e il modello discusso in precedenza e descrivono in dettaglio i quattro output del loro modello, tra cui posizione, classi, punteggio e numero di rilevamenti. Inoltre, mostrano come hanno utilizzato lo strumento Netron per analizzare e scomporre il loro modello e come hanno regolato la pre-elaborazione per mantenere i valori RGB coerenti affinché il modello rilevi gli oggetti in modo accurato.

  • 00:35:00 In questa sezione, il presentatore dimostra l'esecuzione di un modello su una foto pre-super risoluzione e mostra i risultati del rilevamento dell'oggetto, che identifica con precisione il cane nella foto. L'utilizzo del modello a super risoluzione migliora l'immagine e porta a una casella di rilevamento più precisa e più piccola. Questo dimostra la portabilità e l'uso pratico del runtime ONNX e mostra le capacità di eseguire il modello su un modello ottimizzato sul dispositivo. Il codice e i modelli open source sono inoltre disponibili per gli utenti per l'accesso e la personalizzazione per le proprie soluzioni.

  • 00:40:00 vedere in questa sezione è una dimostrazione del modello di elaborazione del linguaggio naturale BERT utilizzando Onnx Runtime in C#. L'host spiega che mentre ci sono molti esempi di utilizzo di BERT in Python, hanno preferito usare C#. Hanno iniziato con il modello senza custodia di base BERT prima di passare a un esempio dai documenti Onnx Runtime per rispondere alle domande. Con l'API dei trasformatori Hugging Face, sono stati in grado di acquisire facilmente il modello pre-addestrato ed esportarlo nel formato Onnx. Quindi mostrano come fornire input al modello ed eseguirlo usando Onnx Runtime in C#.

  • 00:45:00 In questa sezione, il relatore discute la fase di pre-elaborazione per il modello, in cui il testo viene tokenizzato. Mostrano come vengono utilizzati gli assi dinamici per consentire diverse lunghezze di input e come utilizzano il tokenizer per pre-elaborare l'input in Do diesis. Introducono anche Boat Tokenizer, un progetto open source che consente loro di tokenizzare il modello BERT in C diesis, cosa non possibile con il pacchetto transformers basato su Python. L'input codificato viene quindi restituito come ID di input, che sono i diversi token associati a parole diverse nel modello.

  • 00:50:00 In questa sezione, il relatore discute l'implementazione dei modelli BERT in C# creando un'app console. Spiegano che l'utilizzo di un'app console è utile quando si sperimentano diverse implementazioni C# di modelli e può essere integrata in un'applicazione di produzione, se necessario. Il relatore dimostra come utilizzare la tokenizzazione per ottenere i token effettivi di una frase e come codificare l'input con gli ID associati ai token. Mostrano anche i grandi vocabolari utilizzati e come vengono trasformati in oggetti da utilizzare nella tokenizzazione.

  • 00:55:00 In questa sezione, il relatore discute su come preelaborare i dati e prepararli per l'inferenza con ONNX Runtime. Dimostrano come convertire i dati in tensori, necessari per il processo di inferenza, e come creare un elenco di oggetti valore ONNX denominati da passare alla sessione di inferenza. Menzionano anche l'importanza di impostare etichette corrette per i dati di input. Nel complesso, forniscono suggerimenti utili per lavorare con ONNX Runtime e preparare i dati per l'inferenza di machine learning.

  • 01:00:00 In questa sezione, l'oratore esegue i valori di inferenza e ottiene i log di inizio e di fine. I risultati vengono restituiti nell'ordine dell'indice delle etichette. Per ottenere la risposta prevista, è necessario ottenere prima il valore massimo e l'indice del valore massimo dai logit iniziali e finali. Vengono visualizzati i nomi di output e possono essere visualizzati i valori dei token codificati, che vengono utilizzati per confrontare se i token sono corretti. Il relatore dimostra anche il processo di conversione del codice di inferenza Python in C# per rendere operativi i modelli. Infine, suggeriscono di sperimentare più modelli, convertire il codice di inferenza Python in C# e perfezionare i modelli.

  • 01:05:00 In questa sezione del video, l'host esplora la classificazione del testo utilizzando il runtime ONNX e un esempio dagli esempi di inferenza ONNX, che è una buona risorsa per trovare esempi su come utilizzare ONNX. L'esempio utilizza un tokenizer di Hugging Face e una versione più piccola e distillata del tokenizer racchiuso nella base. L'host imposta il percorso in base al nome del modello, quindi imposta gli input per il modello, che ha assi dinamici a causa della lunghezza variabile della frase. Gli input per il modello di classificazione del testo sono gli ID di input e la maschera di attenzione. L'host afferma che sono in fase di sviluppo estensioni per ONNX e che la nuova versione del runtime supporta .NET six e Maui. Sebbene l'esempio di pre-elaborazione per il modello non sia immediatamente disponibile, l'host prevede di utilizzare Netron per capirlo.

  • 01:10:00 riassumere questa sezione. In questa sezione del video, il relatore rinomina il modello precedente in modo meno informativo e vi aggiunge una classificazione testuale. Proseguono creando un nuovo progetto utilizzando C# e .NET 6 e spiegando la nuova funzionalità di disporre di un semplice modello di console con script. L'oratore copia e incolla parte del codice del progetto precedente in quello nuovo e aggiunge l'input BERT, che ora ha solo due output. L'oratore riconosce che dovrebbe creare un file separato per questo input, ma sceglie invece di scriverlo.

  • 01:15:00 In questa sezione, il relatore discute l'installazione di vari pacchetti e strumenti per creare modelli di classificazione Burp in C#. Installano il pacchetto tokenizer richiesto e i pacchetti di runtime ONNX, insieme al pacchetto gestito. I pacchetti di attributi non necessari vengono commentati e l'oratore aggiunge una frase di input e un tokenizer per ottenere i token per la codifica. L'oratore menziona anche VS 2022 IntelliCode, che utilizza il modello GPT-2 per addestrarsi sulla base di codice e viene eseguito localmente.

  • 01:20:00 In questa sezione del video, il presentatore parla dell'utilizzo di Intellicode (precedentemente noto come Intellisense) con VS 2022, uno strumento basato sull'intelligenza artificiale che può apprendere da una base di codice esistente. Quindi passano a lavorare con il tokenizer e il valore codificato per una frase. Discutono anche del percorso del modello e di come incollare il modello in un'app console per scopi sperimentali, sebbene esistano modi migliori per gestirlo per un'applicazione di produzione. Infine, il relatore crea una sessione di inferenza per il modello BERT.

  • 01:25:00 In questa sezione del video, i relatori illustrano i passaggi necessari per prepararsi all'esecuzione di un'inferenza utilizzando ONNX Runtime. Iniziano creando tensori e convertendoli in un tensore. Quindi creano un input utilizzando gli ID di input e una maschera di attenzione e un elenco di elenchi di elenchi. Dopo aver creato un valore ONNX denominato, eseguono il modello e discutono le opzioni per la configurazione della sessione di inferenza del runtime ONNX, incluse diverse ottimizzazioni del grafico e provider di esecuzione. Infine, recuperano l'output, che in questo caso ha un solo valore.

  • 01:30:00 In questa sezione della trascrizione, l'oratore esamina il codice per l'utilizzo di un modello con ONNX Runtime. Stanno spiegando come hanno chiamato le etichette in modo che siano le stesse per l'utilizzo del modello ONNX e come possono eseguire un test di integrità per vedere se tutto funziona. Impostano un punto di interruzione per scorrere il codice e verificare se l'input, la maschera di attenzione e gli ID sono corretti. Una volta che l'input è corretto, caricano il modello, creano il loro tensore, sessione e inferenza. Quindi spiegano che devono post-elaborare per capire come trasformarlo in un risultato e sono andati a cercare del codice di pre-elaborazione.

  • 01:35:00 In questa sezione del video, il relatore discute il processo di elaborazione di due valori ottenuti da un modello di classificazione per determinare il sentimento positivo e negativo di una data frase. Dimostrano l'uso di un tokenizer per tokenizzare la frase e ottenerne i token, che usano per confermare la loro comprensione di come eseguire il processo in C#. Menzionano anche l'importanza di consultare la documentazione del modello e selezionare il tokenizer corretto per garantire un'accurata tokenizzazione.

  • 01:40:00 In questa sezione, gli host dell'AI Show Live discutono del progetto Optimum di Hugging Face che implementa ottimizzazioni per l'apprendimento automatico, inclusi acceleratori per l'addestramento e diverse integrazioni hardware utilizzando il runtime ONNX sul back-end. Gli host esaminano anche le fasi di pre-elaborazione per il tokenizer e la creazione della sessione per il modello di classificazione del testo. Esplorano la versione codificata di una frase e riutilizzano del codice precedentemente scritto per creare la sessione per il loro modello.

  • 01:45:00 In questa sezione, il relatore si prepara all'inferenza del modello esportando il modello ed elaborando i dati di input. Confermano che è stato utilizzato il tokenizer corretto per tokenizzare i dati di input eseguendo un controllo di integrità dei token codificati. Tuttavia, scoprono che manca la maschera di input e tornano indietro per esaminare il modello e il codice per individuare il problema. Nonostante l'incertezza sul tokenizer utilizzato, confermano che i token codificati sono corretti e procedono a generare la maschera di input.

  • 01:55:00 In questa sezione del video, il presentatore prova a configurare gli input e gli output per l'esecuzione del modello. Incontrano alcuni problemi con la maschera di input e la maschera di attenzione e alla fine si rendono conto che possono semplicemente prendere i token e inviarli senza dover eseguire alcuna elaborazione aggiuntiva. Quindi spostano la loro attenzione sull'input del modello, che è un po' più complicato poiché richiede due input e deve specificare la forma per il batch. Il relatore usa il runtime ONNX per configurare gli input e gli output e lo testa per vedere se produce gli stessi risultati del modello C#.
Motivazione: