Guide de démarrage d'un nouveau projet

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

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

Hypothèses

Dans cette section, nous vous conseillons de tenir compte des points suivants:

  • 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 représentatives. que possible de ce que vous prévoyez de mesurer dans l'environnement déployé.

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

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 ne contient pas paramètre. Par exemple : un réseau de neurones composé de 3 couches cachées de 10 nœuds, 5 nœuds et 3 nœuds. est l'architecture d'un modèle.
  • Un modèle est une architecture de modèle, ainsi que des valeurs spécifiques pour toutes les paramètres. Par exemple, un modèle est constitué du réseau de neurones décrit dans la définition de l'architecture du modèle, ainsi que les valeurs spécifiques les pondérations et les biais de chaque nœud.
  • Une famille de modèles est un modèle permettant de construire l'architecture d'un modèle selon un ensemble d'hyperparamètres.

Le choix de l'architecture du modèle implique de choisir un ensemble (un pour chaque réglage des hyperparamètres du modèle).

Si possible, essayez de trouver un codebase documenté aussi proche que possible du problème actuel. Ensuite, reproduisez ce modèle un point de départ.

Choisir l'optimiseur

Aucun optimiseur n'est le "meilleur" pour tous les types de problèmes de ML et les architectures de modèles. Ne serait-ce que de comparer les performances des optimiseurs est très difficile. 💡 Nous vous recommandons d'utiliser des optimiseurs connus et populaires, en particulier lors du démarrage d'un nouveau projet.

Nous vous recommandons de choisir l'optimiseur le plus populaire pour le type de problème. sur lesquels vous travaillez. Nous vous recommandons d'utiliser les optimiseurs reconnus suivants:

Faites attention à tous les arguments de l'optimiseur choisi. Les optimiseurs avec plus d'hyperparamètres nécessitent généralement davantage d'efforts de réglage. Cela est particulièrement pénible au début d’un projet, lorsque vous essayez de trouver les meilleures valeurs de plusieurs autres hyperparamètres (par exemple, le taux d'apprentissage), tout en traitant les arguments de l'optimiseur nuisibles. Par conséquent, nous recommandons l'approche suivante:

  1. Au début du projet, choisissez un optimiseur n'ayant pas hyperparamètres. Voici deux exemples: <ph type="x-smartling-placeholder">
      </ph>
    • SGD avec momentum fixe.
    • Adam avec Epsilon, Beta1 et Beta2 fixes.
  2. Dans les étapes ultérieures du projet, passez à un optimiseur plus général qui règle plus d'hyperparamètres au lieu de les corriger sur leurs valeurs par défaut.

Choisir la taille de lot

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

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

  • Permet de régler les hyperparamètres de manière plus approfondie dans un délai déterminé ce qui peut produire un meilleur modèle final.
  • Réduit la latence du cycle de développement, ce qui permet de faire émerger de nouvelles idées testé plus fréquemment.

Augmenter la taille de lot peut réduire ou augmenter la consommation de ressources, ou ne pas modifier la consommation des ressources.

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

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

Vous devez pouvoir obtenir les mêmes performances finales avec n'importe quelle taille de lot. (Voir Shallue et al. 2018 et Pourquoi la taille de lot ne doit-elle pas être ajustée pour améliorer performances de l'ensemble de validation ?)

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

Pour un modèle et un optimiseur donnés, le matériel disponible prend généralement en charge dans une plage de tailles de lot. Le facteur limitant est généralement de l'accélérateur. Malheureusement, il peut être difficile de déterminer des tailles de lot peuvent tenir en mémoire sans exécuter ni au moins compiler les programme de formation complet. La solution la plus simple consiste généralement à exécuter des jobs d'entraînement pour différentes tailles de lot (par exemple, augmenter les puissances de 2) d'étapes jusqu'à ce que l'une des tâches dépasse la mémoire disponible. Pour chaque taille de lot, l'entraînement doit être suffisamment long pour obtenir une estimation fiable 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 doit également doubler (ou au moins le doubler). De manière équivalente, le temps par étape doit être constant (ou au moins presque constante) à mesure que la taille de lot augmente. Si ce n'est pas le cas, alors Le pipeline d'entraînement présente un goulot d'étranglement, tel que des E/S ou des synchronisations 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'à atteindre la taille de lot maximale, alors ne prendre en compte que des tailles de lot jusqu'à cette taille maximale, même si le matériel prend en charge une taille de lot plus importante. Tous les avantages liés à l'utilisation d'une taille de lot plus importante supposent le débit d'entraînement augmente. Si ce n'est pas le cas, corrigez le goulot d'étranglement ou utilisez une taille de lot plus petite.

L'accumulation de gradient simule une taille de lot supérieure à celle du matériel et n'offre donc aucun avantage en termes de débit. Vous devez évitent généralement l'accumulation de gradients dans le travail appliqué.

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 d'une taille de lot plus grande pour 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 de pas)

On peut souvent considérer que le temps par étape est à peu près constant pour toutes les tailles de lot réalisables. Cela est vrai dans les cas suivants:

  • Les calculs parallèles n'entraînent pas de frais généraux.
  • 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 de l'entraînement. En pratique, il y a généralement au moins dus à l'augmentation de la taille de lot.

À 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 paramètres les hyperparamètres appropriés lors de la modification de la taille de lot. (Voir Shallue et al. 2018). Par exemple, le fait de doubler la taille de lot peut réduire de moitié le nombre total étapes requises. Cette relation, appelée scaling parfait, doit pour toutes les tailles de lot jusqu'à une taille de lot critique.

Au-delà de la taille de lot critique, l'augmentation de cette taille produit des rendements décroissants. Autrement dit, l'augmentation de la taille de lot ne réduit plus le nombre d'étapes d'entraînement, mais ne l'augmente jamais. Par conséquent, la taille de lot qui réduit la durée d'entraînement est généralement la plus grande taille de lot tout en réduisant le nombre d'étapes d'entraînement obligatoire. Cette taille de lot dépend de l'ensemble de données, du modèle et l'optimiseur, et il s'agit d'un problème ouvert : comment le calculer ? pour la trouver expérimentalement pour chaque nouveau problème. 🤖

Lorsque vous comparez des tailles de lot, tenez compte de la distinction entre les éléments suivants:

  • Un exemple de budget ou un budget epoch, qui permet d'exécuter tous les tests pendant en corrigeant le nombre d'exemples de présentations de formation.
  • Un budget d'étape, qui consiste à exécuter tous les tests avec un nombre fixe étapes d'entraînement.

La comparaison des tailles de lot avec un budget d'époque ne permet de mise à l'échelle, même si des lots de plus grande taille peuvent tout de même fournir une accélération significative en réduisant le nombre d'étapes d'entraînement requises. Souvent, la taille de lot la plus importante compatible avec le matériel disponible est inférieure à la taille de lot critique. Par conséquent, une bonne règle (sans réaliser d'expériences) est d'utiliser le plus gros lot Il n'est pas utile d'utiliser une taille de lot plus importante en augmentant le temps 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, acheter du nouveau matériel ou réécrire le pour implémenter l'entraînement multi-GPU / multiTPU.
  • Coûts d'utilisation. Par exemple, la facturation en fonction des budgets de ressources de l'équipe, la facturation auprès d'un fournisseur de services cloud, les coûts d'électricité / de maintenance.

Si l'augmentation de la taille de lot engendre des coûts initiaux importants, il peut être préférable de différer l'augmentation de la taille de lot jusqu'à ce que le projet a évolué et il est plus facile d'évaluer le rapport coûts-avantages. La mise en œuvre de programmes d'entraînement parallèles à hôtes multiples peut introduire bugs et problèmes subtils il vaut donc probablement mieux commencer par une méthode plus simple pipeline quand même. D'autre part, une accélération importante du temps d'entraînement peut s'avérer très bénéfique au début du processus, lorsque de nombreux réglages tests sont nécessaires.

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

consommation des ressources = consommation de 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 des ressources dépend La consommation par étape évolue, selon la taille de lot, comme suit:

  • L'augmentation de la taille de lot peut réduire la consommation de ressources. Par exemple, si chaque étape avec une taille de lot plus importante peut être exécutée sur le même matériel que le lot plus petit (avec seulement un petit augmentation du temps par étape), alors toute augmentation de la ressource la consommation par pas peut être compensée par la baisse le nombre d'étapes.
  • L'augmentation de la taille de lot peut ne pas modifier la consommation des ressources. Par exemple, si le fait de doubler la taille de lot réduit de moitié le nombre d'étapes nécessaires 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 de ressources. Par exemple, si l'augmentation de la taille de lot nécessite une mise à niveau du matériel, l'augmentation de la consommation par pas peut l'emporter sur la réduction de le nombre de pas.

La modification de la taille de lot nécessite de réajuster 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 démarrer le réglage tout recommencer. Les hyperparamètres qui interagissent le plus fortement avec la taille de lot. Il est donc plus important de régler séparément pour chaque taille de lot sont les suivantes:

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

Prenez cela en compte lorsque vous choisissez la taille de lot au début d'un projet. Si vous devez changer de taille de lot par la suite, vous devrez peut-être le réglage des autres hyperparamètres est difficile, chronophage et coûteux. pour la nouvelle taille de lot.

Interaction de la norme de lot avec la taille de lot

La norme de traitement par lot est complexe et, en général, doit utiliser un autre que le calcul du gradient pour calculer les statistiques. Voir Implémentation de la normalisation par lot détails pour une discussion détaillée.

Choisir la configuration initiale

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

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

La détermination de cette configuration initiale nécessite des entraînements configurés et des tests-erreurs.

Notre principe directeur est le suivant:

Trouver un modèle simple, relativement rapide et relativement faible utilisant des ressources permettant d'obtenir des performances raisonnables.

où :

  • Simplicité signifie éviter les fonctionnalités inutiles du pipeline, telles que les ou des stratagèmes d'architecture. Par exemple, un pipeline sans abandon régularisation (ou lorsque la régularisation par abandon est désactivée) est plus simple la régularisation par abandon.
  • Les performances raisonnables dépendent du problème, mais au minimum, un modèle entraîné raisonnable est plus performant que le hasard. sur l'ensemble de validation.

Choisir une configuration initiale rapide et peu gourmande en ressources rend le réglage des hyperparamètres beaucoup plus efficace. Par exemple, commencez avec un modèle plus petit.

Pour choisir le nombre d'étapes d'entraînement, vous devez trouver un équilibre entre les deux contraintes:

  • Un entraînement comportant plus d'étapes peut améliorer les performances et simplifier les hyperparamètres des réglages. Pour en savoir plus, consultez Shallue et al. 2018).
  • À l'inverse, si l'entraînement comporte moins d'étapes, chaque cycle d'entraînement et utilise moins de ressources, ce qui améliore l'efficacité des réglages en réduisant la durée entre les cycles, ce qui vous permet d'exécuter davantage de tests en parallèle. De plus, si vous avez choisi un budget d'étapes inutilement élevé au début du le projet, il peut être difficile de le modifier plus tard dans le projet ; Exemple : Une fois que vous avez ajusté la programmation du taux d'apprentissage pour ce nombre d'étapes.