Azure Machine Learning Service è l’ultima offerta di Microsoft per sviluppatori e data scientist per quanto riguarda il machine learning e il deep learning in cloud. Il servizio si aggiunge a una suite di prodotti AI di Azure che include già numerosi kit rivolti all’intelligenza artificiale, chatbot e servizi IoT edge, macchine virtuali per la data science e servizi predefiniti per visione, linguaggio, comprensione vocale, conoscenza e ricerca.

I toolkit AI includono Visual Studio Code Tools for AI, il già noto Azure Machine Learning Studio, gli strumenti di deep learning MMLSpark per Apache Spark e il Microsoft Cognitive Toolkit precedentemente noto come CNTK, che sta per essere rimpiazzato a favore di altri framework per machine learning e deep learning.

L’utilizzo di risorse cloud per il training di modelli di deep learning ha senso in molti casi d’uso. L’utilizzo del cloud per il traning non sostituisce necessariamente la convenienza e il basso costo operativo dell’utilizzo del proprio computer per la creazione di modelli, specialmente se parliamo di macchine con molta RAM e con una GPU come la Nvidia Titan RTX. Il cloud offre però l’opportunità di aggiungere risorse di elaborazione secondo le proprie necessità, riducendo potenzialmente il tempo necessario per completare gli esperimenti e trovare un modello predittivo sufficientemente accurato.

Tutti i principali servizi cloud offrono ora l’integrazione di ambienti di sviluppo per machine learning e deep learning. In AWS questo ruolo è svolto principalmente da Amazon SageMaker. Sulla piattaforma cloud di Google ci sono invece Cloud Machine Learning Engine e la versione beta di Cloud AutoML. Sul cloud IBM parliamo invece, e quasi esclusivamente, di IBM Watson Studio.

Azure Machine Learning rappresenta un’evoluzione dell’approccio di Microsoft a un ambiente di sviluppo di machine learning in cloud. Il vecchio (ma ancora attivo) Machine Learning Studio è un ambiente di progettazione drag-and-drop economico e piuttosto essenziale per l’intera pipeline di analisi dei dati. Fornisce una buona selezione di algoritmi di apprendimento automatico di base, ma offre uno scarso supporto per il deep learning e nessun supporto per GPU o FPGA.

machine learning

Azure Machine Learning, al contrario, abbraccia la programmazione in Python e si basa su diverse API e framework, inclusi tutti i framework di deep learning attualmente più popolari. Le nuove funzionalità di Azure Machine Learning includono AutoML, ottimizzazione iperparametrica, deep learning distribuito e supporto FPGA per modelli specifici, tutti elementi ricercati dai data scientist e dagli sviluppatori di modelli.

Il flusso di lavoro complessivo per Azure Machine Learning, illustrato nell’immagine sottostante, passa dalla preparazione dei dati alla costruzione del modello, alla formazione e ai test, alla gestione dei modelli e all’implementazione. Questa visione lineare del processo è però molto semplificata; un diagramma più realistico mostrerebbe infatti le frecce che vanno sia in avanti che indietro.

azure-machine-learning-workflow-100787013-large

Sviluppo del modello di Azure Machine Learning

Azure Machine Learning supporta cinque ambienti per lo sviluppo di modelli: Azure Notebooks, Data Science Virtual Machine (DSVM), Jupyter Notebooks, Visual Studio Code e Azure Databricks. In tutti i casi l’SDK Python di Azure Machine Learning è un componente aggiuntivo richiesto.

Azure Notebooks è un servizio di Jupyter Notebooks ospitato nel cloud di Azure. L’SDK di Azure Machine Learning è già installato in Azure Notebooks. Il team di Azure consiglia di utilizzare Azure Notebooks come punto di partenza e fornisce una selezione di sample di Azure ML come Azure Notebooks.

Data Science Virtual Machine ha già installati Python 3, Conda, Jupyter Notebooks e Azure Machine Learning SDK. DSVM è offerto con framework popolari di machine e di deep learning, strumenti ed editor per lo sviluppo di soluzioni di machine learning.

Potreste invece già avere Jupyter Notebooks installato nel vostro ambiente di sviluppo e lo stesso dicasi per Visual Studio Code. Entrambi possono essere migliorati con Azure Machine Learning SDK e vari plug-in. Azure Databricks è infine un servizio basato su Apache Spark con l’interfaccia utente di Jupyter Notebooks. È possibile installare l’SDK di Azure Machine Learning in tale ambiente e distribuire i modelli per l’esecuzione sui big data.

Supporto per i framework di Azure Machine Learning

Azure Machine Learning supporta qualsiasi framework di machine learning o deep learning basato su Python. Secondo Microsoft i più popolari, vale a dire Scikit-learn per il machine learning classico e PyTorch, TensorFlow e Chainer per il deep learning, hanno un supporto di prima classe nell’SDK tramite la classe Estimator. È possibile creare e utilizzare un Estimator per inviare qualsiasi codice di training che si desidera eseguire sul calcolo remoto, indipendentemente dal fatto che si tratti di un’esecuzione single-node o di training distribuito su un cluster di GPU.

Il supporto di Estimator per TensorFlow include due versioni di training back-end distribuito, ovvero MPI/Horovod e Parameter Server. L’opzione Parameter Server utilizza una funzione nativa di TensorFlow. Il supporto di Estimator per PyTorch include solo un tipo di training back-end distribuito, MPI/Horovod. La possibilità di impostare il training distribuito modificando alcuni argomenti nel costruttore Estimator è molto utile.

Se conoscete già la nuova classe Estimator in TensorFlow, è possibile che la classe Estimator di Azure Machine Learning risulti un po’ confusa. Per evitare ciò, pensate a entrambe le classi in termini di nomi completi: tf.estimator e azureml.train.estimator.

