Apache MXNet - Introduzione

Questo capitolo evidenzia le funzionalità di Apache MXNet e parla dell'ultima versione di questo framework software di deep learning.

Cos'è MXNet?

Apache MXNet è un potente strumento di framework software di deep learning open source che aiuta gli sviluppatori a creare, addestrare e distribuire modelli di deep learning. Negli ultimi anni, dall'assistenza sanitaria al trasporto alla produzione e, di fatto, in ogni aspetto della nostra vita quotidiana, l'impatto del deep learning è stato diffuso. Al giorno d'oggi, il deep learning è ricercato dalle aziende per risolvere alcuni problemi difficili come il riconoscimento facciale, il rilevamento di oggetti, il riconoscimento ottico dei caratteri (OCR), il riconoscimento vocale e la traduzione automatica.

Questo è il motivo per cui Apache MXNet è supportato da:

  • Alcune grandi aziende come Intel, Baidu, Microsoft, Wolfram Research, ecc.

  • Provider di cloud pubblico tra cui Amazon Web Services (AWS) e Microsoft Azure

  • Alcuni grandi istituti di ricerca come Carnegie Mellon, MIT, University of Washington e Hong Kong University of Science & Technology.

Perché Apache MXNet?

Esistono varie piattaforme di deep learning come Torch7, Caffe, Theano, TensorFlow, Keras, Microsoft Cognitive Toolkit, ecc., Quindi potresti chiederti perché Apache MXNet? Diamo un'occhiata ad alcuni dei motivi alla base:

  • Apache MXNet risolve uno dei maggiori problemi delle piattaforme di deep learning esistenti. Il problema è che per utilizzare le piattaforme di deep learning è necessario apprendere un altro sistema per un diverso sapore di programmazione.

  • Con l'aiuto di Apache MXNet, gli sviluppatori possono sfruttare tutte le funzionalità delle GPU e del cloud computing.

  • Apache MXNet può accelerare qualsiasi calcolo numerico e pone un'enfasi particolare sull'accelerazione dello sviluppo e della distribuzione di DNN (reti neurali profonde) su larga scala.

  • Fornisce agli utenti le capacità di programmazione sia imperativa che simbolica.

Varie caratteristiche

Se stai cercando una libreria di deep learning flessibile per sviluppare rapidamente ricerche di deep learning all'avanguardia o una piattaforma robusta per spingere il carico di lavoro di produzione, la tua ricerca termina su Apache MXNet. È a causa delle seguenti caratteristiche:

Formazione distribuita

Che si tratti di formazione multi-GPU o multi-host con un'efficienza di scalabilità quasi lineare, Apache MXNet consente agli sviluppatori di ottenere il massimo dal proprio hardware. MXNet supporta anche l'integrazione con Horovod, un framework di apprendimento profondo distribuito open source creato su Uber.

Per questa integrazione, di seguito sono riportate alcune delle API distribuite comuni definite in Horovod:

  • horovod.broadcast()

  • horovod.allgather()

  • horovod.allgather()

A questo proposito, MXNet ci offre le seguenti funzionalità:

  • Device Placement - Con l'aiuto di MXNet possiamo facilmente specificare ogni struttura dati (DS).

  • Automatic Differentiation - Apache MXNet automatizza la differenziazione, ovvero i calcoli derivati.

  • Multi-GPU training - MXNet ci consente di raggiungere l'efficienza di scalabilità con il numero di GPU disponibili.

  • Optimized Predefined Layers - Possiamo codificare i nostri livelli in MXNet e ottimizzare anche i livelli predefiniti per la velocità.

Ibridazione

Apache MXNet fornisce ai suoi utenti un front-end ibrido. Con l'aiuto dell'API Gluon Python può colmare il divario tra le sue capacità imperative e simboliche. Può essere fatto chiamando la sua funzionalità di ibridazione.

Calcolo più veloce

Le operazioni lineari come decine o centinaia di moltiplicazioni di matrici sono il collo di bottiglia computazionale per le reti neurali profonde. Per risolvere questo collo di bottiglia MXNet fornisce:

  • Calcolo numerico ottimizzato per GPU

  • Calcolo numerico ottimizzato per ecosistemi distribuiti

  • Automazione di flussi di lavoro comuni con l'aiuto del quale è possibile esprimere brevemente lo standard NN.

Associazioni linguistiche

MXNet ha una profonda integrazione in linguaggi di alto livello come Python e R. Fornisce anche supporto per altri linguaggi di programmazione come-

  • Scala

  • Julia

  • Clojure

  • Java

  • C/C++

  • Perl

Non abbiamo bisogno di imparare alcun nuovo linguaggio di programmazione, invece MXNet, combinato con la funzione di ibridazione, consente una transizione eccezionalmente fluida da Python alla distribuzione nel linguaggio di programmazione di nostra scelta.

Ultima versione MXNet 1.6.0

Apache Software Foundation (ASF) ha rilasciato la versione stabile 1.6.0 di Apache MXNet il 21 febbraio 2020 con licenza Apache 2.0. Questa è l'ultima versione di MXNet a supportare Python 2 poiché la comunità MXNet ha votato per non supportare più Python 2 in ulteriori versioni. Diamo un'occhiata ad alcune delle nuove funzionalità che questa versione offre ai suoi utenti.

Interfaccia compatibile con NumPy

Grazie alla sua flessibilità e generalità, NumPy è stato ampiamente utilizzato da professionisti, scienziati e studenti di Machine Learning. Ma come sappiamo, gli acceleratori hardware di questi giorni come le unità di elaborazione grafica (GPU) sono stati sempre più assimilati in vari toolkit di Machine Learning (ML), gli utenti di NumPy, per sfruttare la velocità delle GPU, devono passare a nuovi framework con sintassi diversa.

Con MXNet 1.6.0, Apache MXNet si sta muovendo verso un'esperienza di programmazione compatibile con NumPy. La nuova interfaccia fornisce usabilità ed espressività equivalenti agli operatori che hanno familiarità con la sintassi di NumPy. Insieme a questo MXNet 1.6.0 consente anche al sistema Numpy esistente di utilizzare acceleratori hardware come le GPU per accelerare i calcoli su larga scala.

Integrazione con Apache TVM

Apache TVM, uno stack di compilatore di deep learning end-to-end open source per backend hardware come CPU, GPU e acceleratori specializzati, mira a colmare il divario tra i framework di deep learning incentrati sulla produttività e i backend hardware orientati alle prestazioni . Con l'ultima versione MXNet 1.6.0, gli utenti possono sfruttare Apache (incubazione) TVM per implementare kernel operatore ad alte prestazioni nel linguaggio di programmazione Python. I due principali vantaggi di questa nuova funzionalità sono i seguenti:

  • Semplifica il precedente processo di sviluppo basato su C ++.

  • Consente la condivisione della stessa implementazione su più back-end hardware come CPU, GPU, ecc.

Miglioramenti alle funzionalità esistenti

Oltre alle funzionalità sopra elencate di MXNet 1.6.0, fornisce anche alcuni miglioramenti rispetto alle funzionalità esistenti. I miglioramenti sono i seguenti:

Raggruppamento di operazioni in base agli elementi per GPU

Come sappiamo, le prestazioni delle operazioni basate sugli elementi dipendono dalla larghezza di banda della memoria e questo è il motivo, concatenare tali operazioni può ridurre le prestazioni complessive. Apache MXNet 1.6.0 esegue la fusione di operazioni in termini di elementi, che in realtà genera operazioni di fusione just-in-time come e quando possibile. Tale fusione operativa basata sugli elementi riduce anche le esigenze di archiviazione e migliora le prestazioni complessive.

Semplificare espressioni comuni

MXNet 1.6.0 elimina le espressioni ridondanti e semplifica le espressioni comuni. Tale miglioramento migliora anche l'utilizzo della memoria e il tempo di esecuzione totale.

Ottimizzazioni

MXNet 1.6.0 fornisce anche varie ottimizzazioni alle funzionalità e agli operatori esistenti, che sono i seguenti:

  • Precisione mista automatica

  • API Gluon Fit

  • MKL-DNN

  • Grande supporto tensore

  • TensorRT integrazione

  • Supporto gradiente di ordine superiore

  • Operators

  • Profiler delle prestazioni dell'operatore

  • Importazione / esportazione ONNX

  • Miglioramenti alle API Gluon

  • Miglioramenti alle API dei simboli

  • Più di 100 correzioni di bug