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
- Un progetto Google Cloud attivo per il quale disponi delle autorizzazioni di proprietario.
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
Se il progetto non è già selezionato, fai clic su Seleziona un progetto:
e seleziona il tuo progetto. Dovresti averne uno solo:
3. Installa MiniKF
Crea un'istanza Compute
In Google Cloud Marketplace, cerca "MiniKF".
Seleziona la macchina virtuale MiniKF di Arrikto.
Fai clic sul pulsante Avvia su Compute Engine e seleziona il progetto.
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.
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.
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.
Gli utenti di Chrome vedranno questa schermata:
Gli utenti di Firefox vedranno questa schermata:
Gli utenti di Safari vedranno questa schermata:
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.
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.
Fai clic su Nuovo server.
Specifica un nome per il server dei blocchi note.
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.
Fai clic su Avvia per creare il server di blocchi note.
Quando il server dei blocchi note è disponibile, fai clic su Connetti per collegarlo.
Scaricare i dati e il blocco note
Si aprirà una nuova scheda con la pagina di destinazione JupyterLab. Crea un nuovo terminale in JupyterLab.
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
.
Esplora il codice ML della sfida Titanic
Esegui il blocco note passo 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 blocco note facendo clic sull'icona Aggiorna.
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.
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.
Fai clic sul pulsante Compila ed esegui.
Controlla l'avanzamento dell'istantanea.
Guarda l'avanzamento dell'esecuzione della pipeline.
Fai clic sul link per andare all'interfaccia utente di Kubeflow Pipelines e visualizzare l'esecuzione.
Attendi il completamento dell'operazione.
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.
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.
Segui i passaggi in Markdown, ad esempio per visualizzare l'istantanea nella UI di Rok facendo clic sul link corrispondente.
Copia l'URL Rok.
Vai al link Server Notebooks.
Fai clic su Nuovo server.
Incolla l'URL Rok che hai copiato in precedenza e fai clic sul pulsante Compilazione automatica.
Specifica un nome per il blocco note.
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.
Quando il server dei blocchi note è disponibile, fai clic su Connetti per collegarlo.
Tieni presente che il blocco note si apre nella cella esatta del passaggio della pipeline che hai generato.
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.
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ù (+).
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 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
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.
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:
- github.com/kubeflow
- Kubeflow Slack
- kubeflow-discuss@googlegroups.com
- Chiamata della community il martedì