Cette section détaille le pipeline d'entraînement.
Optimiser le pipeline d'entrée
Résumé: les causes et les interventions des pipelines liés aux entrées dépendent fortement de la tâche. Utilisez un profileur et recherchez les problèmes courants.
Utilisez un profileur approprié, tel que l'un des suivants, pour diagnostiquer les pipelines liés à une entrée:
- Perfetto pour JAX
- Profileur TensorFlow pour TensorFlow.
En fin de compte, les causes et les interventions spécifiques dépendent fortement des tâches. Des considérations d'ingénierie plus globales (par exemple, réduire l'encombrement du disque) peuvent nuire aux performances du pipeline d'entrée.
Voici les causes fréquentes de pipelines d'entrée:
- Les données ne sont pas colocalisées avec le processus d'entraînement, ce qui entraîne une latence d'E/S. Par exemple, la lecture des données d'entraînement sur un réseau peut entraîner une latence d'E/S.
- Prétraitement coûteux des données en ligne. Envisagez de procéder au prétraitement une fois hors connexion et d'enregistrer les résultats.
- Obstacles de synchronisation involontaire qui interfèrent avec le préchargement du pipeline de données. (par exemple, lors de la synchronisation des métriques entre l'appareil et l'hôte dans CommonLoopUtils).
Nous suggérons les interventions suivantes pour les pipelines liés aux entrées:
- Instrumentez le pipeline d'entrée pour précharger des exemples (par exemple, tf.data.Dataset.prefetch).
- Supprimez les fonctionnalités et les métadonnées inutilisées de chaque élément le plus tôt possible dans le pipeline.
- Augmentez la réplication du nombre de tâches générant des exemples pour le pipeline d'entrée, par exemple à l'aide du service tf.data.
Évaluer les performances du modèle
Résumé: exécutez l'évaluation sur des lots plus importants que l'entraînement. Exécutez des évaluations à intervalles réguliers, et non à intervalles réguliers.
Paramètres d'évaluation
Vous pouvez utiliser les paramètres suivants pour évaluer les performances de vos modèles:
- Évaluation en ligne: collecte des métriques lorsque le modèle diffuse des prédictions dans un environnement de production. L'évaluation en ligne fournit généralement l'évaluation la plus réaliste de la qualité du modèle, car elle correspond à la façon dont celui-ci sera utilisé.
- Évaluation hors connexion: collectez des métriques lorsque le modèle est exécuté sur des ensembles d'entraînement, de validation ou de test hors connexion représentatifs de l'environnement de production. Selon le problème, l'évaluation hors connexion peut s'avérer assez complexe et coûteuse en ressources informatiques.
- Évaluations périodiques: collectez des métriques pendant l'entraînement du modèle, qui peuvent servir de proxy pour l'évaluation hors connexion et/ou sur un sous-ensemble de données utilisées dans l'évaluation hors connexion. Les évaluations périodiques constituent le choix le plus pratique et le plus économique, mais peuvent ne pas refléter entièrement l'environnement de production. Essayez d'utiliser un proxy opportun de l'évaluation hors connexion, sans sacrifier la fiabilité du signal reçu pendant l'entraînement.
Configurer des évaluations périodiques
Nous vous recommandons d'effectuer des évaluations périodiques pendant l'entraînement pour les raisons suivantes:
- Surveiller la progression de l'entraînement en temps réel
- Faciliter la sélection des points de contrôle du modèle rétrospectif.
- Pour examiner les courbes d'entraînement à la fin de l'entraînement.
La configuration la plus simple consiste à effectuer à la fois un entraînement et des évaluations périodiques dans la même instance de calcul, en alternant régulièrement l'entraînement et l'évaluation. Dans ce cas, la taille de lot utilisée pour effectuer des évaluations doit être au moins égale à celle utilisée pour l'entraînement. En effet, vous n'avez pas besoin de conserver les activations du modèle pendant l'évaluation, ce qui réduit les exigences de calcul par exemple.
Effectuez des évaluations périodiques à intervalles de pas réguliers, et non à intervalles de temps. L'évaluation en fonction d'intervalles de temps peut compliquer l'interprétation des courbes d'entraînement, en particulier lorsque l'entraînement peut être affecté par les préemptions des tâches d'entraînement, les problèmes de latence réseau, etc.
La périodicité des métriques de validation et de test (en cas d'utilisation d'un ensemble d'entraînement brassé, d'un ensemble de validation, d'une division d'ensemble de test) peut indiquer des bugs d'implémentation, par exemple:
- Données de test qui se chevauchent avec les données d'entraînement
- Les données d'entraînement ne sont pas brassées correctement.
Effectuez une évaluation à intervalles réguliers pour faciliter la détection de ces problèmes.
Des lots partiels peuvent se produire lorsque les ensembles d'évaluation ne sont pas divisibles en fonction de la taille de lot. Assurez-vous que les exemples remplis sont correctement pondérés (comme dans la moyenne pondérée par rapport aux exemples calculant la perte moyenne sur le lot) pour éviter que la fonction de perte ne soit biaisée par eux. Souvent, vous pouvez attribuer une pondération de zéro à ces exemples avec marge intérieure.
Enregistrez suffisamment d'informations par évaluation pour permettre l'analyse hors connexion. Idéalement, enregistrez les prédictions sur une sélection d'exemples individuels, car ils peuvent être utiles pour le débogage. La génération d'artefacts tels que les SavedModel simplifie l'inspection de modèles ad hoc une fois les tâches d'évaluation terminées.
Choisir un échantillon pour une évaluation périodique
La tâche d'évaluation périodique peut ne pas s'exécuter assez rapidement pour calculer des métriques sur l'ensemble de l'évaluation hors connexion dans un délai raisonnable. Ce problème nécessite souvent un échantillonnage des données pour une évaluation périodique. Lorsque vous créez un ensemble de données échantillonné, tenez compte des problèmes de taille d'échantillon et des problèmes particuliers concernant les ensembles de données déséquilibrés.
Taille de l'échantillon
Vérifiez que les performances calculées sur l'ensemble de données échantillonné utilisé par la tâche périodique correspondent à celles de l'ensemble d'évaluation hors connexion. Autrement dit, assurez-vous qu'il n'y a pas de décalage entre l'ensemble de données échantillonné et l'ensemble de données complet.
L'ensemble de données que vous utilisez pour l'évaluation périodique doit être l'un des deux suivants:
- Assez petite pour générer facilement des prédictions pour l'ensemble du modèle.
- Une taille suffisante pour effectuer les deux opérations suivantes :
- Mesurez avec précision les améliorations apportées au modèle, c'est-à-dire que les mesures ne doivent pas être surchargées par le bruit des étiquettes.
- Réalisez plusieurs évaluations de ce type lors d'essais en séquence, tout en générant des estimations précises. Autrement dit, elle est suffisamment grande pour éviter de s'adapter de manière adaptative à l'ensemble de validation au fil du temps, de manière à ne pas généraliser les modifications à un ensemble de test retenu. Toutefois, cette considération est rarement une préoccupation pratique.
Ensembles de données déséquilibrés
Pour des ensembles de données déséquilibrés, les performances des classes minoritaires rares sont souvent bruyantes. Pour les ensembles de données ne comptant qu'un petit nombre d'exemples minoritaires, enregistrez le nombre d'exemples prédits correctement pour mieux comprendre la précision de ces données. Par exemple, l'amélioration de la sensibilité de 0,05 semble intéressante, mais est-ce simplement dû au fait qu'un autre exemple est correct ?
Enregistrer des points de contrôle et sélectionner rétrospectivement le meilleur
Résumé: exécutez l'entraînement pour un nombre fixe d'étapes et choisissez rétroactivement le meilleur point de contrôle lors de la course.
La plupart des frameworks de deep learning sont compatibles avec la gestion des points de contrôle des modèles. Autrement dit, l'état actuel du modèle est régulièrement enregistré sur le disque. Les points de contrôle permettent à la tâche d'entraînement de résister aux interruptions d'instances. Souvent, le meilleur point de contrôle n'est pas le dernier, en particulier lorsque les performances de l'ensemble de validation n'augmentent pas au fil du temps, mais fluctuent en fonction d'une valeur particulière.
Configurez le pipeline pour suivre les N points de contrôle vus jusqu'à présent pendant l'entraînement. À la fin de l'entraînement, la sélection du modèle consiste simplement à choisir le meilleur point de contrôle. Nous appelons cette approche la sélection de points de contrôle rétrospectifs. Il n'est généralement pas nécessaire de prendre en charge l'arrêt prématuré en avance, car vous spécifiez un budget d'essai et préservez les N points de contrôle détectés jusqu'à présent.
Configuration du suivi des tests
Résumé: lorsque vous effectuez le suivi de différentes expériences, suivez un certain nombre d'éléments essentiels, tels que les performances optimales d'un point de contrôle, ainsi qu'une brève description de l'étude.
Nous vous recommandons de suivre les résultats du test dans une feuille de calcul. Nos feuilles de calcul contiennent souvent les colonnes suivantes:
- Nom de l'étude
- Lien vers l'emplacement de stockage de la configuration de l'étude.
- Notes ou brève description de l'étude.
- Nombre d'essais en cours
- Performances sur l'ensemble de validation du meilleur point de contrôle de l'étude.
- Commandes de reproduction spécifiques ou remarques sur les modifications non nécessaires nécessaires au lancement de l'entraînement
Trouvez un système de suivi pratique qui capture au moins les informations répertoriées ci-dessus. Les tests non suivis peuvent également être inexistants.
Détails de l'implémentation de la normalisation des lots
Résumé: aujourd'hui, vous pouvez souvent remplacer la normalisation de lot par LayerNorm, mais dans les cas où vous ne pouvez pas effectuer ce remplacement, il existe des détails complexes lorsque vous modifiez la taille de lot ou le nombre d'hôtes.
La normalisation par lot normalise les activations en fonction de leur moyenne et de leur variance par rapport au lot actuel. Toutefois, avec le paramètre multi-appareil, ces statistiques diffèrent sur chaque appareil, sauf si elles sont explicitement synchronisées. Les rapports anecdotes (principalement sur ImageNet) indiquent que le calcul de ces statistiques de normalisation à partir d'environ 64 exemples fonctionne en fait mieux. (Voir la description de la normalisation des lots de fantômes dans la section Entraîner un modèle plus longtemps pour mieux généraliser: combler l'écart de généralisation lors d'un entraînement par lot de réseaux de neurones.) La dissociation de la taille totale du lot et du nombre d'exemples utilisés pour calculer les statistiques de norme de lot est particulièrement utile pour les comparaisons de taille de lot.
Les implémentations de normalisation des lots fantômes ne gèrent pas toujours correctement le cas où la taille de lot par appareil est supérieure à la taille de lot virtuel. Dans ce cas, vous devez sous-échantillonner le lot sur chaque appareil pour obtenir le nombre approprié d'exemples statistiques statistiques par lot.
Les moyennes mobiles exponentielles (EMA) utilisées dans le cadre de la normalisation des lots en mode test ne sont qu'une combinaison linéaire de statistiques d'entraînement. Par conséquent, il vous suffit de synchroniser ces EMA avant de les enregistrer dans des points de contrôle. Cependant, certaines implémentations courantes de la normalisation des lots ne synchronisent pas ces EMA et n'enregistrent que l'EMA à partir du premier appareil.
Remarques concernant les pipelines multi-hôtes
Résumé: pour la journalisation, les évaluations, les GAN, les points de contrôle et la segmentation des données, l'entraînement multi-hôte peut être très facile à introduire des bugs.
Procédez comme suit pour les pipelines à hôtes multiples:
- Assurez-vous que le pipeline n'effectue la journalisation et des points de contrôle que sur un seul hôte.
- Synchronisation des statistiques de normalisation par lot sur les hôtes avant l'évaluation ou la création de points de contrôle.
- Segmentez les fichiers de données entre les hôtes, car cela améliore généralement les performances.
Critique:assurez-vous de disposer de graines de la RNG qui sont identiques sur tous les hôtes (pour l'initialisation du modèle) et de graines différentes sur tous les hôtes (pour le brassage/prétraitement des données). Par conséquent, veillez à les marquer correctement.