Guide de démarrage d'un nouveau projet

Cette section explique comment sélectionner les éléments suivants au début d'un projet de ML:

  • l'architecture du modèle
  • l'optimiseur
  • la taille de lot
  • la configuration initiale

Hypothèses

Les conseils de cette section supposent ce qui suit:

  • Vous avez déjà formulé le problème et préparé vos données d'entraînement dans une certaine mesure.
  • Vous avez déjà configuré un pipeline d'entraînement et de test.
  • Vous avez déjà sélectionné et implémenté des métriques aussi représentatives que possible de ce que vous prévoyez de mesurer dans l'environnement déployé.

En supposant que vous avez rempli tous les prérequis précédents, vous êtes maintenant prêt à consacrer du temps à l'architecture du modèle et à la configuration de l'entraînement.

Choisir l'architecture du modèle

Commençons par les définitions suivantes:

  • Une architecture de modèle est un système permettant de produire des prédictions. Une architecture de modèle contient le framework permettant de convertir les données d'entrée en prédictions, mais pas les valeurs de paramètres. Par exemple, un réseau de neurones avec trois couches cachées de 10 nœuds, 5 nœuds et 3 nœuds respectivement constitue une architecture de modèle.
  • Un model est une architecture de modèle plus des valeurs spécifiques pour tous les paramètres. Par exemple, un modèle se compose du réseau de neurones décrit dans la définition de l'architecture du modèle, ainsi que de valeurs spécifiques pour les pondérations et les biais de chaque nœud.
  • Une famille de modèles est un modèle permettant de construire une architecture de modèle en fonction d'un ensemble d'hyperparamètres.

Choisir l'architecture du modèle implique en fait de choisir un ensemble de modèles différents (un pour chaque paramètre des hyperparamètres du modèle).

Dans la mesure du possible, essayez de trouver un codebase documenté qui résout un problème aussi proche que possible du problème actuel. Reproduisez ensuite ce modèle comme point de départ.

Choisir l'optimiseur

Aucun optimiseur n'est le "meilleur" pour tous les types de problèmes de machine learning et d'architectures de modèles. Le simple fait de comparer les performances des optimiseurs est difficile. 👀 Nous vous recommandons d'utiliser des optimiseurs connus et bien établis, en particulier lorsque vous démarrez un nouveau projet.

Nous vous recommandons de choisir l'optimiseur le plus utilisé pour le type de problème sur lequel vous travaillez. Nous recommandons les optimiseurs reconnus suivants:

Faites attention à tous les arguments de l'optimiseur choisi. Les optimiseurs comportant plus d'hyperparamètres nécessitent généralement plus de réglages. Cela est particulièrement pénible aux premières étapes d'un projet, lorsque vous essayez de trouver les meilleures valeurs de divers autres hyperparamètres (par exemple, le taux d'apprentissage) tout en traitant les arguments de l'optimiseur comme des inconvénients. Par conséquent, nous vous recommandons la méthode suivante:

  1. Au début du projet, choisissez un optimiseur ne comportant pas de nombreux hyperparamètres réglables. Voici deux exemples :
    • SGD avec Momentum fixe.
    • Adam avec les correctifs Epsilon, Beta1 et Beta2.
  2. Dans les dernières étapes du projet, passez à un optimiseur plus général qui règle davantage d'hyperparamètres au lieu de les corriger sur les valeurs par défaut.

Choisir la taille de lot

Résumé: La taille de lot régit la vitesse de l'entraînement ; ne l'utilisez pas pour ajuster directement les performances de l'ensemble de validation.

La taille de lot détermine en grande partie le temps d'entraînement et la consommation de ressources de calcul. L'augmentation de la taille de lot réduit souvent la durée d'entraînement, qui:

  • Elles vous permettent de régler plus précisément les hyperparamètres dans un intervalle de temps fixe, ce qui peut produire un meilleur modèle final.
  • Réduit la latence du cycle de développement, permettant de tester plus fréquemment les nouvelles idées.

