Bonnes pratiques et dépannage d'Hyperopt
remarque
La version open source de Hyperopt n'est plus maintenue.
Hyperopt n'est pas inclus dans Databricks Runtime for Machine Learning après 16.4 LTS ML. Databricks recommande d'utiliser soit Optuna pour l'optimisation à nœud unique, soit RayTune pour une expérience similaire à la fonctionnalité obsolète d'ajustement distribué des hyperparamètres d'Hyperopt. En savoir plus sur l'utilisation de RayTune sur Databricks.
Bonnes pratiques
- Les approches bayésiennes peuvent être beaucoup plus efficaces que la recherche par grille et la recherche aléatoire. Ainsi, avec l'algorithme Hyperopt Tree of Parzen Estimators (TPE), vous pouvez explorer davantage d'hyperparamètres et des plages plus larges. L'utilisation des connaissances du domaine pour restreindre le domaine de recherche peut optimiser l'ajustement et produire de meilleurs résultats.
- Lorsque vous utilisez
hp.choice(), Hyperopt renvoie l'index de la liste de choix. Par conséquent, le parameter enregistré dans MLflow est également l'index. Utilisezhyperopt.space_eval()pour récupérer les valeurs de parameter. - Pour les modèles avec des temps d'entraînement longs, start à expérimenter avec de petits datasets et de nombreux hyperparamètres. Utilisez MLflow pour identifier les modèles les plus performants et déterminer quels hyperparamètres peuvent être définis. De cette façon, vous pouvez réduire l'espace des paramètres lorsque vous vous préparez à l'optimisation à grande échelle.
- Tirez parti du support d'Hyperopt pour les dimensions conditionnelles et les hyperparamètres. Par exemple, lorsque vous évaluez plusieurs variantes de descente de gradient, au lieu de limiter l'espace des hyperparamètres aux seuls hyperparamètres communs, vous pouvez demander à Hyperopt d'inclure des hyperparamètres conditionnels—ceux qui ne sont appropriés que pour un sous-ensemble des variantes. Pour plus d'informations sur l'utilisation des parameters conditionnels, consultez Définition d'un espace de recherche.
- Lorsque vous utilisez
SparkTrials, configurez le parallélisme de manière appropriée pour les clusters uniquement CPU par rapport aux clusters compatibles GPU. Dans Databricks, les clusters CPU et GPU utilisent un nombre différent de threads d'exécuteur par nœud Worker. Les clusters CPU utilisent plusieurs threads d'exécuteur par nœud. Les clusters GPU n'utilisent qu'un seul thread d'exécuteur par nœud afin d'éviter les conflits entre plusieurs tâches Spark essayant d'utiliser le même GPU. Bien que cela soit généralement optimal pour les bibliothèques écrites pour les GPU, cela signifie que le parallélisme maximal est réduit sur les clusters GPU, vous devez donc être conscient du nombre de GPU que chaque essai peut utiliser lors de la sélection des types d'instances GPU. Consultez les clusters compatibles GPU pour plus de détails. - N'utilisez pas
SparkTrialssur les clusters à mise à l'échelle automatique. Hyperopt sélectionne la valeur de parallélisme au début de l'exécution. Si le cluster se met à l'échelle automatiquement par la suite, Hyperopt ne pourra pas tirer parti de la nouvelle taille de cluster.
Dépannage
- Une perte signalée de NaN (pas un nombre) signifie généralement que la fonction objective transmise à
fmin()a renvoyé NaN. Cela n'affecte pas les autres exécutions et vous pouvez l'ignorer en toute sécurité. Pour éviter ce résultat, essayez d'ajuster l'espace des hyperparamètres ou de modifier la fonction objective. - Parce qu'Hyperopt utilise des algorithmes de recherche stochastique, la perte ne diminue généralement pas de manière monotone à chaque exécution. Cependant, ces méthodes trouvent souvent les meilleurs hyperparamètres plus rapidement que d'autres méthodes.
- Hyperopt et Spark entraînent tous deux une surcharge qui peut dominer la durée de l’essai pour les exécutions d’essai courtes (quelques dizaines de secondes). L'accélération que vous observez peut être faible, voire nulle.
Exemple de notebook : Meilleures pratiques pour les datasets de différentes tailles
SparkTrials exécute les essais sur les nœuds Worker Spark. Ce Notebook fournit des lignes directrices sur la façon de déplacer des datasets de différents ordres de grandeur vers des nœuds Worker lors de l'utilisation de SparkTrials.