Vous menez un processus d'optimisation où chaque essai coûte cher, en temps comme en argent. Il peut s'agir d'un entraînement de Machine Learning (ML), où chaque exécution prend des heures et des dizaines de dollars, ou de tests A/B où chaque itération peut prendre une journée et coûter potentiellement des milliers de dollars en revenus perdus. Cela peut aussi être la gestion de la chaîne d'approvisionnement d'une usine, où le choix des intrants quotidiens pour un coût minimal et un rendement maximal relève du pari : une mauvaise estimation peut coûter une journée et beaucoup d'argent.
Si un essai n'est pas assez concluant, vous recommencez. Mais lorsque chaque essai coûte cher, pas question de tâtonner sur les paramètres : vous voulez converger vers les meilleurs paramètres possibles en un minimum d'essais.
Cette série de trois articles présente une nouvelle approche pour réduire le coût de l'entraînement ML et d'autres processus d'optimisation : le workflow d'optimisation Black Box avec Google Vertex AI Vizier.
Point essentiel à retenir : Vizier ne se limite pas au Machine Learning. Il ne sait même pas que vous faites du ML et n'intervient pas dans les essais eux-mêmes. Vizier ne connaît que ce que vous lui dites : les paramètres et la mesure objective (la qualité des résultats obtenus). C'est vous l'expert, et c'est vous qui exécutez l'entraînement ML ou tout autre processus à optimiser ; Vizier joue le rôle d'un conseiller externe qui vous suggère la prochaine itération.
Pour l'entraînement ML, Vertex AI Vizier vous aide à choisir les meilleurs hyperparamètres possibles — ceux qui configurent l'entraînement dans son ensemble — comme la régularisation, les taux d'apprentissage, ou le nombre et la taille des couches. De plus, le type de modèle utilisé pour le prochain entraînement constitue lui-même un paramètre à explorer : par exemple, déterminer si un problème de classification binaire doit être résolu avec Naive Bayes, une régression logistique ou XGBoost.
Comme Vertex AI Vizier se contente de conseiller l'entraînement depuis l'extérieur, vous pouvez l'utiliser avec n'importe quel type de ML. Vous pouvez recourir au SDK Google Vertex pour lancer des jobs d'entraînement personnalisés, ou entraîner votre propre modèle TensorFlow ou PyTorch dans un conteneur personnalisé.
Comment utiliser Vizier
Vous connaissez peut-être les bibliothèques de tuning d'hyperparamètres comme celles de Scikit et Hyperopt. Elles enchaînent les essais ML en ajustant les hyperparamètres à chaque itération, pour tenter de converger vers le meilleur résultat.
Un service de tuning d'hyperparamètres comme ceux de Google et d'AWS simplifie radicalement le processus en supprimant la nécessité de configurer les bibliothèques et l'infrastructure de calcul.
Vertex AI Vizier va encore plus loin avec le processus Black Box que je vais décrire dans cette série. La différence fondamentale tient au mode d'utilisation : avec Vizier, vous menez des essais interactifs en sollicitant ses conseils à chaque itération, et il vous renvoie des suggestions fondées uniquement sur la qualité des résultats des essais précédents.
Le processus
Voici les grandes étapes de mise en œuvre du workflow avec Vertex AI Vizier :
- Créez d'abord une étude Vertex AI Vizier, qui contiendra plusieurs essais. L'étude est définie par une configuration qui précise les objectifs (les mesures/métriques) et les valeurs d'entrée (hyperparamètres) de vos expériences, appelées essais.
- Exécutez un essai : entraînement d'un modèle de Machine Learning ou exécution d'un autre processus à optimiser.
- Appelez Vertex AI Vizier en lui transmettant les paramètres ainsi que la mesure d'optimisation issue de cet essai. Dans le cas de l'entraînement d'un modèle ML, cette métrique peut être, par exemple, la cross-entropy loss ou la balanced accuracy sur vos données de validation, après le découpage habituel train/validation/test.
- La réponse à cette requête contient des suggestions pour le prochain essai, sous la forme d'un ou plusieurs jeux de paramètres exploitables pour définir l'essai suivant.
- Lancez l'essai suivant, généralement à partir des paramètres suggérés. Mais ce ne sont que des suggestions : vous restez libre de choisir vos propres paramètres. Dans tous les cas, Vertex AI Vizier continue d'apprendre.
- Poursuivez avec l'essai suivant.
- Arrêtez les itérations lorsque vous avez réalisé suffisamment d'essais (nous y reviendrons).
Schéma du flux d'interaction avec Vizier
Vertex AI Vizier est un service en mode SaaS. Il suffit d'appeler un service REST via une API Python pratique, que nous aborderons plus loin.
À quoi ressemble un appel d'API
Voici un exemple d'entrée et de sortie. La présentation est un peu simplifiée, mais elle illustre l'essentiel de l'invocation REST. (En pratique, vous utiliseriez un client Python, abordé plus loin.)
Entrée :
{
"Params": {"flour": 0.21, "recipe": "Pam's chocolate chip", "eggs": 2 },
"rating": 8.1
}
Sortie :
{"flour": 0.32, "recipe": "Chocoflake", "eggs": 1}
Ce JSON illustre un cas d'optimisation d'une recette de cookies, réellement menée par l'équipe de recherche : la cuisson des cookies est tellement coûteuse et chronophage qu'on ne souhaite pas la répéter des centaines de fois !
Les paramètres incluent la quantité de chaque ingrédient : un paramètre flottant et un paramètre entier. Un autre paramètre est le choix de la recette, de type catégoriel (avec quelques options, sans ordre entre elles).
L'entrée comprend aussi la mesure de réussite, à savoir la note attribuée aux cookies par les goûteurs.
La sortie, c'est-à-dire la réponse de l'appel REST, est une suggestion (en pratique, potentiellement plusieurs suggestions) de paramètres à utiliser pour la prochaine fournée.
Exécuter les essais d'une étude
Vous pouvez réaliser les essais de manière itérative, mais aussi en parallèle. Vous demandez à Vertex AI Vizier plusieurs suggestions, par exemple cinq, puis vous lancez simultanément cinq essais. Le parallélisme implique un compromis : d'un côté, il accélère le processus, mais de l'autre, l'approche itérative présente l'avantage de permettre à Vizier d'affiner ses recommandations à chaque essai en s'appuyant sur tous les précédents.
Le nombre d'essais peut être fixé à l'avance, par exemple vingt : la recommandation est de dix fois le nombre de paramètres. Vizier peut aussi vous indiquer quand arrêter, en fonction de la convergence des résultats. Cette frugalité dans le nombre d'essais est cruciale, puisque chacun coûte cher.
La suite
Récemment, en février 2023, Vizier a été publié dans une variante open source. Je vous recommande d'en explorer l'implémentation. Toutefois, la version open source ne contient pas l'algorithme central d'optimisation bayésienne, et le service Vertex AI Vizier offre simplicité d'utilisation, scalabilité et robustesse. Dans cette série d'articles, nous nous concentrerons exclusivement sur Vertex AI Vizier.
Ce premier article propose une synthèse de l'utilisation de Vertex AI Vizier. Le deuxième détaillera les avantages de cette approche Black Box : en vous laissant la maîtrise des processus d'optimisation lourds, vous faites ce que vous savez faire de mieux, comme structurer votre entraînement ML ou d'autres processus coûteux. Pendant ce temps, Vertex AI Vizier fait ce qu'il fait de mieux : vous guider pour obtenir le meilleur résultat avec le minimum d'essais.