实验配置流水线Hydra基本教程本文主要介绍配置管理工具Hydrapython平台一大yaml配置读取工具训练脚本的常客。经常和OmegaConf同时出现都是用来管理yaml配置文件的优秀工具。其中前者更适合实验流水线后者可以提供自由配置接口但是不方便命令行修改配置。主要介绍基本使用命令行参数修改以及版本特性。Hydra documents 这里是官方的文档可以参考。我将基于官方文档给出最基本的使用方法和例子。主要特性层级的配置可以以嵌套的形式多文件合并。类似MMLab系列的配置字典配置字段可以被覆盖或者添加只要通过命令行简单操作就行了多配置扫描的时候非常方便使用简单的命令即可主函数装饰importhydrafromomegaconfimportOmegaConf,DictConfighydra.main(version_baseNone,config_pathconf,config_nameconfig)deffunction(cfg:DictConfig):print(Omegaconf.to_yaml(cfg))首先介绍一下装饰器方便理解。装饰器其实是语法糖其实际利用的是python万物皆对象的特性将包装过的函数赋值给原函数名。具体演示如下hydra.main(...)deffunc():pass# equals todeffunc():passfunchydra.main(func)至于装饰器能包什么或者什么能作为装饰器那当然是万物都可以。类的实例类函数都可以用作构造装饰器。既然知道了装饰器是什么作用那么这段代码就很好理解了。hydra.main()主要接收我们本来的主函数提前截取了命令行传入的argc, argv进行处理随后把一个配置文件实例输入主函数体运行。如此即可实现配置的命令行修改和传入主函数。这种配置传入需要您的主函数参数带一个cfg。为了更好地让IDE补全最好来个类型提示。不过AI时代这还有用吗多配置文件融合下面借助官方的一个例子我大概是翻译了一下顺带讲解一下。文件目录如下├── conf │ ├── config.yaml │ ├── db │ │ ├── mysql.yaml │ │ └── postgresql.yaml │ └── __init__.py └── my_app.py# configs.yamldefaults:db:mysqldefault是一个特殊的保留字段在主配置文件里面可以告诉 Hydra 去使用配置文件来融合一个大的配置字典。mysql所有的配置字段都会出现在db字段下面。你可以很方便通过命令行来配置配置字段# can add new configurations.# while other configs with only change current configurations.python your_script.py dbpostgresql db.timeout20node.timeout30其中通过对已有字段进行赋值来修改通过来增加字段。多参数运行python your_script.py--multirun dbmysql,postgresql python train.py--multirun lr1,0.1,0.01,0.001API 参考hydra.main()version_base这个字段指定了Hydra的版本问题保证了版本稳定性问题。具体可以参照 version base , search path changes. 要是不知道就写1.2其实就可以。config_path使用这个字段来配置config的位置。这个是相对路径相对当前调用函数的脚本的路径。搜索路径问题Hydra在集合配置的时候是一种脚本搜索。其实是在配置hydra.searchpath这个字段。这个字段只有在首要配置文件也就是你在主函数里面调用的那个配置里面配置才行。在别的配置里面修改会报错。使用file://和pkg://来指定额外的搜索路径。实则在调用hydra.main的时候有一个config_path字段指定了最初的搜索文件夹。defaults:-dataset:cifar10hydra:searchpath:-pkg://additional_conf-file:///home/atman/workspace/etc_config
实验配置流水线:Hydra基本教程
实验配置流水线Hydra基本教程本文主要介绍配置管理工具Hydrapython平台一大yaml配置读取工具训练脚本的常客。经常和OmegaConf同时出现都是用来管理yaml配置文件的优秀工具。其中前者更适合实验流水线后者可以提供自由配置接口但是不方便命令行修改配置。主要介绍基本使用命令行参数修改以及版本特性。Hydra documents 这里是官方的文档可以参考。我将基于官方文档给出最基本的使用方法和例子。主要特性层级的配置可以以嵌套的形式多文件合并。类似MMLab系列的配置字典配置字段可以被覆盖或者添加只要通过命令行简单操作就行了多配置扫描的时候非常方便使用简单的命令即可主函数装饰importhydrafromomegaconfimportOmegaConf,DictConfighydra.main(version_baseNone,config_pathconf,config_nameconfig)deffunction(cfg:DictConfig):print(Omegaconf.to_yaml(cfg))首先介绍一下装饰器方便理解。装饰器其实是语法糖其实际利用的是python万物皆对象的特性将包装过的函数赋值给原函数名。具体演示如下hydra.main(...)deffunc():pass# equals todeffunc():passfunchydra.main(func)至于装饰器能包什么或者什么能作为装饰器那当然是万物都可以。类的实例类函数都可以用作构造装饰器。既然知道了装饰器是什么作用那么这段代码就很好理解了。hydra.main()主要接收我们本来的主函数提前截取了命令行传入的argc, argv进行处理随后把一个配置文件实例输入主函数体运行。如此即可实现配置的命令行修改和传入主函数。这种配置传入需要您的主函数参数带一个cfg。为了更好地让IDE补全最好来个类型提示。不过AI时代这还有用吗多配置文件融合下面借助官方的一个例子我大概是翻译了一下顺带讲解一下。文件目录如下├── conf │ ├── config.yaml │ ├── db │ │ ├── mysql.yaml │ │ └── postgresql.yaml │ └── __init__.py └── my_app.py# configs.yamldefaults:db:mysqldefault是一个特殊的保留字段在主配置文件里面可以告诉 Hydra 去使用配置文件来融合一个大的配置字典。mysql所有的配置字段都会出现在db字段下面。你可以很方便通过命令行来配置配置字段# can add new configurations.# while other configs with only change current configurations.python your_script.py dbpostgresql db.timeout20node.timeout30其中通过对已有字段进行赋值来修改通过来增加字段。多参数运行python your_script.py--multirun dbmysql,postgresql python train.py--multirun lr1,0.1,0.01,0.001API 参考hydra.main()version_base这个字段指定了Hydra的版本问题保证了版本稳定性问题。具体可以参照 version base , search path changes. 要是不知道就写1.2其实就可以。config_path使用这个字段来配置config的位置。这个是相对路径相对当前调用函数的脚本的路径。搜索路径问题Hydra在集合配置的时候是一种脚本搜索。其实是在配置hydra.searchpath这个字段。这个字段只有在首要配置文件也就是你在主函数里面调用的那个配置里面配置才行。在别的配置里面修改会报错。使用file://和pkg://来指定额外的搜索路径。实则在调用hydra.main的时候有一个config_path字段指定了最初的搜索文件夹。defaults:-dataset:cifar10hydra:searchpath:-pkg://additional_conf-file:///home/atman/workspace/etc_config