1. Introduzione
| Kubeflow è un toolkit di machine learning per Kubernetes. Il progetto è dedicato a rendere i deployment dei flussi di lavoro di machine learning (ML) su Kubernetes semplici, portatili e scalabili. L'obiettivo è fornire un modo semplice per eseguire il deployment di sistemi open source all'avanguardia per il machine learning su diverse infrastrutture. |
Che aspetto ha un deployment di Kubeflow?
Un deployment di Kubeflow è:
- Portabile: funziona su qualsiasi cluster Kubernetes, sia su Google Cloud Platform (GCP), on-premise o su più provider.
- Scalabile: può utilizzare risorse fluttuanti ed è vincolato solo dal numero di risorse allocate al cluster Kubernetes.
- Componibile: consente di configurare passaggi indipendenti in un flusso di lavoro ML completo, scegliendo tra un insieme selezionato di framework e librerie ML.
Kubeflow ti consente di organizzare microservizi con accoppiamento debole come un'unica unità e di eseguirne il deployment in varie località, tra cui un laptop, on-premise o nel cloud.
Questo codelab ti guida nella creazione del tuo deployment di Kubeflow utilizzando MiniKF, quindi nell'esecuzione di un flusso di lavoro di Kubeflow Pipelines con l'ottimizzazione degli iperparametri per addestrare e pubblicare un modello. Puoi fare tutto questo da un blocco note Jupyter.
Cosa creerai
In questo codelab creerai una pipeline di data science complessa con l'ottimizzazione degli iperparametri su Kubeflow Pipelines, senza utilizzare comandi CLI o SDK. Non è richiesta alcuna conoscenza di Kubernetes o Docker. Al termine, l'infrastruttura conterrà:
- Una VM MiniKF (Mini Kubeflow) che installa automaticamente:
- Kubernetes (con Minikube)
- Kubeflow
- Kale, uno strumento per convertire i blocchi note Jupyter di uso generale in flussi di lavoro Kubeflow Pipelines ( GitHub)
- Arrikto Rok per il controllo delle versioni e la riproducibilità dei dati
Cosa imparerai a fare
- Come installare Kubeflow con MiniKF
- Come convertire i blocchi note Jupyter in pipeline Kubeflow senza utilizzare comandi CLI o SDK
- Come eseguire Kubeflow Pipelines con l'ottimizzazione degli iperparametri dall'interno di un blocco note con un clic
- Come creare automaticamente versioni dei dati in un blocco note e in ogni passaggio della pipeline
Che cosa ti serve
- Un progetto Google Cloud attivo per il quale disponi delle autorizzazioni di proprietario
Si tratta di un codelab avanzato incentrato su Kubeflow. Per ulteriori informazioni di base e un'introduzione alla piattaforma, consulta la documentazione Introduzione a Kubeflow. Concetti e blocchi di codice non pertinenti sono trattati solo superficialmente e sono forniti solo per operazioni di copia e incolla.
2. Configurare l'ambiente
Configura il progetto Google Cloud
Segui i passaggi riportati di seguito per creare un progetto Google Cloud o configurare quello esistente. Se prevedi di utilizzare un progetto GCP esistente, assicurati che soddisfi i requisiti minimi descritti di seguito. Il primo passaggio consiste nell'aprire Resource Manager nella console di Google Cloud.
Crea un nuovo progetto o selezionane uno esistente:

Controlla i seguenti requisiti minimi:
- Assicurati di disporre del ruolo Proprietario per il progetto.
- Assicurati che la fatturazione sia attivata per il tuo progetto.
- Se utilizzi il livello senza costi di GCP o il periodo di prova di 12 mesi con un credito di 300 $, tieni presente che non puoi eseguire l'installazione predefinita di MiniKF di GCP, perché il livello senza costi non offre risorse sufficienti. Devi eseguire l'upgrade a un account a pagamento.
Per ulteriore assistenza con la configurazione di un progetto GCP, consulta la documentazione di GCP.
Dopo aver configurato il progetto Google Cloud, vai direttamente alle istruzioni per installare MiniKF.
Apri il progetto Google Cloud preassegnato
Per aprire il progetto GCP preassegnato, fai clic sul pulsante qui sotto per visitare la console di GCP e aprire il pannello Home, che si trova nel menu a tre linee in alto a sinistra. Se lo schermo è vuoto, fai clic su Sì al prompt per creare una dashboard.

Se il progetto non è già selezionato, fai clic su Seleziona un progetto:

Seleziona il progetto. Dovresti averne solo uno:

3. Installare MiniKF
Crea un'istanza Compute che includa MiniKF
In GCP Marketplace, cerca "MiniKF".
Seleziona la macchina virtuale MiniKF di Arrikto:

Fai clic sul pulsante AVVIA e seleziona il tuo progetto:

Nella finestra Configura e implementa, scegli un nome e una zona per l'istanza MiniKF e lascia le opzioni predefinite. poi fai clic sul pulsante Esegui il deployment:

Attendi l'avvio dell'istanza di calcolo MiniKF:

Accedi a MiniKF
Quando la VM MiniKF è attiva, connettiti e accedi facendo clic sul pulsante SSH. Segui le istruzioni sullo schermo per eseguire il comando minikf, che avvierà il deployment di Minikube, Kubeflow e Rok. Il completamento dell'operazione richiede alcuni minuti.

Accedere a Kubeflow
Al termine dell'installazione e quando tutti i pod sono pronti, visita la dashboard di MiniKF. Accedi a Kubeflow utilizzando il nome utente e la password di MiniKF:


Gli utenti di Chrome vedranno questa schermata:

Gli utenti di Firefox vedranno questa schermata:

Gli utenti di Safari vedranno questa schermata:

Accedere a Rok
Dopo aver eseguito l'accesso a Kubeflow, apri il menu a sinistra facendo clic sull'icona a tre linee. Fai clic su Snapshot e accedi a Rok utilizzando il nome utente e la password di MiniKF.


Complimenti! Hai eseguito il deployment di MiniKF su GCP. Ora puoi creare notebook, scrivere il codice ML, eseguire Kubeflow Pipelines e utilizzare Rok per il controllo delle versioni e la riproducibilità dei dati.
4. Esegui una pipeline dall'interno del notebook
In questa sezione, eseguirai l'esempio di identificazione della razza canina, un progetto del programma Udacity AI Nanodegree. Data un'immagine di un cane, il modello finale fornirà una stima della razza del cane.
Crea un server notebook nel cluster Kubeflow
Vai al link Notebooks (Blocchi note) nella dashboard centrale di Kubeflow.

Fai clic su Nuovo server.

Specifica un nome per il server notebook.

Assicurati di aver selezionato l'immagine Docker seguente (tieni presente che il tag dell'immagine potrebbe essere diverso):
gcr.io/arrikto/jupyter-kale:f20978e
Aggiungi un nuovo volume di dati vuoto di 5 GB e chiamalo data.

Fai clic su Avvia per creare il server notebook.

Quando il server notebook è disponibile, fai clic su Connetti per connetterti.

Scaricare i dati e il blocco note
Si aprirà una nuova scheda con la home page di JupyterLab. Crea un nuovo terminale in JupyterLab.

Nella finestra del terminale, esegui questi comandi per passare alla cartella data e scaricare il blocco note e i dati che utilizzerai per il resto del lab:
cd data/ git clone https://github.com/kubeflow-kale/kale
Il repository clonato contiene una serie di esempi curati con dati e notebook annotati.
Nella barra laterale, vai alla cartella data/kale/examples/dog-breed-classification/ e apri il blocco note dog-breed.ipynb.

Esplora il codice ML dell'esempio di identificazione della razza di cane
Per il momento, non eseguire le celle che scaricano i set di dati, perché utilizzerai alcuni set di dati più piccoli inclusi nel repository che hai appena clonato. Se stai eseguendo questo esempio al tuo ritmo da casa, sentiti libero di scaricare i set di dati.
Esegui la cella imports per importare tutte le librerie necessarie. Tieni presente che il codice non funziona perché manca una libreria:

Normalmente, devi creare una nuova immagine Docker per poter eseguire questo blocco note come pipeline Kubeflow, in modo da includere le librerie appena installate. Fortunatamente, Rok e Kale si assicurano che tutte le librerie installate durante lo sviluppo vengano inserite nella pipeline, grazie alla tecnologia di snapshot di Rok e al montaggio di questi volumi snapshot nei passaggi della pipeline.
Esegui la cella successiva per installare la libreria mancante:

Riavvia il kernel del notebook facendo clic sull'icona Riavvia:

Esegui di nuovo la cella imports con le librerie corrette installate e verifica che l'operazione vada a buon fine.
Convertire il notebook in una pipeline in Kubeflow Pipelines
Attiva Kale facendo clic sull'icona Kubeflow nel riquadro a sinistra del notebook:

Attiva Kale facendo clic sul cursore nel pannello di implementazione di Kale:

Esplora le dipendenze per cella all'interno del notebook. Scopri come più celle del blocco note possono far parte di un singolo passaggio della pipeline, come indicato dalle barre colorate a sinistra delle celle, e come un passaggio della pipeline può dipendere dai passaggi precedenti, come indicato dalle etichette Dipende da sopra le celle. Ad esempio, l'immagine seguente mostra più celle che fanno parte dello stesso passaggio della pipeline. Hanno lo stesso colore rosso e dipendono da un passaggio della pipeline precedente.

Fai clic sul pulsante Compila ed esegui:

Ora Kale prende il controllo e crea il notebook convertendolo in una pipeline Kubeflow Pipelines. Inoltre, poiché Kale si integra con Rok per acquisire snapshot del volume di dati del notebook corrente, puoi monitorare l'avanzamento dello snapshot. Rok si occupa del controllo delle versioni dei dati e della riproduzione dell'intero ambiente così com'era quando hai fatto clic sul pulsante Compila ed esegui. In questo modo, avrai una macchina del tempo per i tuoi dati e il tuo codice e la pipeline verrà eseguita nello stesso ambiente in cui hai sviluppato il codice, senza dover creare nuove immagini Docker.

La pipeline è stata compilata e caricata in Kubeflow Pipelines. Ora fai clic sul link per andare all'interfaccia utente di Kubeflow Pipelines e visualizzare l'esecuzione.

L'interfaccia utente di Kubeflow Pipelines si apre in una nuova scheda. Attendi il completamento della corsa.


Complimenti! Hai appena eseguito una pipeline end-to-end in Kubeflow Pipelines, a partire dal notebook.
5. Transfer learning con ottimizzazione degli iperparametri
Esamina i risultati
Dai un'occhiata ai log del passaggio cnn-from-scratch. (Fai clic sul passaggio nel grafico nella UI di Kubeflow Pipelines, poi fai clic sulla scheda Log.) In questo passaggio hai addestrato una rete neurale convoluzionale (CNN) da zero. Nota che il modello addestrato ha un'accuratezza molto bassa e, inoltre, questo passaggio ha richiesto molto tempo per essere completato.

Dai un'occhiata ai log del passaggio cnn-vgg16. In questo passaggio, hai utilizzato il transfer learning sul modello VGG-16 preaddestrato, una rete neurale addestrata dal Visual Geometry Group (VGG). L'accuratezza è molto più elevata rispetto al modello precedente, ma possiamo ancora migliorare.

Ora dai un'occhiata ai log del passaggio cnn-resnet50. In questo passaggio, hai utilizzato il transfer learning sul modello ResNet-50 preaddestrato. La precisione è molto più elevata. Pertanto, questo è il modello che utilizzerai per il resto di questo codelab.

Ottimizzazione degli iperparametri
Torna al server dei blocchi note nell'interfaccia utente di Kubeflow e apri il blocco note denominato dog-breed-katib.ipynb (nel percorso data/kale/examples/dog-breed-classification/). In questo blocco note, eseguirai alcuni esperimenti di ottimizzazione degli iperparametri sul modello ResNet-50 utilizzando Katib. Nota che all'inizio del notebook hai una cella per dichiarare i parametri:

Nel riquadro a sinistra del blocco note, attiva Ottimizzazione degli iperparametri con Katib per eseguire l'ottimizzazione degli iperparametri:

Poi fai clic su Configura job Katib per configurare Katib:

Definisci lo spazio di ricerca per ogni parametro e un obiettivo:

Fai clic sul pulsante Compila ed esegui il job Katib:

Monitora l'avanzamento dell'esperimento Katib:

Fai clic su Visualizza per vedere l'esperimento Katib:

Fai clic su Fine per visualizzare le esecuzioni in Kubeflow Pipelines (KFP):

Nella pagina dell'esperimento Katib vedrai le nuove prove:

Nell'interfaccia utente di KFP vedrai le nuove esecuzioni:

Vediamo cosa è appena successo. In precedenza, Kale produceva un'esecuzione della pipeline da un notebook e ora ne crea più di una, ognuna alimentata con una combinazione diversa di argomenti.
Katib è il componente di Kubeflow per eseguire job di ottimizzazione degli iperparametri per uso generico. Katib non sa nulla dei job che sta effettivamente eseguendo (chiamati prove nel gergo di Katib). A Kale interessano solo lo spazio di ricerca, l'algoritmo di ottimizzazione e l'obiettivo. Katib supporta l'esecuzione di semplici job (ovvero pod) come prove, ma Kale implementa uno shim per fare in modo che le prove eseguano effettivamente pipeline in Kubeflow Pipelines e poi raccolga le metriche dalle esecuzioni delle pipeline.
Man mano che l'esperimento Katib produce prove, ne vedrai di più nella relativa UI:

E altre esecuzioni nella UI di KFP:

Al termine dell'esperimento Katib, puoi visualizzare tutte le prove nell'interfaccia utente di Katib:

E tutte le esecuzioni nell'interfaccia utente di KFP:

Se torni al blocco note, vedrai un pulsante delle informazioni accanto all'esperimento Katib nel riquadro Kale:

Fai clic e vedrai il risultato migliore e i parametri che lo hanno prodotto:

6. Esegui la pulizia
Distruggi la VM MiniKF
Vai a Deployment Manager nella console Google Cloud ed elimina il deployment minikf-on-gcp.
7. Complimenti
Congratulazioni, hai eseguito correttamente un flusso di lavoro di data science end-to-end utilizzando Kubeflow (MiniKF), Kale e Rok.
Passaggi successivi
Unisciti alla community Kubeflow:
- github.com/kubeflow
- Slack di Kubeflow
- kubeflow-discuss@googlegroups.com
- Chiamata settimanale della community, Slack e altri dettagli della community
