Procedure consigliate e risoluzione dei problemi di Hyperopt

Nota

La versione open source di Hyperopt non è più gestita.

Hyperopt non è incluso in Databricks Runtime per Machine Learning dopo la versione 16.4 LTS ML. Azure Databricks consiglia di usare Optuna per l'ottimizzazione a nodo singolo o RayTune per un'esperienza simile alla funzionalità deprecata di Hyperopt per l'ottimizzazione degli iperparametri distribuita. Altre informazioni sull'uso di RayTune in Azure Databricks.

Procedure consigliate

  • Gli approcci bayesiani possono essere molto più efficienti della ricerca griglia e della ricerca casuale. Di conseguenza, con l'algoritmo TPE (Hyperopt Tree of Parzen Estimators), è possibile esplorare altri iperparametri e intervalli più grandi. L'uso delle informazioni sul dominio per limitare il dominio di ricerca può ottimizzare l'ottimizzazione e produrre risultati migliori.
  • Quando si usa hp.choice(), Hyperopt restituisce l'indice dell'elenco di scelte. Pertanto, anche il parametro registrato in MLflow è l'indice. Usare hyperopt.space_eval() per recuperare i valori dei parametri.
  • Per i modelli con tempi di training lunghi, iniziare a sperimentare con set di dati di piccole dimensioni e molti iperparametri. Usare MLflow per identificare i modelli con prestazioni migliori e determinare quali iperparametri possono essere corretti. In questo modo, è possibile ridurre lo spazio dei parametri durante la preparazione all'ottimizzazione su larga scala.
  • Sfruttare il supporto di Hyperopt per dimensioni condizionali e iperparametri. Ad esempio, quando valuti più varianti della discesa del gradiente, invece di limitare lo spazio degli iperparametri ai soli iperparametri comuni, puoi fare in modo che Hyperopt includa iperparametri condizionali, ossia quelli appropriati solo per un sottoinsieme delle varianti. Per altre informazioni sull'uso dei parametri condizionali, vedere Definizione di uno spazio di ricerca.
  • Quando si utilizza SparkTrials, configurare il parallelismo in modo adeguato per i cluster con sola CPU rispetto a quelli dotati di GPU. In Azure Databricks, i cluster CPU e GPU usano diversi numeri di thread executor per nodo di lavoro. I cluster CPU usano più thread executor per nodo. I cluster GPU usano un solo thread executor per nodo per evitare conflitti tra più attività Spark che tentano di usare la stessa GPU. Sebbene ciò sia generalmente ottimale per le librerie scritte per le GPU, significa che il parallelismo massimo si riduce sui cluster GPU, quindi è bene considerare quante GPU può usare ogni prova nella selezione dei tipi di istanza GPU. Per informazioni dettagliate, vedere Cluster abilitati per GPU.
  • Non usare SparkTrials nei cluster di scalabilità automatica. Hyperopt seleziona il valore di parallelismo all'inizio dell'esecuzione. Se il cluster viene ridimensionato in un secondo momento, Hyperopt non sarà in grado di sfruttare le nuove dimensioni del cluster.

Risoluzione dei problemi

  • Una perdita segnalata di NaN (non un numero) indica in genere che la funzione obiettivo passata a fmin() ha restituito NaN. Ciò non influisce su altre esecuzioni e puoi tranquillamente ignorarlo. Per evitare questo risultato, provare a regolare lo spazio degli iperparametri o a modificare la funzione obiettivo.
  • Poiché Hyperopt usa algoritmi di ricerca stocastici, la perdita in genere non diminuisce monotonicamente con ogni esecuzione. Tuttavia, questi metodi spesso trovano gli iperparametri migliori più rapidamente rispetto ad altri metodi.
  • Sia Hyperopt sia Spark comportano un overhead che può incidere in modo predominante sulla durata nelle esecuzioni di prova brevi (poche decine di secondi). La velocità osservata può essere piccola o pari a zero.

Notebook di esempio: Procedure consigliate per set di dati di dimensioni diverse

SparkTrials esegue le prove nei nodi di lavoro Spark. Questo notebook fornisce linee guida su come spostare set di dati di diversi ordini di grandezza nei nodi di lavoro quando si usa SparkTrials.

Notebook per gestire set di dati di ordini di grandezza diversi

Ottieni il notebook