Immagini di gestire un processo di ottimizzazione in cui ogni tentativo è costoso, in tempo o in denaro. Può trattarsi del training di un modello di Machine Learning (ML), in cui ogni esecuzione richiede ore e decine di dollari, oppure di un test A/B in cui ogni iterazione può durare un giorno e tradursi in migliaia di dollari di mancato fatturato. O ancora della gestione della supply chain di uno stabilimento, dove scegliere gli input della giornata per ottenere il costo più basso e la massima produzione è una scommessa: una stima sbagliata può costare un'intera giornata e cifre rilevanti.
Se un tentativo non dà i risultati sperati, si riprova. Ma quando ogni tentativo è costoso, tirare a indovinare i parametri non è un'opzione: l'obiettivo è convergere sui migliori parametri possibili nel minor numero di trial.
Questa serie di tre articoli illustrerà un nuovo approccio per ridurre i costi del training ML e di altri processi di ottimizzazione: il workflow di ottimizzazione Black Box con Google Vertex AI Vizier.
È importante ricordare che Vizier non serve solo per il Machine Learning. Anzi, non sa nemmeno che state facendo ML e non interviene direttamente nei trial. Vizier conosce solo ciò che gli comunicate: i parametri e la misurazione dell'obiettivo (quanto sono andati bene i trial). L'esperto è lei, ed è lei a eseguire il training ML o l'altro processo da ottimizzare; Vizier è un consulente esterno che le suggerisce come procedere nel round successivo.
Per il training ML, può usare Vertex AI Vizier per individuare i migliori iperparametri possibili — quelli che configurano l'intera esecuzione del training — come la regolarizzazione, i learning rate o il numero e la dimensione dei layer. Anche il tipo di modello da utilizzare nel training successivo è di per sé un parametro da esplorare: ad esempio, se un problema di classificazione binaria vada risolto con Naive Bayes, Logistic Regression o XGBoost.
Poiché Vertex AI Vizier si limita a fornire consigli sul training dall'esterno, può essere utilizzato con qualunque tipo di ML. Può ricorrere al Google Vertex SDK per avviare job di training personalizzati, oppure addestrare il proprio modello TensorFlow o PyTorch all'interno di un container custom.
Come usare Vizier
Probabilmente conosce già le librerie di hyperparameter tuning come quelle di Scikit e Hyperopt. Eseguono trial ML ripetuti, modificando ogni volta gli iperparametri nel tentativo di convergere al risultato migliore.
Un servizio di hyperparameter tuning come quelli di Google e AWS semplifica radicalmente il processo, eliminando la necessità di configurare le librerie e l'infrastruttura di calcolo.
Vertex AI Vizier va un passo oltre con il processo Black Box che descriverò in questa serie. La differenza sostanziale sta nel pattern d'uso: con Vizier si eseguono trial interattivi, chiedendo a Vertex AI Vizier un consiglio a ogni round, e il servizio risponde con suggerimenti basati esclusivamente sulla qualità dei risultati ottenuti nei trial precedenti.
Il processo
Questi sono i passaggi principali per implementare il workflow con Vertex AI Vizier:
- Per prima cosa, creare uno study di Vertex AI Vizier, all'interno del quale verranno eseguiti diversi trial. Lo study viene definito tramite una study configuration, che specifica gli obiettivi (le misurazioni/metriche) e i valori di input (gli iperparametri) dei suoi esperimenti, chiamati appunto trial.
- Eseguire un trial: addestrare un modello di Machine Learning o avviare un altro processo da ottimizzare.
- Invocare Vertex AI Vizier inviando i parametri insieme alla misurazione di ottimizzazione di quel trial. Nel caso del training di un modello ML, la metrica può essere, ad esempio, la cross-entropy loss o la balanced accuracy sui dati di validazione, dopo il consueto split train/validation/test.
- La risposta a quella richiesta contiene i suggerimenti per il trial successivo: uno o più set di parametri da utilizzare per impostare il prossimo trial.
- Eseguire il trial successivo, di norma sulla base dei parametri suggeriti. Restano però solo suggerimenti: può sempre scegliere parametri diversi. In ogni caso, Vertex AI Vizier continuerà ad apprendere.
- Proseguire con il trial successivo.
- Interrompere le iterazioni una volta eseguiti abbastanza trial (i dettagli più avanti).
Diagramma di flusso dell'interazione con Vizier
Vertex AI Vizier è un servizio software-as-a-service. È sufficiente richiamare un servizio REST tramite una comoda API Python, di cui parlerò più avanti.
Com'è fatta una chiamata API
Ecco un esempio di input e output. È leggermente semplificato, ma rende l'essenza dell'invocazione REST. (Nella pratica si utilizza un client Python, di cui parleremo più avanti.)
Input:
{
"Params": {"flour": 0.21, "recipe": "Pam's chocolate chip", "eggs": 2 },
"rating": 8.1
}
Output:
{"flour": 0.32, "recipe": "Chocoflake", "eggs": 1}
Questo JSON è un esempio di ottimizzazione di una ricetta di biscotti, realmente condotta dal team di ricerca: cuocere biscotti è talmente costoso e dispendioso in termini di tempo che è impensabile farlo centinaia di volte!
I parametri comprendono le quantità di ciascun ingrediente: abbiamo un parametro float e uno intero. Un altro parametro è la scelta della ricetta, ovvero un parametro categorico (con poche opzioni e nessun ordinamento tra di esse).
L'input include anche la misurazione del successo, ossia la valutazione dei biscotti da parte degli assaggiatori.
L'output, cioè la risposta della chiamata REST, è un suggerimento (nella pratica, anche più di uno) sui parametri da utilizzare nel round di cottura successivo.
Eseguire i trial all'interno di uno study
I trial possono essere eseguiti in modo iterativo, ma anche in parallelo. Si chiedono a Vertex AI Vizier più suggerimenti — diciamo cinque — e si avviano cinque trial in contemporanea. Il parallelismo comporta un compromesso: da un lato velocizza il processo, dall'altro l'esecuzione iterativa offre un vantaggio, perché Vizier può affinare le raccomandazioni per ogni trial sulla base di tutti i precedenti.
Il numero di trial può essere predeterminato, ad esempio venti: la raccomandazione è dieci volte il numero di parametri. In alternativa, Vizier può segnalare quando è il momento di fermarsi, valutando se i risultati stanno convergendo. Questa parsimonia nel numero di trial è importante, dato che ognuno ha un costo.
I prossimi passi
Di recente, a febbraio 2023, Vizier è diventato disponibile anche in una variante open-source. Le consiglio di esplorarne l'implementazione. La versione open-source, tuttavia, non contiene il cuore dell'algoritmo di ottimizzazione bayesiana, mentre il servizio Vertex AI Vizier offre semplicità d'uso, scalabilità e robustezza. In questa serie ci concentreremo esclusivamente su Vertex AI Vizier.
In questo primo articolo abbiamo offerto una panoramica su come utilizzare Vertex AI Vizier. Il secondo spiegherà i vantaggi dell'approccio "Black Box": lasciando a lei la responsabilità dei processi di ottimizzazione più impegnativi, potrà concentrarsi su ciò che sa fare meglio, come strutturare il training ML o altri processi costosi. Nel frattempo, Vertex AI Vizier fa ciò in cui eccelle: guidarla al miglior risultato nel minor numero di trial possibile.