Maison  >  Article  >  Périphériques technologiques  >  Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?

Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?

PHPz
PHPzavant
2023-10-23 11:21:011194parcourir

Réponse 1

Auteur : Ye Xiaofei
Lien : https://www.zhihu.com/question/269707221/answer/2281374258

Quand j'ai atterri chez Mercedes-Benz en Amérique du Nord, il fut un temps afin de tester différentes structures et paramètres, peut former plus d'une centaine de modèles différents en une semaine Pour cette raison, j'ai combiné les pratiques des prédécesseurs de l'entreprise et mes propres réflexions pour résumer un ensemble de méthodes efficaces de gestion des expériences de code, qui a aidé à mettre en œuvre le projet avec succès. Maintenant, je le partage ici avec tout le monde.

Utilisez les fichiers Yaml pour configurer les paramètres de formation

Je sais que de nombreux dépôts open source aiment utiliser l'argparse d'entrée pour transmettre de nombreux paramètres de formation et liés au modèle, ce qui est en fait très inefficace. D'une part, il sera gênant de saisir manuellement un grand nombre de paramètres à chaque fois que vous vous entraînez. Si vous modifiez directement les valeurs par défaut puis accédez au code pour les modifier, cela vous fera perdre beaucoup de temps. Ici, je vous recommande d'utiliser directement un fichier Yaml pour contrôler tous les paramètres liés au modèle et à la formation, et de lier le nom du Yaml au nom du modèle et à l'horodatage. C'est ce que fait la célèbre bibliothèque de détection de nuages ​​de points 3D OpenPCDet, comme illustré ci-dessous. ce lien. github.com/open-mmlab/OpenPCDet/blob/master/tools/cfgs/kitti_models/pointrcnn.yaml

J'ai coupé une partie du fichier yaml du lien donné ci-dessus, comme le montre la figure ci-dessous, cette configuration couvertures de fichiers Il comprend comment prétraiter les nuages ​​de points, les types de classification, divers paramètres du squelette et la sélection de l'optimiseur et de la perte (non illustré dans la figure, veuillez consulter le lien ci-dessus pour plus de détails). En d'autres termes,

Fondamentalement, tous les facteurs qui peuvent affecter votre modèle sont inclus dans ce fichier

, ​​et dans le code, il vous suffit d'utiliser un simple yaml.load() pour lire tous ces paramètres dans un dict. Plus important encore, Ce fichier de configuration peut être enregistré dans le même dossier que votre point de contrôle, vous pouvez donc l'utiliser directement pour la formation des points d'arrêt, le réglage fin ou les tests directs. Il est également très pratique à utiliser pour tester les résultats. les paramètres correspondants.

Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?La modularisation du code est très importante

Certains chercheurs aiment rendre l'ensemble du système trop couplé lors de l'écriture du code, comme écrire la fonction de perte et le modèle ensemble, ce qui entraîne souvent que l'ensemble du système soit affecté si vous. changez un certain petit morceau, les interfaces suivantes changeront également complètement, donc si le code est bien modularisé, cela peut vous faire gagner beaucoup de temps. Le code général d'apprentissage profond peut essentiellement être divisé en plusieurs gros blocs (en prenant pytorch comme exemple) : module d'E/S, module de prétraitement, module de visualisation, corps du modèle (si un grand modèle contient des sous-modèles, une nouvelle classe doit être ajoutée) , fonctions de perte, post-traitement et concaténés dans un script de formation ou de test. Un autre avantage de la modularisation du code est qu'elle vous permet de définir différents paramètres dans yaml pour une lecture facile. De plus, la bibliothèque importlib est utilisée dans de nombreux codes matures. Elle permet de ne pas déterminer quel modèle ou sous-modèle utiliser lors de l'entraînement au code, mais peut être directement définie en yaml.

Tensorboard, tqdm

J'utilise ces deux bibliothèques pratiquement à chaque fois. Tensorboard peut très bien suivre les changements dans la courbe de perte de votre entraînement, ce qui vous permet de juger plus facilement si le modèle est toujours convergent et surajusté. Si vous effectuez un travail lié à l'image, vous pouvez également y mettre des résultats de visualisation. Souvent, il vous suffit de regarder l'état de convergence du tensorboard pour savoir comment fonctionne votre modèle. Est-il nécessaire de passer du temps à tester et à affiner séparément. Tqdm peut vous aider à suivre intuitivement la progression de votre entraînement, ce qui vous facilite la tâche ? arrêt anticipé .

Utilisez pleinement Github

Que vous co-développiez avec plusieurs personnes ou que vous travailliez sur un projet solo, je vous recommande fortement d'utiliser Github (la société peut utiliser bitbucket, plus ou moins) pour enregistrer votre code. Pour plus de détails, veuillez vous référer à ma réponse :

En tant qu'étudiant diplômé, quels outils de recherche scientifique vous semblent utiles ?

https://www.zhihu.com/question/484596211/answer/2163122684

Enregistrer les résultats expérimentaux

Je sauvegarde généralement un Excel général pour enregistrer les résultats expérimentaux. La première colonne est le chemin du yaml correspondant au. modèle, et la première colonne est le chemin du yaml correspondant au modèle. La deuxième colonne est les époques de formation du modèle, et la troisième colonne est le journal des résultats des tests. J'automatise généralement ce processus tant que le total Excel. le chemin est donné dans le script de test, cela peut être facilement fait en utilisant des pandas.

Réponse 2

Auteur : Jason Lien : https://www.zhihu.com/question/269707221/answer/470576066

Le code de gestion Git n'a rien à voir avec l'apprentissage profond ou la recherche scientifique. L'écriture de code est obligatoire. be Utiliser des outils de gestion de versions. Personnellement, je pense que c'est une question de choix d'utiliser ou non GitHub. Après tout, il est impossible que tout le code de l'entreprise soit lié à un Git externe.

Parlons de quelques points auxquels vous devez faire attention lors de l'écriture du code :

1. Essayez d'utiliser le fichier de configuration pour transmettre les paramètres de test et essayez de sauvegarder la configuration sous le même nom que le fichier journal.

D'une part, passer des paramètres externes peut éviter trop de modifications de version sur git à cause des paramètres. Puisque DL n'est pas facile à déboguer, il est parfois inévitable d'utiliser git pour faire une comparaison de code ;

Par contre, après avoir testé des milliers de versions, je pense que vous ne saurez pas quel modèle a quels paramètres. Les bonnes habitudes sont très efficaces. De plus, essayez de fournir des valeurs par défaut pour les paramètres nouvellement ajoutés afin de faciliter l'appel de l'ancienne version du fichier de configuration.

2. Essayez de découpler différents modèles

Dans le même projet, une bonne réutilisabilité est une très bonne habitude de programmation, mais dans le codage DL en développement rapide, on suppose que le projet est axé sur les tâches. Oui, cela peut parfois devenir un obstacle, alors essayez d'extraire certaines fonctions réutilisables. Concernant la structure du modèle, essayez de découpler différents modèles en différents fichiers, ce qui rendra les futures mises à jour plus pratiques. Sinon, certains designs apparemment beaux deviendront inutiles au bout de quelques mois.

3. Tout en satisfaisant un certain degré de stabilité, suivre régulièrement les nouvelles versions du framework

Il y a souvent une situation embarrassante Du début à la fin d'un projet, le framework a été mis à jour vers plusieurs versions, et la nouvelle version possède des fonctionnalités alléchantes, mais malheureusement certaines API ont changé. Par conséquent, vous pouvez essayer de maintenir la version du framework stable au sein du projet. Essayez de considérer les avantages et les inconvénients des différentes versions avant de démarrer le projet. Parfois, un apprentissage approprié est nécessaire.

De plus, ayez un cœur tolérant envers les différents cadres.

4. Une session de formation prend beaucoup de temps. Ne commencez pas aveuglément à exécuter des expériences après le codage. L'expérience personnelle suggère que c'est un bon choix de proposer le mode débogage pour expérimenter avec de petites données + plus de journaux.

5. Enregistrez les changements dans les performances de mise à jour du modèle, car vous devrez peut-être revenir en arrière et recommencer à tout moment.

Auteur : OpenMMLab
Lien : https://www.zhihu.com/question/269707221/answer/2480772257
Source : Zhihu
Le droit d'auteur appartient à l'auteur. Pour une réimpression commerciale, veuillez contacter l'auteur pour obtenir une autorisation. Pour une réimpression non commerciale, veuillez indiquer la source.

Bonjour l'intervenant, la réponse précédente mentionnait l'utilisation de Tensorboard, Weights&Biases, MLFlow, Neptune et d'autres outils pour gérer les données expérimentales. Cependant, à mesure que de plus en plus de roues sont construites pour des outils de gestion expérimentaux, le coût de l'apprentissage de ces outils devient de plus en plus élevé. Comment devrions-nous choisir ?

MMCV répond à tous vos fantasmes, et vous pouvez changer d'outil en modifiant le fichier de configuration.

github.com/open-mmlab/mmcv

Tensorboard enregistre des données expérimentales :

Fichier de configuration :

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='TensorboardLoggerHook') ])

Effet de visualisation des données TensorBoard

Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?

WandB enregistre des données expérimentales

Fichier de configuration

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='WandbLoggerHook') ])

Effet de visualisation des données Wandb

(vous devez vous connecter à wandb avec l'API Python à l'avance)

Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?

Neptume enregistre les données expérimentales

Fichier de configuration

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='NeptuneLoggerHook',  init_kwargs=dict(project='Your Neptume account/mmcv')) ])

Effet de visualisation Neptume

Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?

mlflow enregistre expérimental data

Fichier de configuration

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='MlflowLoggerHook') ])

Visualisation MLFlow

Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?

dvclive Enregistrer les données expérimentales

Fichier de configuration

log_config = dict( interval=1, hooks=[ dict(type='TextLoggerHook'), dict(type='DvcliveLoggerHook') ])

Fichier HTML généré

Dans la recherche scientifique en deep learning, comment gérer efficacement le code et les expériences ?

Ce qui précède utilise uniquement le fonctions les plus élémentaires de divers outils de gestion expérimentale , nous pouvons modifier davantage le profil pour débloquer plus de poses.

Avoir MMCV équivaut à disposer de tous les outils de gestion expérimentaux. Si vous étiez un garçon de TF auparavant, vous pouvez choisir le style nostalgique classique de TensorBoard ; si vous souhaitez enregistrer toutes les données expérimentales et l'environnement expérimental, vous pouvez aussi bien essayer Wandb (Poids et biais) ou Neptume si votre appareil ne peut pas l'être ; connecté à Internet, vous pouvez choisir mlflow pour que les données expérimentales soient enregistrées localement et il y a toujours un outil qui vous convient.

De plus, MMCV dispose également de son propre système de gestion des journaux, qui est TextLoggerHook ! Il enregistrera toutes les informations générées pendant le processus de formation, telles que l'environnement de l'appareil, l'ensemble de données, la méthode d'initialisation du modèle, la perte, les mesures et autres informations générées pendant la formation, dans le fichier xxx.log local. Vous pouvez consulter les données expérimentales précédentes sans utiliser d'outils.

Vous vous demandez toujours quel outil de gestion des expériences utiliser ? Êtes-vous toujours inquiet du coût d’apprentissage de divers outils ? Dépêchez-vous et embarquez à bord de MMCV et découvrez divers outils sans douleur avec seulement quelques lignes de fichiers de configuration.

github.com/open-mmlab/mmcv

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer