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

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

e seleziona il tuo progetto. Dovresti averne solo uno:

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

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

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.

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


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. Vai allo Snapshot Store 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 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.

Fai clic su Nuovo server.

Specifica un nome per il server notebook.

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.

Fai clic su Avvia per creare il server notebook.

Quando il server del 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 -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.

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.

Torna al terminale e installa la libreria mancante.
pip3 install --user seaborn

Riavvia il kernel del notebook facendo clic sull'icona Aggiorna.

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.

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.

Fai clic sul pulsante Compila ed esegui.

Guarda l'avanzamento dell'istantanea.

Osserva l'avanzamento dell'esecuzione della pipeline.

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

Attendi il completamento.


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.

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.

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

Copia l'URL di Rok.

Vai al link Notebook Servers (Server notebook).

Fai clic su Nuovo server.

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

Specifica un nome per il notebook.

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.

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

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

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.

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ù (+).

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

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

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.

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:
- github.com/kubeflow
- Slack di Kubeflow
- kubeflow-discuss@googlegroups.com
- Chiamata della community il martedì
