Da blocco note a pipeline Kubeflow con MiniKF e Kale

1. Introduzione

Kubeflow è un toolkit di machine learning per Kubernetes. Il progetto è dedicato a rendere i deployment di flussi di lavoro di machine learning (ML) su Kubernetes semplici, portabili e scalabili. L'obiettivo è fornire un modo semplice per eseguire il deployment dei migliori sistemi open source per il machine learning su diverse infrastrutture.

Che aspetto ha un deployment Kubeflow?

Un deployment Kubeflow è:

  • Portabile: funziona su qualsiasi cluster Kubernetes, che sia su Google Cloud Platform (Google Cloud), on-premise o su più provider.
  • Scalabile: può utilizzare risorse fluttuanti ed è vincolato solo dal numero di risorse allocate al cluster Kubernetes.
  • Componibile - migliorato con service worker per lavorare offline o su reti di bassa qualità.

È uno strumento che consente di organizzare i microservizi a basso accoppiamento come una singola unità e di eseguirne il deployment in varie posizioni, che si tratti di laptop o cloud.

Questo codelab ti guiderà nella creazione di un deployment Kubeflow personalizzato utilizzando MiniKF e nell'esecuzione di un flusso di lavoro Kubeflow Pipelines dall'interno di un blocco note Jupyter.

Cosa creerai

In questo codelab, creerai una pipeline di data science complessa con Kubeflow Pipelines, senza utilizzare alcun comando o SDK dell'interfaccia a riga di comando. Non è necessaria alcuna conoscenza di Kubernetes o Docker. Al termine, l'infrastruttura conterrà:

  • Una VM MiniKF (Mini Kubeflow) che si installa automaticamente:
  • Kubernetes (mediante Minikube)
  • Kubeflow
  • Kale, uno strumento per convertire i blocchi note Jupyter per uso generico 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 tuoi blocchi note Jupyter in pipeline Kubeflow senza utilizzare SDK o comandi dell'interfaccia a riga di comando
  • Come eseguire Kubeflow Pipelines dall'interno di un blocco note con il semplice clic di un pulsante
  • Come eseguire automaticamente la versione dei dati in un blocco note e in ogni passaggio della pipeline

Che cosa ti serve

Questo è un codelab avanzato su Kubeflow. Per ulteriori informazioni di base e per 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

Imposta l'ID progetto Google Cloud e il nome del cluster

Per trovare l'ID progetto, vai al riquadro della home page della console Google Cloud, che si trova nel menu a tre linee in alto a sinistra. Se la schermata è vuota, fai clic su Sì quando ti viene richiesto di creare una dashboard.

Apri la console di Google Cloud

3fdc4329995406a0.png

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

e8952c0b96067dea.png

e seleziona il tuo progetto. Dovresti averne uno solo:

fe25c1925487142.png

3. Installa MiniKF

Crea un'istanza Compute

In Google Cloud Marketplace, cerca "MiniKF".

Seleziona la macchina virtuale MiniKF di Arrikto.

d6b423c1911ea85a.png

Fai clic sul pulsante Avvia su Compute Engine e seleziona il progetto.

b5eeba43053db4bd.png

Nella sezione Configura e Esegui il deployment, scegli un nome per l'istanza MiniKF e lascia le opzioni predefinite. Quindi, fai clic sul pulsante Esegui il deployment.

dc401e2bb5a884d9.png

Attendi l'avvio dell'istanza di computing MiniKF.

5228086caadc44c6.png

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.

774e83c3e96cf7b3.png

Accedi a Kubeflow

Una volta completata l'installazione e tutti i pod pronti, visita la dashboard MiniKF. Accedi a Kubeflow utilizzando nome utente e password di MiniKF.

251b0bcdbf6d3c71.png

9d49d899bb0b5bd1.png

Gli utenti di Chrome vedranno questa schermata:

6258e0f09e46a6c2.png

Gli utenti di Firefox vedranno questa schermata:

8cff90ce2f0670bd.png

Gli utenti di Safari vedranno questa schermata:

1c6fd768d71c0a92.png

Accedi a Rok

Dopo aver effettuato l'accesso a Kubeflow, apri il menu a sinistra facendo clic sull'icona a forma di hamburger. Vai allo Snapshot Store e accedi a Rok utilizzando nome utente e password di MiniKF.

a683198ac4ba900d.png

80aad6ba5d298a7e.png

Complimenti! Hai eseguito correttamente il deployment di MiniKF su Google Cloud. Ora puoi creare blocchi note, scrivere codice ML ed eseguire pipeline Kubeflow. Usa Rok per il controllo delle versioni e la riproducibilità dei dati.

4. Esegui una pipeline dall'interno del blocco note

In questa sezione, eseguirai l'esempio del Titanic, una gara di Kaggle che prevede quali passeggeri sono sopravvissuti al naufragio del Titanic.

Crea un server di blocchi note

Vai al link Notebook Servers (Server blocchi note) nella dashboard centrale di Kubeflow.

4115cac8d8474d73.png

Fai clic su Nuovo server.

f9303c0a182e47f5.png

Specifica un nome per il server dei blocchi note.

a2343f30bc9522ab.png

Assicurati di aver selezionato questa immagine:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Aggiungi un nuovo volume di dati vuoto di dimensioni 5 GB e assegnagli il nome data.

8544d9b05826b316.png

Fai clic su Avvia per creare il server di blocchi note.

28c024bcc55cc70a.png

Quando il server dei blocchi note è disponibile, fai clic su Connetti per collegarlo.

2f06041475f45d3.png

Scaricare i dati e il blocco note

Si aprirà una nuova scheda con la pagina di destinazione JupyterLab. Crea un nuovo terminale in JupyterLab.

2482011174f7bc75.png

Nella finestra Terminale, esegui questi comandi per andare alla cartella data e scaricare il blocco note e i dati che utilizzerai per il resto del lab.

cd data/
git clone -b kubecon-workshop https://github.com/kubeflow-kale/examples

Questo repository contiene una serie di esempi selezionati con dati e blocchi note annotati. Vai alla cartella data/examples/titanic-ml-dataset/ nella barra laterale e apri il blocco note titanic_dataset_ml.ipynb.

c85baf68b36c63b2.png

Esplora il codice ML della sfida Titanic

Esegui il blocco note passo passo. Tieni presente che il codice non funziona perché manca una libreria.

bf2451fd7407e334.png

Torna al terminale e installa la libreria mancante.

pip3 install --user seaborn

d90593b21425dd12.png

Riavvia il kernel del blocco note facendo clic sull'icona Aggiorna.

a21f5f563b36ce4d.png

Esegui di nuovo la cella con le librerie corrette installate e osservalo correttamente.

Converti il blocco note in una pipeline Kubeflow

Abilita Kale facendo clic sull'icona Kubeflow nel riquadro a sinistra.

3f4f9c93b187b105.png

Esplorare le dipendenze per cella. Scopri come più celle possono far parte di un singolo passaggio della pipeline e come un passaggio della pipeline può dipendere dai passaggi precedenti.

15cca32444c1f12e.png

Fai clic sul pulsante Compila ed esegui.

bde5cef34f00e258.png

Controlla l'avanzamento dell'istantanea.

9408f46abb2493f5.png

Guarda l'avanzamento dell'esecuzione della pipeline.

9edbde68032f5e4b.png

Fai clic sul link per andare all'interfaccia utente di Kubeflow Pipelines e visualizzare l'esecuzione.

a81646a22584e1b9.png

Attendi il completamento dell'operazione.

44bee7dc0d24ec21.png

d377b6d574a4970.png

Complimenti! Hai appena eseguito una pipeline Kubeflow end-to-end a partire dal tuo blocco note.

5. Riproducibilità con gli snapshot dei volumi

Esamina i risultati

Dai un'occhiata ai log del penultimo passaggio della pipeline Risultati. Nota che tutti i predittori mostrano un punteggio del 100%. Un data scientist esperto lo troverà immediatamente sospetto. Questo è un buon indicatore del fatto che i nostri modelli non stanno generalizzando, ma sono invece in overfitting con il set di dati di addestramento. Probabilmente questo è causato da un problema con i dati utilizzati dai modelli.

2a594032c2dd6ff6.png

Riproduci lo stato precedente

Fortunatamente, Rok si occupa del controllo delle versioni dei dati e della riproduzione dell'intero ambiente perché era il momento in cui hai fatto clic sul pulsante Compila ed esegui. In questo modo avrai una macchina del tempo per i tuoi dati e il tuo codice. Quindi riprendiamo lo stato della pipeline prima di addestrare uno dei modelli e vediamo cosa sta succedendo. Dai un'occhiata al passaggio randomforest, quindi fai clic su Artefatti.

4f25ca4560711b23.png

Segui i passaggi in Markdown, ad esempio per visualizzare l'istantanea nella UI di Rok facendo clic sul link corrispondente.

e533bc781da9355a.png

Copia l'URL Rok.

d155d19731b5cedd.png

Vai al link Server Notebooks.

aafeab01f3ef0863.png

Fai clic su Nuovo server.

f2265a64e8f9d094.png

Incolla l'URL Rok che hai copiato in precedenza e fai clic sul pulsante Compilazione automatica.

9ba4d4128a3bdeea.png

Specifica un nome per il blocco note.

7685c3bf35fc74b2.png

Assicurati di aver selezionato questa immagine:

gcr.io/arrikto-public/tensorflow-1.14.0-notebook-cpu:kubecon-workshop

Fai clic su Avvia per creare il server di blocchi note.

28c024bcc55cc70a.png

Quando il server dei blocchi note è disponibile, fai clic su Connetti per collegarlo.

34955a64ae316de1.png

Tieni presente che il blocco note si apre nella cella esatta del passaggio della pipeline che hai generato.

a1f7c81f349e0364.png

In background, Kale ha ripristinato lo stato del blocco note importando tutte le librerie e caricando le variabili dai passaggi precedenti.

Esegui il debug dello stato precedente

Aggiungi un comando di stampa a questa cella:

print(acc_random_forest)

Esegui la cella attiva premendo Maiusc + Invio per riaddestrare la foresta casuale e stampare il punteggio. È 100.

e2a8a3b5465fcb5d.png

Ora è il momento di vedere se c'è qualcosa di strano nei dati di addestramento. Per esplorare e risolvere il problema, aggiungi una cella sopra il markdown della Foresta casuale selezionando la cella precedente e facendo clic sull'icona più (+).

d1077f32dff9620f.png

Aggiungi il testo seguente ed esegui la cella per stampare il set di addestramento.

train_df

2854798ff01aed4e.png

Spiacenti. La colonna con le etichette di addestramento ("Survived") è stata inclusa per errore come caratteristiche di input. Il modello ha imparato a concentrarsi sui "Sopravviveti" e ignorare il resto, inquinando l'input. Questa colonna corrisponde esattamente all'obiettivo del modello e non è presente durante la previsione, quindi deve essere rimossa dal set di dati di addestramento per consentire al modello di apprendere dalle altre caratteristiche.

Aggiungi una correzione di bug

Per rimuovere questa colonna, modifica la cella in modo da aggiungere questo comando:

train_df.drop('Survived', axis=1, inplace=True)
train_df

9e76c16a862b566.png

Abilita Kale e assicurati che la cella che rimuove le etichette Survived faccia parte del passaggio della pipeline featureengineering (deve avere lo stesso colore dei contorni).

Esegui nuovamente la pipeline facendo clic sul pulsante Compila ed esegui.

Fai clic sul link per andare all'interfaccia utente di Kubeflow Pipelines e visualizzare l'esecuzione.

Attendi il completamento del passaggio results e visualizza i log per visualizzare i risultati finali. Ora hai punteggi di previsione realistici.

8c6a9676b49e5be8.png

6. Esegui la pulizia

Elimina la VM MiniKF

Vai a Deployment Manager nella console di Google Cloud ed elimina il deployment minikf-1.

7. Complimenti

Complimenti, hai eseguito correttamente un flusso di lavoro di data science end-to-end con Kubeflow (MiniKF), Kale e Rok.

Passaggi successivi

Unisciti alla community Kubeflow:

Per approfondire