In questo articolo presenteremo uno strumento che dimostra, in pratica, la nostra esperienza nell'utilizzo di Vertex AI Pipelines in un progetto in produzione.
Un tutorial end-to-end su come addestrare e distribuire un modello ML personalizzato in produzione usando Vertex AI Pipelines con Kubeflow v2. Se siete confusi su come approcciare Vertex AI, sarete in grado di trovare la vostra strada perché tutto in questo tutorial è basato su esperienze reali. Ci sono molti esempi di pipeline che illustrano come utilizzare alcune caratteristiche interessanti di vertex AI e Kubeflow. Troverete anche un makefile che vi aiuterà a eseguire le ricette più importanti e vi farà risparmiare molto tempo per costruire il vostro modello e farlo funzionare in produzione.
Le pipeline in ML possono essere definite come insiemi di lavori collegati che eseguono parti complete o specifiche del flusso di lavoro ML (es. pipeline di addestramento).
esempio di una semplice pipeline di formazione
esempio di pipeline di addestramento su Vertex AI Pipelines utilizzando Kubeflow
Progettate correttamente, le pipeline hanno il vantaggio di essere riproducibili e altamente personalizzabili. Queste due proprietà rendono la sperimentazione e l'implementazione in produzione un compito relativamente facile. L'uso di Vertex AI Pipelines insieme a Kubeflow ci ha aiutato a progettare ed eseguire rapidamente pipeline personalizzate con le proprietà sopra menzionate. Gli esempi di pipeline illustrati nello starter kit sono molto rappresentativi di ciò che si può incontrare quando si lavora a un progetto di ML che deve essere distribuito in produzione. Abbiamo anche condiviso una serie di suggerimenti e di script automatizzati, in modo che possiate concentrarvi sull'utilizzo di Vertex AI.
Quando ho iniziato a usare le Pipeline di Vertex AI, ero piuttosto sopraffatto da tutte le possibilità di svolgere lo stesso identico compito. Non ero del tutto sicuro delle scelte migliori su come costruire le mie pipeline. Dopo qualche mese, abbiamo trovato la nostra strada e abbiamo maturato alcune convinzioni, almeno sull'aspetto più importante della gestione del ciclo di vita di un progetto in produzione con questa tecnologia.
Come già detto, questo articolo vuole presentare uno starter kit che mostri, con metodi pratici, la nostra esperienza e ciò che abbiamo imparato utilizzando Vertex AI Pipelines. Ci auguriamo che questo aiuti i nuovi arrivati ad afferrare rapidamente questo potente strumento senza pagare l'elevato prezzo di ingresso.
Nelle prossime sezioni presenteremo i concetti e le caratteristiche più interessanti che abbiamo trovato utilizzando le Pipeline Vertex AI. Utilizzeremo anche un progetto di previsione giocattolo (la competizione M5) per illustrare il tutto. Non ci concentreremo intenzionalmente sulla parte di modellazione, ma sottolineeremo invece le diverse fasi necessarie per rendere operativo un modello in produzione.
Costruite un'immagine di base personalizzata e utilizzatela come base per i vostri componenti.
Se avete mai lavorato con le pipeline di Kubeflow, una domanda che potreste porvi è quando usare i componenti basati su container o quelli basati su funzioni. Ci sono molti pro e contro in entrambe le opzioni, tuttavia è possibile trovare una via di mezzo. I componenti basati su container sono più adatti per attività complesse in cui ci sono molte dipendenze dal codice, rispetto ai componenti basati su funzioni che contengono tutte le dipendenze dal codice all'interno di una funzione e di solito sono più semplici. Questi ultimi funzionano più rapidamente, perché non è necessario costruire e distribuire un'immagine ogni volta che si modifica il codice. Nei componenti basati su funzioni, viene utilizzata un'immagine python 3.7 predefinita per eseguire la funzione.
La nostra soluzione per far funzionare allo stesso modo sia i componenti complessi che quelli semplici è lavorare con una versione sovrascritta dell'immagine di base predefinita. All'interno di questa immagine di base modificata abbiamo installato tutti i nostri codici come pacchetto. Quindi, importiamo le funzioni all'interno di componenti basati su funzioni, come si farebbe, ad esempio, con pandas. Otteniamo il vantaggio di eseguire operazioni complesse e semplici nello stesso modo e riduciamo il tempo di creazione dell'immagine a solo 1 (l'immagine di base).
Inoltre, organizziamo i nostri file di configurazione in modo da facilitare l'adattamento degli input dei vostri componenti e delle vostre pipeline.
Utilizzare un'immagine di base sovrascritta come base unica per tutti i componenti.
La parallelizzazione di parti delle pipeline è semplice come la scrittura di un ciclo for
Quando si sperimenta con il ML, di solito è necessario eseguire molte iterazioni di un semplice flusso di lavoro di addestramento, sia per la messa a punto di un iperparametro sia per la creazione di più modelli (ad esempio un modello per categoria di prodotto).
Per farlo in modo ottimale si dovrebbe parallelizzare i diversi flussi di lavoro di formazione per guadagnare tempo e ottimizzare le risorse. Con Vertex Pipelines e Kubefkow lo sforzo è minimo per progettazione; vi costerà solo scrivere un ciclo for. E durante la compilazione della pipeline, Kubeflow capirà quali passaggi e/o gruppi di passaggi possono essere eseguiti in parallelo e quali devono essere eseguiti successivamente.
Esempio di una pipeline con parti che funzionano in parallelo
Distribuzione condizionale per gestire il modello di ML senza problemi
Con kfp.dsl.condition, si può facilmente distribuire un modello addestrato e prepararsi a riutilizzarlo in seguito con una certa logica di codice. Se state sperimentando con molte impostazioni e sperate di spostare le cose in produzione senza problemi, dato un insieme di condizioni, questa funzionalità di Kubeflow sarà molto utile. Se poi la si abbina a un ottimo CICD, il ciclo di vita del modello ML si svolgerà senza intoppi.
Esempio di distribuzione condizionale
Oltre a queste caratteristiche (che non sono esaustive), avrete riproducibilità, tracciabilità, gestibilità e, ultimo ma non meno importante, un'ottima interfaccia utente per monitorare tutto sull'interfaccia di Vertex AI su GCP.
Conclusione
Al giorno d'oggi si prevede che molti modelli ML vengano eseguiti in produzione. Quindi, se state lavorando su GCP e avete intenzione di utilizzare Vertex AI, speriamo che questo starter kit vi aiuti a fare un viaggio piacevole con lo strumento. Dovreste anche darci un'occhiata se state iniziando i vostri progetti con l'ambizione di renderli utili al più presto, cioè di distribuirli in produzione.
Grazie a Luca Serra, Jeffrey Kayne e Robin Doumerc (Artefact) che hanno contribuito alla costruzione di questo kit iniziale, ma anche a Maxime Lutel che ha realizzato la modellazione per il progetto di giocattoli che utilizziamo.
Se volete passare al livello successivo, nella documentazione di GCP troverete le modalità per farlo: