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 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: migliorato con i service worker per funzionare offline o su reti di bassa qualità.

È un modo per organizzare microservizi a basso accoppiamento come un'unica unità ed eseguirne il deployment in varie posizioni, ad esempio un laptop o il cloud.

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

Cosa creerai

In questo codelab creerai una pipeline di data science complessa con 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 dall'interno di un notebook con un clic
  • Come creare automaticamente versioni dei dati in un notebook e in ogni passaggio della pipeline

Che cosa ti serve

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

Imposta l'ID progetto GCP e il nome del cluster

Per trovare l'ID progetto, visita il pannello Home della console GCP, 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.

Apri la console 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 solo uno:

fe25c1925487142.png

3. Installare MiniKF

Crea un'istanza di Compute

In GCP Marketplace, cerca "MiniKF".

Seleziona la macchina virtuale MiniKF di Arrikto.

d6b423c1911ea85a.png

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

b5eeba43053db4bd.png

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

dc401e2bb5a884d9.png

Attendi l'avvio dell'istanza di calcolo 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

Accedere a Kubeflow

Una volta completata l'installazione e tutti i pod sono pronti, visita la dashboard di MiniKF. Accedi a Kubeflow utilizzando il nome utente e la 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

Accedere a Rok

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

a683198ac4ba900d.png

80aad6ba5d298a7e.png

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

4. Eseguire una pipeline dall'interno del notebook

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

Crea un server notebook

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

4115cac8d8474d73.png

Fai clic su Nuovo server.

f9303c0a182e47f5.png

Specifica un nome per il server notebook.

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 5 GB e chiamalo data.

8544d9b05826b316.png

Fai clic su Avvia per creare il server notebook.

28c024bcc55cc70a.png

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

2f06041475f45d3.png

Scaricare i dati e il blocco note

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

2482011174f7bc75.png

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 -b kubecon-workshop https://github.com/kubeflow-kale/examples

Questo repository contiene una serie di esempi curati con dati e notebook 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 del Titanic

Esegui il notebook passo dopo 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 notebook facendo clic sull'icona Aggiorna.

a21f5f563b36ce4d.png

Esegui di nuovo la cella con le librerie corrette installate e verifica che l'operazione vada a buon fine.

Converti il notebook in una pipeline Kubeflow

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

3f4f9c93b187b105.png

Esplora 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

Guarda l'avanzamento dell'istantanea.

9408f46abb2493f5.png

Osserva l'avanzamento dell'esecuzione della pipeline.

9edbde68032f5e4b.png

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

a81646a22584e1b9.png

Attendi il completamento.

44bee7dc0d24ec21.png

d377b6d574a4970.png

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

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 troverebbe immediatamente sospetto. Questo è un buon indicatore del fatto che i nostri modelli non generalizzano e invece eseguono l'overfitting sul set di dati di addestramento. Ciò è probabilmente dovuto a 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 nel 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. Riprendiamo lo stato della pipeline prima di addestrare uno dei modelli e vediamo cosa succede. Dai un'occhiata al passaggio randomforest, poi fai clic su Artefatti.

4f25ca4560711b23.png

Segui i passaggi descritti in Markdown, ovvero visualizza lo snapshot nell'interfaccia utente di Roku facendo clic sul link corrispondente.

e533bc781da9355a.png

Copia l'URL di Rok.

d155d19731b5cedd.png

Vai al link Notebook Servers (Server notebook).

aafeab01f3ef0863.png

Fai clic su Nuovo server.

f2265a64e8f9d094.png

Incolla l'URL di Rok che hai copiato in precedenza e fai clic sul pulsante Compila automaticamente.

9ba4d4128a3bdeea.png

Specifica un nome per il notebook.

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 notebook.

28c024bcc55cc70a.png

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

34955a64ae316de1.png

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

a1f7c81f349e0364.png

In background, Kale ha ripristinato lo stato del notebook importando tutte le librerie e caricando le variabili dei 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 verificare se ci sono anomalie nei dati di addestramento. Per esaminare e risolvere il problema, aggiungi una cella sopra il markdown Random Forest 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 sulla funzionalità "Survived" e a ignorare il resto, contaminando 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 funzionalità.

Aggiungere una correzione di bug

Per rimuovere questa colonna, modifica la cella per aggiungere questo comando:

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

9e76c16a862b566.png

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

Esegui di nuovo la pipeline facendo clic sul pulsante Compila ed esegui.

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

Attendi il completamento del passaggio Risultati e visualizza i log per vedere i risultati finali. Ora hai a disposizione punteggi di previsione realistici.

8c6a9676b49e5be8.png

6. Esegui la pulizia

Distruggi la VM MiniKF

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

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:

Further reading