Servizi di Azure Machine Learning

Azure Machine Learning fornisce la maggior parte (se non proprio tutti) dei servizi necessari per la scienza dei dati nel cloud end-to-end. Ciò include la preparazione dei dati, il monitoraggio degli esperimenti, la formazione dei modelli, la gestione e la distribuzione dei modelli e il monitoraggio dei modelli. Non mancano inoltre regolazione iperparametrica, AutoML e pipeline.

Data Prep

L’SDK di Azure Machine Learning Data Prep consente di caricare, trasformare e scrivere dati per i flussi di lavoro. Il pacchetto azureml.dataprep è stato progettato per gestire sia piccoli set di dati con cui probabilmente lavorerete sul vostro computer, sia enormi set di dati con cui avete a che fare quando lavorate con Spark o con i data lake. Non sottovalutate l’importanza della preparazione dei dati. Spesso questa fase rappresenta infatti la maggior parte dello sforzo richiesto per creare un buon modello.

Traning del modello

Il traning è la parte del flusso di lavoro di deep learning che impiega il tempo di elaborazione più lungo. Azure Machine Learning può utilizzare essenzialmente qualsiasi framework Python per il machine learning o il deep learning, come già accennato poco sopra nella sezione sui framework supportati e sulla classe Estimator. Azure Machine Learning è in grado di addestrare il vostro modello a livello locale o nel cloud e può inviare lavori di formazione a una varietà di destinazioni tra cui Azure Machine Learning Compute, VM remote, Azure Databrick, Azure Data Lake Analytics e Azure HDInsight.

I target di calcolo di Azure possono utilizzare VM con molte CPU, una o più GPU e/o uno o più FPGA. Gli obiettivi possono essere configurati come cluster scalabili che istanziano su richiesta e si fermano quando le sessioni di traning sono complete. Utilizzare costose istanze GPU solo per brevi periodi mentre si formano attivamente dei modelli riduce i costi. Amazon SageMaker fa essenzialmente la stessa cosa.

Tracciamento dell’esperimento

L’area di lavoro di Azure Machine Learning tiene traccia di tutti i vostri esperimenti, delle esecuzioni dei training all’interno degli esperimenti, delle pipeline, degli obiettivi di calcolo, dei modelli, delle immagini, dell’implementazioni e delle attività. Voi e i vostri colleghi potete vedere tutti questi elementi in qualsiasi momento. Lo screenshot di seguito riporta ad esempio l’elenco degli Esperimenti.

azure-machine-learning-experiments-100787008-large

AutoML e ottimizzazione iperparametrica

A volte trovare il modello migliore per un dato set di dati è come trovare un ago in un pagliaio. Azure Machine Learning ha due meccanismi per aiutarvi in questa ricerca: AutoML e ottimizzazione iperparametrica. Con AutoML voi fornite il set di dati e Azure Machine Learning passa automaticamente in rassegna a funzionalità, algoritmi e iperparametri. È possibile controllare il numero di modelli generati e formati, il numero massimo di iterazioni, la metrica primaria e il numero di divisioni di convalida incrociata.

Gli algoritmi sono scelti da un elenco che dipende dal tipo di esperimento (classificazione, regressione o previsione). Potete opzionalmente mettere in blacklist gli algoritmi che sapete non funzionare bene per i vostri dati, ma quando lavorate per la prima volta con un set di dati dovreste comunque permettere ad AutoML di esplorare tutte le possibilità.

L’ottimizzazione iperparametrica è invece più focalizzata. Voi fornite un esperimento esistente, specificate gli iperparametri che vi interessano (come la percentuale di apprendimento e di interruzione) e Azure Machine Learning eseguirà lo studio delle varianti per voi, interrompendo automaticamente le sessioni di training che non stanno andando bene prima del numero massimo di iterazioni.

Pipelines

Azure Machine Learning Pipelines consente al data scientist di modularizzare il training dei modelli in passaggi discreti come lo spostamento dei dati, le trasformazioni dei dati, l’estrazione delle caratteristiche, la formazione e la valutazione. Le Pipelines sono un meccanismo per la condivisione e la riproduzione dei modelli e consentono di saltare i passaggi già eseguiti quando si provano le variazioni su un passaggio specifico, ad esempio il training. Non tutti gli obiettivi di calcolo sono “pipeline-friendly” e alcuni possono essere chiamati solo come passi della pipeline.

Gestione, implementazione e monitoraggio dei modelli

Una volta che avete un modello abbastanza valido per i vostri scopi, potete registrarlo e distribuirlo. Sul cloud di Azure i modelli vengono tipicamente raggruppati in container Docker e distribuiti su Azure Kubernetes Service (AKS). Se si sta distribuendo su un dispositivo periferico (da un singolo sensore smart fino a un controller per un’intera fabbrica), i container Docker vengono inseriti in Azure IoT Edge. Indipendentemente da dove viene distribuito, Azure Machine Learning può monitorare sia l’integrità del servizio, sia lo stato di salute del modello.

Esempi di Azure Machine Learning

Abbiamo trascorso circa un giorno a esaminare molti dei campioni forniti da Azure Machine Learning. Il proposito iniziale era sviluppare con Visual Studio Code localmente su un MacBook Pro. Tuttavia, non siamo riusciti a installare Azure Machine Learning SDK dalla riga di comando. Ecco il perché.

Problema di installazione di Azure Machine Learning SDK

Il MacBook Pro ha installato MacOS 10.14.2 e Python 3.7.2, senza Anaconda. Sulla base dei messaggi di errore, abbiamo capito che la dipendenza richiesta da TensorFlow non poteva essere soddisfatta. Neanche l’installazione di TensorFlow con pip su quella macchina ha funzionato.