Quali strumenti abbiamo a disposizione per il Machine Learning?

AI, INTELLIGENZA ARTIFICIALE

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.

 

 

 

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments