Hydra 是一个开源的 Python 框架,简化了研究和其他复杂应用的开发。其关键特性是能够通过组合动态地创建一个分层次的配置,并通过配置文件和命令行进行覆盖。Hydra 的名称来源于其能够运行多个类似的作业 - 就像一个有多个头的九头蛇一样。
主要特性:
- 可以从多个源组合的分层次配置
- 可以通过命令行指定或覆盖配置
- 动态命令行选项补全
- 在本地运行应用程序或启动它以远程运行
- 通过单个命令运行具有不同参数的多个作业
Multirun
参数介绍:
有时候想要一行 bash (命令行)运行多次不同参数的实验。就需要用到参数扫描,参数扫描是一种使用预先确定的一组参数来评估一个函数(或程序)的方法。下面的例子将会解释。
要运行参数扫描,使用 --multirun (-m) 标志,并为每个你想要扫描的维度传递一个逗号分隔的列表。
$ python my_app.py -m schema=warehouse,support,school
上面这句就是对数据库类型(mysql、postgresql)和 schema 模式(warehouse、support、school)进行扫描。输出不包含配置信息的打印。
$ python my_app.py schema=warehouse,support,school db=mysql,postgresql -m
[2019-10-01 14:44:16,254] - Launching 6 jobs locally
[2019-10-01 14:44:16,254] - Sweep output dir : multirun/2019-10-01/14-44-16
[2019-10-01 14:44:16,254] - #0 : schema=warehouse db=mysql
[2019-10-01 14:44:16,321] - #1 : schema=warehouse db=postgresql
[2019-10-01 14:44:16,390] - #2 : schema=support db=mysql
[2019-10-01 14:44:16,458] - #3 : schema=support db=postgresql
[2019-10-01 14:44:16,527] - #4 : schema=school db=mysql
[2019-10-01 14:44:16,602] - #5 : schema=school db=postgresql
此外,在使用 multi-run 的过程中可能遇到以下报错:
hydra.errors.OverrideParseException: mismatched input '<EOF>' expecting {':', BRACKET_OPEN, BRACE_OPEN, FLOAT, INT, BOOL, NULL, UNQUOTED_CHAR, ID, ESC, WS, QUOTED_VALUE, INTERPOLATION}
See https://hydra.cc/docs/1.2/advanced/override_grammar/basic for details
很有可能是不同模式间的 ‘,’ 前后有空格,千万注意之间不能有空格。
参考官方文档:
https://hydra.cc/docs/1.0/tutorials/basic/running_your_app/multi-run/#internaldocs-banner