Quali strumenti abbiamo a disposizione per il Machine Learning?
Per sviluppare modelli di Machine Learning (ML) e Deep Learning (DL) esistono diverse soluzioni. A riguardo posso sicuramente sconsigliarvi di passare per la via “from scratch”, ovvero di riscrivere da zero librerie di ML o DL , cosa per carità fattibile, per motivi didattici, ma assolutamente inutile agli scopi professionali a meno di necessità specifiche che non sto qui a considerare.
Le opportunità a nostra disposizione, dunque, sono numerose e come sempre esiste un buon compromesso per ogni use case. Evitando, pertanto, di abbracciare filosofie o brand proviamo a vedere in generale cosa ci offre il mercato. Inizio da una breve lista di possibili soluzioni ed anticipo che questo che segue più che un articolo voglio considerarlo appunti in progress… cercherò infatti nel tempo di riportare mie osservazioni o di terzi per tentare di farci un’idea il più esaustiva possibile sullo stato degli strumenti a nostra disposizione.
Tensorflow | |
Theano | |
Cognitive Toolkit (CNTK) | |
Caffe | |
Caffe2 | |
Keras | |
Torch | |
PyTorch | |
OpenCV | |
Accord.net | |
Spark Mlib | |
Sci-kit Learn | |
MLPAck | |
Matlab | |
MXnet |
Tensorflow
Tensorflow è un strumento molto potente sviluppato dal Google Brain team di Google e rilasciato come software opensource sotto licenza Apache 2.0 nel Novembre 2015. E’ un framework che ho ho testato e si presta molto bene per la creazione di differenti modelli. Implementa nativamente sia reti Convoluzionali (CNN) ad esempio per la classificazione di immagini e sia reti RNN come le seq2seq per la gestione di traduzioni automatiche, robochat … in accoppiata con numpy ritengo che sia veramente completo. Per sviluppare il vostro progetto software è possibile usare python che sebbene sia un linguaggio interpretato può sfruttare le lib compilate in c++ di tensorflow per ottenere interessanti prestazioni. Tensorflow è stato sviluppato per poter sfruttare al meglio le GPU.
Theano
Theano è un altro framework molto diffuso anche se devo dire che non lo conosco bene per esprimere un giudizio approfondito, per questo farò appello a dati di letteratura. Theano usa Python come interfaccia di sviluppo e da quel pò che ho poututo verificare è abbastanza evoluto sulla reti Convolutionali. Come Tensorflow anche Theano può sfruttare la GPU per compilare nuovi modelli ed è rilasciato sotto licenza BSD.
Caffe
Caffe è un framework sviluppato da Berkeley AI Research (BAIR). Yangqing Jia ha creato il progetto durante il suo dottorato all’Università di Berkeley e poi rilasciato sotto licenza BSD. A quanto pare Caffe è molto performante in fase di training su reti CNN. La velocità rende il framwork perfetto per gli esperimenti di ricerca. Caffe può elaborare oltre 60 milioni di immagini al giorno con una singola GPU NVIDIA K40. Cioè 1 ms / immagine per l’inferenza e 4 ms / immagine per l’apprendimento. Caffe probabilemtente è tra le implementazioni di convnet più veloci disponibili. Il dato delle performce può essere verificato anche nelle tabelle successive.
Torch
Torch è un framework specializzato nel calcolo scientifico ed oggi ha include algoritmi di machine learning. È facile da usare grazie a un linguaggio di scripting facile e veloce, LuaJIT. Come Tensorflow può sfruttare la GPU per velocizzare la fase di calcolo di nuovi nuovi modelli ed è rilasciato sotto licenza BSD. Torch viene fornito con numerose librerie di machine learning specilizzate nella computer vision, elaborazione dei segnali, elaborazione parallela, immagini, video, audio ed implementa reti neurali standard offrendo massima flessibilità nell’implementazione di topologie di reti neurali complesse. È possibile, infatti, creare grafici arbitrari di reti neurali e parallelizzarli su CPU e GPU in modo efficiente. Esiste, inoltre, un’implementazione di Torch per Python che si chiama PyTorch. Molto interessante è l’articolo di towardsdatascience che spiega alcune differenze tra Pytorch e Tensorflow.
Di seguito un primo benchmark tra i tool citati in cui si apprezza la differenza prestazionale dei vari framework al variare della GPU e di quanto sia performate lo stesso se confrontato con una CPU. Fonte di dati microway
OpenCV
OpenCV è una libreria open source specilizzata nel trattamento di immagini ed apprendimento automatico. OpenCV è stato rilasciato sotto licenza BSD e quindi è gratuito sia per uso accademico che commerciale. Le interfacce di sviluppo sono diverse : C ++, C, Python e Java e gira sia sotto Windows, Linux, Mac OS, iOS e Android. Attualmente ha il supporto per GPU infatti è stato progettato per massimizzare l’efficienza computazionale con una forte attenzione per le applicazioni in tempo reale. Ovviamente è scritto in C / C ++. I campi di applicazione sono diverse ma dal mio punto di vista è un ottimo strumento quando si deve lavorare con le immagini e non si vuole spendere troppo tempo nella curva di apprendimento. Ho testato OpenCv implementando un’ appliccazione per il face recognition realtime ed il risultato è soddisfacente.
Cognitive Toolkit (CNTK)
Non ho ancora avuto modo di tetstare CNTK, per cui in questo caso non voglio esprimere giudizi. E’ un framwork rilasciato da Microsoft in versione opensource sotto licenza MIT license. Pare che abbia un buon riscontro in termini di prestazione. Mi riservo di approfondire in futuro.
Altre considerazioni
Ritengo molto interesante ed utile il lavoro sviluppato da ilkarman , che ha realizzato un bel test per avere un benchmark su diversi dei framework in lista.
Tempo di training per reti CNN (VGG-style, 32bit) basati sul dataset CIFAR-10
DL Library | K80/CUDA 8/CuDNN 6 | P100/CUDA 8/CuDNN 6 |
---|---|---|
Caffe2 | 148 | 54 |
Chainer | 162 | 69 |
CNTK | 163 | 53 |
MXNet(Gluon) | 152 | 57 |
Keras(CNTK) | 194 | 76 |
Keras(TF) | 241 | 76 |
Keras(Theano) | 269 | 93 |
Tensorflow | 173 | 57 |
Lasagne(Theano) | 253 | 65 |
MXNet(Module API) | 145 | 52 |
PyTorch | 169 | 51 |
Julia – Knet | 159 | ?? |
R – MXNet | ??? | ?? |
R – Keras(TF) | 205 | 72 |
CIFAR-10 è un dataset di 60000 immagini 32×32 pixel suddivise in 10 categorie , con 6000 immagini per categoria.
Tempo medio in (s) per effettuare un’estrazione delle Feature su 1000 immagini del dataset ResNet-50
DL Library | K80/CUDA 8/CuDNN 6 | P100/CUDA 8/CuDNN 6 |
---|---|---|
Caffe2 | 14.1 | 7.9 |
Chainer | 9.3 | 2.7 |
CNTK | 8.5 | 1.6 |
MXNet(Gluon) | 1.7 | |
Keras(CNTK) | 21.7 | 5.9 |
Keras(TF) | 10.2 | 2.9 |
Tensorflow | 6.5 | 1.8 |
MXNet(Module API) | 7.7 | 1.6 |
PyTorch | 7.7 | 1.9 |
Julia – Knet | 6.3 | ??? |
R – MXNet | ??? | ??? |
R – Keras(TF) | 17 | 7.4 |
Le tabelle sono molto interessanti per comprendere le perfomance dei framework sia in fase di training che di prediction.
Infine vi consiglio di dare un occhio anche alla tabella di sintesi che si può trovare su wikipedia e di cui riporto solo alcuni dati:
Framework
|
Licenza | Open source | GPU | RNN | CNN | DBNs |
Caffe | BSD license | Yes | Yes | Yes | Yes | No |
Deeplearning4j | Apache 2.0 | Yes | Yes | Yes | Yes | Yes |
Dlib | Boost Software License | Yes | Yes | No | Yes | Yes |
DataMelt(DMelt) | Freemium | Yes | No | No | No | No |
Intel Data Analytics Acceleration Library | Apache License 2.0 | Yes | No | Yes | ||
Intel Math Kernel Library | Proprietary | No | No | Yes | Yes | |
Keras | MIT license | Yes | Yes | Yes | Yes | Yes |
MATLAB + Neural Network Toolbox | Proprietary | No | Train with Parallel Computing Toolbox and generate CUDA code with GPU Coder[17] | Yes | Yes | No |
Microsoft Cognitive Toolkit | MIT license | Yes | Yes | Yes | Yes | No |
Apache MXNet | Apache 2.0 | Yes | Yes | Yes | Yes | Yes |
Neural Designer | Proprietary | No | No | No | No | No |
OpenNN | GNU LGPL | Yes | Yes | No | No | No |
PyTorch | BSD license | Yes | Yes | Yes | Yes | |
Apache SINGA | Apache 2.0 | Yes | Yes | Yes | Yes | Yes |
TensorFlow | Apache 2.0 | Yes | Yes | Yes | Yes | Yes |
Theano | BSD license | Yes | Yes | Yes | Yes | Yes |
Torch | BSD license | Yes | Yes | Yes | Yes | Yes |
Wolfram Mathematica | Proprietary | No | Yes | Yes | Yes | Yes |
Voglio infine segnalare anche un bel tool di simulazione: neuraldesigner. Ritengo molto utile questo strumento per effettuare dei test in fase di studio perchè è possibile effettuare in modo molto rapido anche semplici esperimenti su reti feedforward. Lo strumento offre diversi report utili per capire in via preventiva e post training il comportamento della rete neurale progettata. E’ molto interessante anche la possibilità di esportare il modello addestrato in uno dei formati suuportati tra cui ad esempio python.
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments