Ceci est un rappel de ce que j'ai recherché lors de la conversion des paramètres argparse de Python en hydra. Enfin, j'écris une fonction pratique qui est unique à hydra.
Lors de l'écriture d'un script d'expérience d'apprentissage automatique en python, j'ai utilisé argparse comme méthode de définition des hyper paramètres. Cependant, comme l'expérience devenait plus compliquée, il y avait un désir d'avoir un nombre considérable de lignes et de structurer les paramètres uniquement avec le fichier qui décrit les paramètres argparse. .. .. Alors, lisez la recommandation de ymym sur la gestion des hautes para-Gérons les hyper paramètres avec Hydra + MLflow- " et lisez" Ceci C'était! », J'ai donc décidé de l'utiliser. Ensuite, j'ai étudié diverses choses lors de la migration des paramètres expérimentaux écrits en argparse vers l'hydre, donc je les ai résumés.
"A framework for elegantly configuring complex applications" Il semble être "un cadre pour gérer avec élégance les paramètres d'applications complexes". Le développement est centré sur la recherche facebook.
Pour les paramètres détaillés, veuillez consulter l'article ci-dessus de ymym et Official Tutorial. La première caractéristique est que si vous souhaitez décrire structurellement les paramètres dans le fichier yaml et écraser le contenu, vous pouvez les écraser sur la ligne de commande au moment de l'exécution.
--hydra décrit les paramètres du fichier yaml et le donne comme décorateur à la fonction qui l'exécute.
argparse
# main.py
def main():
parser = parser.ArgumentParser(...)
parser.add_argument('--hoge', type=int, default=1)
cfg = parser.parse_args()
print(cfg.hoge) # 1
hydra
# config.yaml
hoge: 1
# main.py
@hydra.main(config_path='config.yaml')
def main(cfg):
print(cfg.hoge) # 1
--Spécifiez avec =
argparse
# shell
python main.py --hoge 2
hydra
# shell
python main.py hoge=1
nargs
liste
car ils sont tous décrits dans omegaconf.argparse
# main.py
parser.add_argument('--hoge', type=int, nargs=3, default=[1, 2, 3])
# shell
python main.py --hoge 4 5 6
hydra
# config.yaml
hoge:
- 1
- 2
- 3
# shell
python main.py hoge=[1,2,3]
required=True
--Spécifiez ???
pour la valeur
--Si vous ne le spécifiez pas, vous obtiendrez l'erreur ʻomegaconf.errors.MissingMandatoryValuede OmegaConf. --Cependant, cela n'est pas évalué au moment de l'exécution, mais est évalué lors de l'accès à la clé et une erreur se produit. Par conséquent, même si vous l'exécutez sans le spécifier, le code jusqu'à la ligne qui accède à la clé en le spécifiant avec
???` sera exécuté. (Veuillez me faire savoir s'il existe un moyen d'évaluer au moment de l'exécution avec les paramètres du côté hydra)
argparse
# main.py
parser.add_argument('--hoge', type=int, required=True)
hydra
# config.yaml
hoge: ???
choices
argparse
# main.py
parser.add_argument('--hoge', type=int, default=1, choices=[1, 2])
print(cfg.hoge)
# shell
python main.py --hoge 2
# 2
hydra
├── config
| ├── config.yaml
│ └── choice
│ ├── a.yaml
│ └── b.yaml
└── main.py
# config.yaml
choice: a
# choice/a.yaml
hoge: 1
# choice/b.yaml
hoge: 2
# main.py
print(cfg.hoge)
# shell
python main.py choice=b
# 2
--help
argparse
# shell
python main.py --help
hydra
# shell
python main.py --cfg job
Comme ce sera presque une introduction au didacticiel, intégrez un lien vers le didacticiel cible dans le nom de la section. Veuillez vous y référer pour plus de détails.
Multi-run Essayez d'exécuter en même temps avec plusieurs paramètres avec la configuration définie dans les choix ci-dessus.
# shell
python main.py hoge=a,b
Si vous exécutez la commande suivante une fois avant d'exécuter le script, vous pouvez utiliser la complétion par tabulation lorsque vous spécifiez des options à partir de la ligne de commande.
eval "$(python main.py -sc install=bash)"
hydra crée automatiquement un répertoire de journal structuré basé sur la date et l'heure sans aucun paramètre, et l'utilise comme répertoire de travail lors de l'exécution, ainsi que les fichiers générés à l'exécution et enregistrés. Enregistrer les fichiers, etc.
import os
@hydra.main()
def main(_cfg):
print("Working directory : {}".format(os.getcwd()))
$ python main.py
Working directory : /home/omry/dev/hydra/outputs/2019-09-25/15-16-17
$ python main.py
Working directory : /home/omry/dev/hydra/outputs/2019-09-25/15-16-19
Cependant, ne spécifiez pas le répertoire de travail sans autorisation! Je pense qu'il y a des gens qui disent ça (moi-même), alors faisons spécifiez le répertoire pour hydra vous-même.
Je viens de commencer à l'utiliser moi-même, donc si quelqu'un sait quelque chose qui ne va pas avec l'article ou une meilleure façon, j'apprécierais que vous puissiez m'apprendre. Si vous utilisez hydra, le code sera actualisé, alors essayez-le! (Surtout pour le gros code)
Enfin, si vous souhaitez en savoir plus sur son utilisation, veuillez contacter Official document et ymym's blog Veuillez vous référer au / 09 034644).
Recommended Posts