Procedure consigliate: Ottimizzazione degli iperparametri con Hyperopt

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 più 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 si valutano più tipi di discesa del gradiente, invece di limitare lo spazio degli iperparametri solo agli iperparametri comuni, è possibile includere iperparametri condizionali, quelli appropriati solo per un subset dei sapori. Per altre informazioni sull'uso dei parametri condizionali, vedere Definizione di uno spazio di ricerca.
  • Quando si usa SparkTrials, configurare il parallelismo in modo appropriato per i cluster solo CPU rispetto ai cluster abilitati per 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 questo sia in genere ottimale per le librerie scritte per le GPU, significa che il parallelismo massimo viene ridotto nei cluster GPU, quindi tenere presente il numero di GPU che ogni versione di valutazione può usare quando si selezionano i 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 la funzione obiettivo passata a fmin() NaN restituito. Ciò non influisce su altre esecuzioni e può essere ignorato in modo sicuro. 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 che Spark comportano un sovraccarico che può dominare la durata della versione di valutazione per le esecuzioni di prova brevi (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 versioni di valutazione nei nodi del ruolo 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.

Gestire set di dati di diversi ordini di notebook di grandezza

Ottenere il notebook