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: consente di configurare passaggi indipendenti in un flusso di lavoro ML completo, scegliendo tra un set selezionato di framework e librerie ML.
Kubeflow offre la possibilità di organizzare i microservizi a basso accoppiamento come singola unità ed eseguirne il deployment in diverse posizioni, ad esempio su un laptop, on-premise o nel cloud.
Questo codelab ti spiega come creare il tuo deployment Kubeflow utilizzando MiniKF e poi eseguire un flusso di lavoro Kubeflow Pipelines con ottimizzazione degli iperparametri per addestrare e pubblicare un modello. Puoi fare tutto questo direttamente da un blocco note Jupyter.
Cosa creerai
In questo codelab, creerai una pipeline di data science complessa con ottimizzazione degli iperparametri su Kubeflow Pipelines, senza utilizzare SDK o comandi 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
- Eseguire pipeline di Kubeflow con ottimizzazione degli iperparametri dall'interno di un blocco note con il 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
Configura il progetto Google Cloud
Segui i passaggi riportati di seguito per creare un progetto Google Cloud o configurare il tuo progetto Google Cloud esistente. Se prevedi di utilizzare un progetto Google Cloud esistente, assicurati che soddisfi i requisiti minimi descritti di seguito. Il primo passaggio consiste nell'aprire Resource Manager nella console di Google Cloud.
Crea un nuovo progetto o selezionane uno esistente:
Verifica i seguenti requisiti minimi:
- Assicurati di disporre del ruolo di proprietario del progetto.
- Assicurati che la fatturazione sia abilitata per il tuo progetto.
- Se utilizzi il livello senza costi di Google Cloud o il periodo di prova di 12 mesi con un credito di $300, tieni presente che non puoi eseguire l'installazione predefinita di Google Cloud MiniKF perché il livello senza costi non offre risorse sufficienti. Devi eseguire l'upgrade a un account a pagamento.
Per ulteriore assistenza relativa alla configurazione di un progetto della piattaforma Google Cloud, consulta la documentazione di Google Cloud.
Dopo aver configurato il progetto Google Cloud, vai direttamente alle istruzioni per l'installazione di MiniKF.
Apri il progetto Google Cloud preallocato
Per aprire il progetto Google Cloud preallocato, fai clic sul pulsante di seguito per visitare la console di Google Cloud e aprire il riquadro della home page, 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.
Se il progetto non è già selezionato, fai clic su Seleziona un progetto:
Seleziona il progetto. Dovresti averne uno solo:
3. Installa MiniKF
Crea un'istanza Compute che includa MiniKF
In Google Cloud Marketplace, cerca "MiniKF".
Seleziona la macchina virtuale MiniKF di Arrikto:
Fai clic sul pulsante LANCIO e seleziona il tuo progetto:
Nella sezione Configura e Esegui il deployment, scegli un nome e una zona 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. Fai clic su Snapshots e accedi a Rok utilizzando il nome utente e la password di MiniKF.
Complimenti! Hai eseguito correttamente il deployment di MiniKF su Google Cloud. Ora puoi creare blocchi note, scrivere codice ML, eseguire Kubeflow Pipelines e usare 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 di identificazione della razza canina, un progetto dell'Università di Udacity AI Nanodegree. Data l'immagine di un cane, il modello finale fornirà una stima della razza del cane.
Crea un server di blocchi note nel cluster Kubeflow
Vai al link Notebooks nella dashboard centrale di Kubeflow.
Fai clic su Nuovo server.
Specifica un nome per il server dei blocchi note.
Assicurati di aver selezionato la seguente immagine Docker (tieni presente che il tag immagine potrebbe differire):
gcr.io/arrikto/jupyter-kale:f20978e
Aggiungi un nuovo volume di dati vuoto di 5 GB e denominalo dati.
Fai clic su Avvia per creare il server dei blocchi note.
Quando il server dei blocchi note è disponibile, fai clic su Connetti per connetterti al server.
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 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 https://github.com/kubeflow-kale/kale
Il repository clonato contiene una serie di esempi selezionati con dati e blocchi note con annotazioni.
Nella barra laterale, vai alla cartella data/kale/examples/dog-breed-classification/
e apri il blocco note dog-breed.ipynb
.
Esempio di codice ML dell'identificazione delle razze canine
Per il momento, non eseguire le celle che scaricano i set di dati, perché utilizzerai alcuni set di dati più piccoli inclusi nel repository che hai appena clonato. Se esegui questo esempio da casa, scarica i set di dati.
Esegui la cella imports
per importare tutte le librerie necessarie. Tieni presente che il codice non funziona perché manca una libreria:
Normalmente, devi creare una nuova immagine Docker per poter eseguire questo blocco note come pipeline Kubeflow, in modo da includere le librerie appena installate. Fortunatamente, Rok e Kale si assicurano che tutte le librerie che installi durante lo sviluppo possano arrivare alla tua pipeline, grazie alla tecnologia di creazione di snapshot di Rok e Kale che monta questi volumi di snapshot nei passaggi della pipeline.
Esegui la cella successiva per installare la libreria mancante:
Riavvia il kernel del blocco note facendo clic sull'icona Riavvia:
Esegui di nuovo la cella imports
con le librerie corrette installate e osservalo correttamente.
Converti il blocco note in una pipeline in Kubeflow Pipelines
Abilita Kale facendo clic sull'icona Kubeflow nel riquadro sinistro del blocco note:
Attiva Kale facendo clic sul cursore nel riquadro di deployment di Kale:
Esplora le dipendenze per cella all'interno del blocco note. Scopri come più celle del blocco note possono far parte di un singolo passaggio della pipeline, come indicato dalle barre colorate a sinistra delle celle, e come un passaggio della pipeline può dipendere dai passaggi precedenti, come indicato dalle etichette dipende dalle etichette sopra le celle. Ad esempio, l'immagine seguente mostra più celle che fanno parte dello stesso passaggio della pipeline. Hanno lo stesso colore rosso e dipendono da un passaggio precedente della pipeline.
Fai clic sul pulsante Compila ed esegui:
Ora Kale prende il controllo del tuo blocco note e lo crea, convertendolo in una pipeline Kubeflow Pipelines. Inoltre, poiché Kale si integra con Rok per acquisire snapshot del volume di dati del blocco note attuale, puoi osservare l'avanzamento dell'istantanea. Rok si occupa del controllo delle versioni dei dati e della riproduzione dell'intero ambiente come era quando hai fatto clic sul pulsante Compila ed esegui. In questo modo, hai una macchina del tempo per i tuoi dati e il tuo codice e la pipeline verrà eseguita nello stesso ambiente in cui hai sviluppato il codice, senza dover creare nuove immagini Docker.
La pipeline è stata compilata e caricata su Kubeflow Pipelines. Ora fai clic sul link per andare all'interfaccia utente di Kubeflow Pipelines e visualizzare l'esecuzione.
La UI di Kubeflow Pipelines si apre in una nuova scheda. Attendi il completamento dell'esecuzione.
Complimenti! Hai appena eseguito una pipeline end-to-end in Kubeflow Pipelines, partendo dal tuo blocco note.
5. Transfer Learning con l'ottimizzazione degli iperparametri
Esamina i risultati
Dai un'occhiata ai log del passaggio cnn-from-scratch. (fai clic sul passaggio nel grafico nell'interfaccia utente di Kubeflow Pipelines, quindi sulla scheda Log). Questa è la fase in cui hai addestrato una rete neurale convoluzionale (CNN) da zero. Nota che il modello addestrato ha una precisione molto bassa e, per di più, il completamento di questo passaggio ha richiesto molto tempo.
Dai un'occhiata ai log del passaggio cnn-vgg16. In questo passaggio, hai utilizzato il transfer learning sul modello VGG-16 preaddestrato, una rete neurale addestrata dal Visual Geometry Group (VGG). L'accuratezza è molto più elevata rispetto al modello precedente, ma possiamo comunque fare meglio.
Ora esamina i log del passaggio cnn-resnet50. In questo passaggio, hai utilizzato il transfer learning sul modello ResNet-50 preaddestrato. La precisione è molto più elevata. Questo è quindi il modello che utilizzerai per la parte restante del codelab.
Ottimizzazione degli iperparametri
Torna al server del blocco note nella UI di Kubeflow e apri il blocco note denominato dog-breed-katib.ipynb
(nel percorso data/kale/examples/dog-breed-classification/
). In questo blocco note, eseguirai alcuni esperimenti di ottimizzazione degli iperparametri sul modello ResNet-50, utilizzando Katib. Nota che c'è una cella all'inizio del blocco note in cui dichiarare i parametri:
Nel riquadro a sinistra del blocco note, abilita Ottimizzazione HP con Katib per eseguire l'ottimizzazione degli iperparametri:
Quindi, fai clic su Imposta Katib Job per configurare Katib:
Definisci lo spazio di ricerca per ogni parametro e definisci un obiettivo:
Fai clic sul pulsante Compila ed esegui un job Katib:
Guarda l'avanzamento dell'esperimento Katib:
Fai clic su Visualizza per vedere l'esperimento Katib:
Fai clic su Fine per visualizzare le esecuzioni in Kubeflow Pipelines (KFP):
Nella pagina dell'esperimento Katib vedrai le nuove prove:
Nella UI di KFP vedrai le nuove esecuzioni:
Vediamo cosa è successo. In precedenza, Kale ha generato un'esecuzione della pipeline da un blocco note, mentre ora sta creando più esecuzioni della pipeline, ciascuna delle quali viene alimentata con una diversa combinazione di argomenti.
Katib è il componente di Kubeflow per eseguire job di ottimizzazione degli iperparametri per uso generico. Katib non sa nulla dei job che sta effettivamente eseguendo (chiamati prove nel gergo Katib). A Kale interessa solo lo spazio di ricerca, l'algoritmo di ottimizzazione e l'obiettivo. Katib supporta l'esecuzione di job semplici (ovvero i pod) come prove, ma Kale implementa uno shim per fare in modo che le prove eseguano effettivamente le pipelines in Kubeflow Pipelines, quindi raccolgano le metriche dalle esecuzioni della pipeline.
Poiché l'esperimento Katib sta producendo prove, vedrai più prove nell'interfaccia utente di Katib:
E altre esecuzioni nell'interfaccia utente di KFP:
Al termine dell'esperimento Katib, potrai visualizzare tutte le prove nella UI di Katib:
E tutte le esecuzioni nell'interfaccia utente di KFP:
Se torni al blocco note, vedrai un pulsante informazioni accanto all'esperimento Katib all'interno del riquadro Kale:
Fai clic e vedrai il risultato migliore e i parametri che lo hanno prodotto:
6. Esegui la pulizia
Elimina la VM MiniKF
Vai a Deployment Manager nella console di Google Cloud ed elimina il deployment minikf-on-gcp
.
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 settimanale della community, Slack e altri dettagli della community