Da blocco note a pipeline Kubeflow con HP Tuning: un percorso di data science

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: consente di configurare passaggi indipendenti in un flusso di lavoro ML completo, scegliendo tra un insieme selezionato di framework e librerie ML.

Kubeflow ti consente di organizzare microservizi con accoppiamento debole come un'unica unità e di eseguirne il deployment in varie località, tra cui un laptop, on-premise o nel cloud.

Questo codelab ti guida nella creazione del tuo deployment di Kubeflow utilizzando MiniKF, quindi nell'esecuzione di un flusso di lavoro di Kubeflow Pipelines con l'ottimizzazione degli iperparametri per addestrare e pubblicare un modello. Puoi fare tutto questo da un blocco note Jupyter.

Cosa creerai

In questo codelab creerai una pipeline di data science complessa con l'ottimizzazione degli iperparametri su 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 con l'ottimizzazione degli iperparametri dall'interno di un blocco note con un clic
  • Come creare automaticamente versioni dei dati in un blocco note 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

Configura il progetto Google Cloud

Segui i passaggi riportati di seguito per creare un progetto Google Cloud o configurare quello esistente. Se prevedi di utilizzare un progetto GCP 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:

99b103929d928576.png

Controlla i seguenti requisiti minimi:

Per ulteriore assistenza con la configurazione di un progetto GCP, consulta la documentazione di GCP.

Dopo aver configurato il progetto Google Cloud, vai direttamente alle istruzioni per installare MiniKF.

Apri il progetto Google Cloud preassegnato

Per aprire il progetto GCP preassegnato, fai clic sul pulsante qui sotto per visitare la console di GCP e aprire il pannello Home, 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.

3fdc4329995406a0.png

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

e8952c0b96067dea.png

Seleziona il progetto. Dovresti averne solo uno:

fe25c1925487142.png

3. Installare MiniKF

Crea un'istanza Compute che includa MiniKF

In GCP Marketplace, cerca "MiniKF".

Seleziona la macchina virtuale MiniKF di Arrikto:

d6b423c1911ea85a.png

Fai clic sul pulsante AVVIA e seleziona il tuo progetto:

7d07439db939b61c.png

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

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

Al termine dell'installazione e quando 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. Fai clic su Snapshot e accedi a Rok utilizzando il nome utente e la password di MiniKF.

16171f35a935a9af.png

80aad6ba5d298a7e.png

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

4. Esegui una pipeline dall'interno del notebook

In questa sezione, eseguirai l'esempio di identificazione della razza canina, un progetto del programma Udacity AI Nanodegree. Data un'immagine di un cane, il modello finale fornirà una stima della razza del cane.

Crea un server notebook nel cluster Kubeflow

Vai al link Notebooks (Blocchi note) nella dashboard centrale di Kubeflow.

60825e935fd0f39b.png

Fai clic su Nuovo server.

f9303c0a182e47f5.png

Specifica un nome per il server notebook.

a2343f30bc9522ab.png

Assicurati di aver selezionato l'immagine Docker seguente (tieni presente che il tag dell'immagine potrebbe essere diverso):

gcr.io/arrikto/jupyter-kale:f20978e

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 notebook è disponibile, fai clic su Connetti per connetterti.

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

ab9ac96f1a1f0d09.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 https://github.com/kubeflow-kale/kale

Il repository clonato contiene una serie di esempi curati con dati e notebook annotati.

Nella barra laterale, vai alla cartella data/kale/examples/dog-breed-classification/ e apri il blocco note dog-breed.ipynb.

2bc436465522f65b.png

Esplora il codice ML dell'esempio di identificazione della razza di cane

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 stai eseguendo questo esempio al tuo ritmo da casa, sentiti libero di scaricare 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:

5e2b97ab2512f139.png

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 installate durante lo sviluppo vengano inserite nella pipeline, grazie alla tecnologia di snapshot di Rok e al montaggio di questi volumi snapshot nei passaggi della pipeline.

Esegui la cella successiva per installare la libreria mancante:

c483da77943a6f01.png

Riavvia il kernel del notebook facendo clic sull'icona Riavvia:

376b5203209c2c91.png

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

Convertire il notebook in una pipeline in Kubeflow Pipelines

Attiva Kale facendo clic sull'icona Kubeflow nel riquadro a sinistra del notebook:

7b96241f2ab6c389.png

Attiva Kale facendo clic sul cursore nel pannello di implementazione di Kale:

804cfbf9d76b7e23.png

Esplora le dipendenze per cella all'interno del notebook. 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 da 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 della pipeline precedente.

fcd0fb351cdfb359.png

Fai clic sul pulsante Compila ed esegui:

18f2f6f0e12393d5.png

Ora Kale prende il controllo e crea il notebook convertendolo in una pipeline Kubeflow Pipelines. Inoltre, poiché Kale si integra con Rok per acquisire snapshot del volume di dati del notebook corrente, puoi monitorare l'avanzamento dello snapshot. 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 e la pipeline verrà eseguita nello stesso ambiente in cui hai sviluppato il codice, senza dover creare nuove immagini Docker.

de1b88af76df1a9a.png

La pipeline è stata compilata e caricata in Kubeflow Pipelines. Ora fai clic sul link per andare all'interfaccia utente di Kubeflow Pipelines e visualizzare l'esecuzione.

e0b467e2e7034b5d.png

L'interfaccia utente di Kubeflow Pipelines si apre in una nuova scheda. Attendi il completamento della corsa.

21a9d54a57f3e20c.png

39e6fa39516d2773.png

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

5. Transfer learning con ottimizzazione degli iperparametri

Esamina i risultati

Dai un'occhiata ai log del passaggio cnn-from-scratch. (Fai clic sul passaggio nel grafico nella UI di Kubeflow Pipelines, poi fai clic sulla scheda Log.) In questo passaggio hai addestrato una rete neurale convoluzionale (CNN) da zero. Nota che il modello addestrato ha un'accuratezza molto bassa e, inoltre, questo passaggio ha richiesto molto tempo per essere completato.

62bf0835e9896c67.png

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

2b45072da65e20ae.png

Ora dai un'occhiata ai log del passaggio cnn-resnet50. In questo passaggio, hai utilizzato il transfer learning sul modello ResNet-50 preaddestrato. La precisione è molto più elevata. Pertanto, questo è il modello che utilizzerai per il resto di questo codelab.

a1dc84ea48a87820.png

Ottimizzazione degli iperparametri

Torna al server dei blocchi note nell'interfaccia utente 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 all'inizio del notebook hai una cella per dichiarare i parametri:

87b9f6c98dc1823e.png

Nel riquadro a sinistra del blocco note, attiva Ottimizzazione degli iperparametri con Katib per eseguire l'ottimizzazione degli iperparametri:

a518eba74d341139.png

Poi fai clic su Configura job Katib per configurare Katib:

f4e34fff6a93aa60.png

Definisci lo spazio di ricerca per ogni parametro e un obiettivo:

cfc6b7bcdc685a02.png

Fai clic sul pulsante Compila ed esegui il job Katib:

f9c1ab0a6a3c5e8d.png

Monitora l'avanzamento dell'esperimento Katib:

f3514011876564db.png

Fai clic su Visualizza per vedere l'esperimento Katib:

ab2f5a5edd48e8dc.png

Fai clic su Fine per visualizzare le esecuzioni in Kubeflow Pipelines (KFP):

410a843b6f044a4b.png

Nella pagina dell'esperimento Katib vedrai le nuove prove:

a511dca519580133.png

Nell'interfaccia utente di KFP vedrai le nuove esecuzioni:

43dd34ee2b75018d.png

Vediamo cosa è appena successo. In precedenza, Kale produceva un'esecuzione della pipeline da un notebook e ora ne crea più di una, ognuna alimentata con una combinazione diversa 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 di Katib). A Kale interessano solo lo spazio di ricerca, l'algoritmo di ottimizzazione e l'obiettivo. Katib supporta l'esecuzione di semplici job (ovvero pod) come prove, ma Kale implementa uno shim per fare in modo che le prove eseguano effettivamente pipeline in Kubeflow Pipelines e poi raccolga le metriche dalle esecuzioni delle pipeline.

Man mano che l'esperimento Katib produce prove, ne vedrai di più nella relativa UI:

3e854d3d4bb766c.png

E altre esecuzioni nella UI di KFP:

ffd30dcefa739962.png

Al termine dell'esperimento Katib, puoi visualizzare tutte le prove nell'interfaccia utente di Katib:

9096ae9caa77e42a.png

E tutte le esecuzioni nell'interfaccia utente di KFP:

7acc64dfee4f35a3.png

Se torni al blocco note, vedrai un pulsante delle informazioni accanto all'esperimento Katib nel riquadro Kale:

95b092180d71dc80.png

Fai clic e vedrai il risultato migliore e i parametri che lo hanno prodotto:

3b0ce47e548e5afb.png

6. Esegui la pulizia

Distruggi la VM MiniKF

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

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