L'augmentation de la taille de lot peut diminuer ou augmenter la consommation des ressources, ou ne pas modifier la consommation.

Ne traitez pas la taille de lot comme un hyperparamètre réglable pour les performances de l'ensemble de validation. Si toutes les conditions suivantes sont remplies, les performances du modèle ne doivent pas dépendre de la taille de lot:

  • Tous les hyperparamètres de l'optimiseur sont réglés correctement.
  • La régularisation est suffisante et bien réglée.
  • Le nombre d'étapes d'entraînement est suffisant.

Les mêmes performances finales doivent être obtenues en utilisant n'importe quelle taille de lot (consultez Shallue et al. 2018 et Pourquoi la taille de lot ne doit-elle pas être ajustée pour améliorer directement les performances de l'ensemble de validation ?).

Déterminer les tailles de lots réalisables et estimer le débit d'entraînement

Pour un modèle et un optimiseur donnés, le matériel disponible est généralement compatible avec une plage de tailles de lot. Le facteur limitant est généralement la mémoire de l'accélérateur. Malheureusement, il peut être difficile de calculer les tailles de lot qui peuvent tenir en mémoire sans exécuter, ou du moins compiler, le programme d'entraînement complet. La solution la plus simple consiste généralement à exécuter des tâches d'entraînement dans différentes tailles de lot (par exemple, en augmentant la puissance de 2) pendant un petit nombre de pas, jusqu'à ce que l'une des tâches dépasse la mémoire disponible. Pour chaque taille de lot, effectuez l'entraînement suffisamment longtemps afin d'obtenir une estimation fiable du débit d'entraînement:

Débit d'entraînement = nombre d'exemples traités par seconde

ou, de manière équivalente, le temps par étape:

Temps par étape = taille de lot / débit d'entraînement

Lorsque les accélérateurs ne sont pas encore saturés, si la taille de lot double, le débit d'entraînement devrait également doubler (ou au moins doubler). De manière équivalente, le temps par étape doit être constant (ou au moins presque constant) à mesure que la taille du lot augmente. Si ce n'est pas le cas, cela signifie que le pipeline d'entraînement présente un goulot d'étranglement, tel que des E/S ou la synchronisation entre les nœuds de calcul. Envisagez de diagnostiquer et de corriger le goulot d'étranglement avant de continuer.

Si le débit d'entraînement n'augmente que jusqu'à une certaine taille de lot maximale, ne prenez en compte que les tailles de lot inférieures à cette taille, même si le matériel accepte des tailles de lot plus importantes. Tous les avantages d'une plus grande taille de lot supposent que le débit d'entraînement augmente. Si ce n'est pas le cas, corrigez le goulot d'étranglement ou utilisez la plus petite taille de lot.

L'accumulation de gradients simule une taille de lot supérieure à la capacité du matériel et n'offre donc aucun avantage en termes de débit. En règle générale, vous devez éviter l'accumulation de gradients dans les tâches appliquées.

Vous devrez peut-être répéter ces étapes chaque fois que vous modifiez le modèle ou l'optimiseur. Par exemple, une architecture de modèle différente peut permettre à une taille de lot plus importante de tenir en mémoire.

Choisir la taille de lot pour réduire la durée d'entraînement

Voici notre définition du temps d'entraînement:

  • durée d'entraînement = (temps par pas) x (nombre total d'étapes)

Vous pouvez souvent considérer que le temps par étape est approximativement constant pour toutes les tailles de lot possibles. Cela est vrai dans les cas suivants:

  • Il n'y a pas de surcharge des calculs parallèles.
  • Tous les goulots d'étranglement liés à l'entraînement ont été diagnostiqués et corrigés. (Consultez la section précédente pour savoir comment identifier les goulots d'étranglement liés à l'entraînement.) En pratique, l'augmentation de la taille de lot entraîne généralement au moins un peu de frais.

À mesure que la taille de lot augmente, le nombre total d'étapes nécessaires pour atteindre un objectif de performances fixe diminue généralement, à condition que vous régliez tous les hyperparamètres pertinents lors de la modification de la taille de lot. (Voir Shallue et al. 2018.) Par exemple, si vous doublez la taille de lot, vous pouvez diviser par deux le nombre total d'étapes requises. Cette relation, appelée scaling parfait, doit s'appliquer à toutes les tailles de lot jusqu'à une taille de lot critique.

Au-delà de la taille de lot critique, l'augmentation de la taille de lot produit des retours décroissants. Autrement dit, l'augmentation de la taille de lot ne réduit plus le nombre de pas d'entraînement, mais ne l'augmente jamais. Par conséquent, la taille de lot qui minimise le temps d'entraînement correspond généralement à la taille de lot plus importante, mais cela réduit toujours le nombre d'étapes d'entraînement requises. Cette taille de lot dépend de l'ensemble de données, du modèle et de l'optimiseur. Il n'est pas toujours possible de le calculer, sauf pour le rechercher à titre expérimental pour chaque nouveau problème. 🤖

Lorsque vous comparez des tailles de lot, tenez compte des distinctions suivantes:

  • Un exemple de budget ou un budget d'epoch : exécuter tous les tests tout en corrigeant le nombre d'exemples de présentations d'entraînement.
  • Un budget de pas : exécuter tous les tests avec un nombre fixe d'étapes d'entraînement

La comparaison des tailles de lot avec un budget d'epoch ne fait que vérifier le régime de scaling parfait, même si des tailles de lot plus importantes peuvent tout de même permettre une accélération significative en réduisant le nombre d'étapes d'entraînement requises. Souvent, la plus grande taille de lot acceptée par le matériel disponible est inférieure à la taille de lot critique. Par conséquent, une bonne règle de base (sans effectuer de test) est d'utiliser la plus grande taille de lot possible.Il n'est pas utile d'utiliser une taille de lot plus importante si cela finit par augmenter la durée d'entraînement.

Choisir la taille de lot pour minimiser la consommation de ressources

Il existe deux types de coûts de ressources associés à l'augmentation de la taille de lot:

  • Coûts initiaux. Par exemple, l'achat d'un nouveau matériel ou la réécriture du pipeline d'entraînement pour mettre en œuvre un entraînement multi-GPU / multiTPU.
  • Coûts d'utilisation. (par exemple, facturation basée sur les budgets des ressources de l'équipe, facturation auprès d'un fournisseur cloud, coûts d'électricité / de maintenance).

Si l'augmentation de la taille de lot implique des coûts initiaux importants, il peut être préférable de reporter l'augmentation de la taille de lot jusqu'à ce que le projet ait abouti et qu'il soit plus facile d'évaluer le compromis coûts-avantages. La mise en œuvre de programmes d'entraînement parallèles multi-hôtes peut introduire des bugs et des problèmes subtils. Il est donc probablement préférable de commencer par un pipeline plus simple. D'un autre côté, une accélération importante de la durée d'entraînement peut s'avérer très bénéfique au début du processus, lorsque de nombreuses tests de réglage sont nécessaires.

Nous faisons référence au coût total d'utilisation (qui peut inclure plusieurs types de coûts différents) comme consommation des ressources, calculé comme suit:

consommation des ressources = consommation des ressources par étape x nombre total d'étapes

