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 i microservizi a basso accoppiamento come un'unica unità ed eseguirne il deployment in varie posizioni, che si tratti di un laptop o del cloud.
Questo codelab ti guiderà nella creazione del tuo deployment di Kubeflow utilizzando MiniKF e nell'esecuzione di un workflow di 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, la tua 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 di 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 Notebooks Jupyter in Kubeflow Pipelines senza utilizzare comandi CLI o SDK
- Come eseguire le pipeline di Kubeflow 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
Questo è 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 di GCP Console, 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 progetto. Devi 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 computing 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 notebook, 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 di notebook.

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

Scarica i dati e il notebook
Si aprirà una nuova scheda con la pagina di destinazione 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.
Convertire 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 stato precedente
Fortunatamente, 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. Riprendiamo quindi 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 seguente testo 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 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 workflow 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ì
