Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Flessibilità nella Black Box Optimization di Vizier

By Joshua FoxAug 17, 20236 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Nella Parte 1 abbiamo descritto le criticità dei processi di ottimizzazione lenti e onerosi e il nuovo workflow Black Box implementato da Vertex AI Vizier. Nella Parte 2 abbiamo spiegato perché l'approccio Black Box garantisce maggiore controllo e scalabilità rispetto ai comuni servizi di hyperparameter tuning. In questo articolo conclusivo vedremo come configurare Vizier per accelerare la convergenza verso il miglior modello possibile.

Versione base e opzioni di configurazione

Il dialogo con Vizier funziona così: in input riceve i parametri e la metrica di un trial appena eseguito; in output suggerisce i parametri per il trial successivo. Quando serve, però, Vizier offre un'ulteriore flessibilità. Il consiglio è comunque di muoversi con cautela tra queste opzioni di configurazione avanzate. Vizier esegue infatti un'ottimizzazione annidata: i trial sono già di per sé ottimizzazioni e Vizier punta a convergere sulla risposta migliore attraverso queste ripetizioni, ciascuna delle quali ha un costo. Se aggiunge un ulteriore livello di annidamento avviando più studi Vizier sullo stesso problema, ogni volta modificando la configurazione opzionale e rilanciando, il costo di queste ottimizzazioni rischia di superarne i benefici.

Algoritmo di ricerca

Può scegliere l'algoritmo di ricerca con cui Vizier esplora lo spazio dei parametri alla ricerca della combinazione migliore. Il primo è la grid search, che attraversa lo spazio dei parametri a intervalli regolari, provando il maggior numero possibile di opzioni entro il limite delle iterazioni. C'è poi la random search, che si limita a saltare nello spazio dei parametri e che, sorprendentemente, funziona piuttosto bene. Questi due algoritmi sembrano abbastanza elementari e potrebbe applicarli anche senza Vizier — scorrendo con metodo l'intervallo degli iperparametri o provando combinazioni a caso — con risultati equivalenti. Quando però si appoggia a Vizier, è quest'ultimo a tracciare e gestire l'intero processo. Con grid o random search, Vizier è gratuito.

Più sofisticata è la Bayesian search, in cui Vizier costruisce un proprio modello interno per ottimizzare i suggerimenti. (Per i dettagli, consulti il research paper.) A differenza dei salti casuali o a passo predeterminato, da questo approccio ci si può attendere una convergenza decisamente più rapida.

La Bayesian search è l'opzione predefinita ed è l'unica a pagamento: costa un dollaro a trial dopo i primi 100 trial al mese, che restano gratuiti. Dato che Vizier è progettato per ridurre al minimo la ripetizione di processi di ottimizzazione costosi, si tratta di una cifra trascurabile rispetto, ad esempio, a una singola iterazione di training ML che può costare 20 dollari, o a un test A/B che può comportare migliaia di dollari di mancati ricavi. Inoltre, offrendo un servizio di iperottimizzazione anziché una libreria da implementare in autonomia, Vizier le risparmia tempo e costi di setup dell'architettura.

Quando fermarsi

Come accennato, Vizier può consigliarle quando interrompere lo studio. Nel grafico qui sotto, la curva verde tratteggiata prima migliora e poi inizia a peggiorare: conviene quindi fermarsi, e Vizier è in grado di rilevarlo. La curva arancione tratteggiata, al contrario, sta migliorando rapidamente e vale la pena proseguire; le curve continue rappresentano una situazione intermedia. Può configurare l'algoritmo che Vizier utilizza per questa decisione: può chiedergli di suggerire l'interruzione dello studio quando l'ultima iterazione non supera la mediana di tutte le precedenti, oppure non supera quella delle ultime.

Figura 1. Suggerimenti su quando fermarsi (basato sul research paper. )

Scegliere il set di parametri ottimale

Al termine dello studio, Vizier le indica quale set di parametri si è rivelato migliore, e può specificare a Vizier il criterio con cui effettuare questa selezione. Sembrerebbe ovvio scegliere il trial che ha prodotto le metriche migliori, ed è infatti l'opzione predefinita. Tuttavia, se il processo è molto rumoroso (vedi immagine sotto), il picco potrebbe essere frutto del caso, un'oscillazione momentanea, talvolta definita Winner's Curse. Se sa di trovarsi in presenza di questo tipo di rumore, ma con un trend complessivamente in crescita, può chiedere a Vizier di scegliere semplicemente l'ultimo trial.

Figura 2. Winner's Curse: perché il valore migliore non è sempre la scelta giusta

Transfer Learning

Vizier può sfruttare in modo incrementale ciò che ha già appreso, dando vita a un nuovo studio che si fonda su uno studio precedente analogo. Supponiamo che abbia ottimizzato il suo sito web con test A/B guidati da Vizier, ma che qualche settimana dopo venga rilasciata una nuova versione con funzionalità rilevanti, che desidera anch'essa mettere a punto. Con resumePreviousJobId trasferisce l'apprendimento da un altro studio. Il risultato è un sensibile risparmio di tempo e denaro: riutilizza il lavoro di modellazione già svolto ed esegue molti meno di quei trial lenti e costosi su cui Vizier la sta supportando.

Oggi questa funzionalità è supportata solo nella versione interna di Vizier che alimenta l'hyperparameter tuner di AI Platform e non è disponibile in nessuna delle due API a marchio Vizier.

Le API

Vizier mette a disposizione diverse API.

L'API di Vertex AI Vizier (talvolta indicata come "GAPIC", dal nome del generatore di client Protocol Buffer utilizzato) ruota attorno alla classe Python VizierServiceClient. È un prodotto Generally Available e rappresenta la direzione futura preferenziale per Google. È quindi l'API principale su cui concentrarsi.

Vizier è esposto anche tramite un'altra API, retroportata sulla precedente AI Platform di GCP e oggi in beta. È un'API discovery-based: nella libreria non trova alcuna funzione implementata, ma richiama funzioni definite tramite uno strato wrapper dinamico. Non è complesso come può sembrare: documentazione, sperimentazione e codice di esempio (incluso il mio, qui sotto) la rendono pienamente utilizzabile.

L'altra implementazione di Vizier, come accennato, è il progetto open-source, se preferisce gestirlo in autonomia o semplicemente leggerne il codice.

Walkthrough del codice

In rete si trovano pochissimi esempi di codice. La documentazione ufficiale di Vizier propone infatti un solo notebook ML per l'API Vizier di AI Platform retroportata, e nessuno per la più recente API di Vertex AI Vizier. Per questo ho preparato questo notebook. È costruito attorno a un normale processo di training ML eseguito internamente nel container (anche se, come sappiamo, Vizier è indipendente dalle modalità con cui quel training viene eseguito). Può seguirlo passo passo grazie ai commenti numerati #[0], #[1] e così via.

Ryan Holbrook ha inoltre realizzato questo notebook open-source. Le suggerisco di utilizzare questa variante che ho preparato: mostra l'output di un'esecuzione andata a buon fine ed è stata leggermente rivista per renderne più semplice l'esecuzione end-to-end senza ulteriori configurazioni.

Forse ha già utilizzato un servizio di hyperparameter tuning per il suo ML: Vizier è questo e molto di più. Dal momento che Vizier non sa nulla del ML, e nemmeno che lei stia facendo ML, può impiegarlo per qualsiasi processo di ottimizzazione lento e oneroso. Come servizio è robusto, scalabile e quasi gratuito rispetto ai costosi processi che punta a ridurre al minimo. Le lascia la libertà di seguire o meno i suoi consigli, indicando in entrambi i casi la via verso la convergenza più rapida a una soluzione ottimale.