L'augmentation de la taille de lot réduit généralement le nombre total d'étapes. L'augmentation ou la diminution de la consommation de ressources dépend de l'évolution de la consommation par étape, qui dépend de la taille de lot, comme suit:

  • L'augmentation de la taille de lot peut réduire la consommation des ressources. Par exemple, si chaque étape avec la plus grande taille de lot peut être exécutée sur le même matériel que la plus petite taille de lot (avec seulement une légère augmentation du temps par pas), toute augmentation de la consommation de ressources par pas peut être compensée par la diminution du nombre de pas.
  • L'augmentation de la taille de lot peut ne pas modifier la consommation des ressources. Par exemple, si le double de la taille de lot divise par deux le nombre d'étapes requises et double le nombre de GPU utilisés, la consommation totale (en heures de GPU) ne change pas.
  • L'augmentation de la taille de lot peut augmenter la consommation des ressources. Par exemple, si l'augmentation de la taille de lot nécessite un matériel mis à niveau, l'augmentation de la consommation par pas peut l'emporter sur la réduction du nombre d'étapes.

La modification de la taille de lot nécessite le réajustement de la plupart des hyperparamètres

Les valeurs optimales de la plupart des hyperparamètres sont sensibles à la taille de lot. Par conséquent, la modification de la taille de lot nécessite généralement de redémarrer le processus de réglage. Voici les hyperparamètres qui interagissent le plus avec la taille de lot, et qui sont donc les plus importants à régler séparément pour chaque taille de lot:

  • Hyperparamètres de l'optimiseur (taux d'apprentissage et Momentum, par exemple)
  • Les hyperparamètres de régularisation

Notez cela lorsque vous choisissez la taille de lot au début d'un projet. Si vous devez changer de taille de lot par la suite, le réajustement des autres hyperparamètres en fonction de la nouvelle taille de lot peut s'avérer difficile, chronophage et coûteux.

Comment la norme de lot interagit avec la taille de lot

La norme de lot est compliquée et doit, en général, utiliser une taille de lot différente de celle du calcul du gradient pour calculer les statistiques. Pour en savoir plus, consultez la page Détails de mise en œuvre de la normalisation des lots.

Choisir la configuration initiale

La première étape du réglage des hyperparamètres consiste à déterminer les points de départ pour les éléments suivants:

  • la configuration du modèle (par exemple, nombre de couches) ;
  • Les hyperparamètres de l'optimiseur (taux d'apprentissage, par exemple)
  • le nombre d'étapes d'entraînement

La détermination de cette configuration initiale nécessite des exécutions d'entraînement configurées manuellement et des essais et erreurs.

Notre principe directeur est le suivant:

Identifiez une configuration simple, relativement rapide, relativement faible en termes de consommation de ressources, qui obtient des performances raisonnables.

où :

  • Simple signifie éviter les fonctionnalités de pipeline inutiles, telles que les régularisations spéciales ou les astuces architecturales. Par exemple, un pipeline sans régularisation par abandon (ou avec la régularisation par abandon désactivé) est plus simple qu'un pipeline avec une régularisation par abandon.
  • Des performances raisonnables dépendent du problème, mais au minimum, un modèle entraîné raisonnable est beaucoup plus performant que le hasard sur l'ensemble de validation.

Le choix d'une configuration initiale rapide et utilisant un minimum de ressources rend le réglage des hyperparamètres beaucoup plus efficace. Par exemple, commencez avec un modèle plus petit.

Le choix du nombre d'étapes d'entraînement implique d'équilibrer les tensions suivantes:

  • Entraîner un modèle avec plus de pas peut améliorer les performances et simplifier le réglage des hyperparamètres. (Pour en savoir plus, consultez Shallue et al. 2018.)
  • À l'inverse, un entraînement comportant moins d'étapes signifie que chaque exécution est plus rapide et utilise moins de ressources, ce qui améliore l'efficacité du réglage en réduisant le délai entre les cycles et vous permet d'exécuter plus de tests en parallèle. De plus, si vous avez choisi un budget de pas inutilement élevé au début du projet, il peut être difficile de le modifier plus tard dans le projet ; par exemple, une fois que vous avez ajusté le calendrier du taux d'apprentissage pour ce nombre d'étapes.