Facebook开源Hydra简化了Python程序中的配置管理
Facebook Hydra是一个新的开源框架,旨在通过简化常见功能(如命令行参数处理,配置管理和日志记录)的实现来加快Python应用程序的创建。
Facebook开发了Hydra,以加速几个研究项目的开发,在这些项目中,应对不断变化的需求的能力至关重要。
Hydra提供了一种新颖的方法来组成应用程序的配置,从而允许通过配置文件以及从命令行更改组成。这解决了在修改配置时可能出现的挑战,例如必须维护配置的许多稍微不同的副本,或者添加自定义逻辑以覆盖单个配置值。
它的主要目标之一是减少通常需要编写的样板代码来处理命令行参数,基于文件的配置,日志记录等。Hydra还提供了一种可插拔的体系结构,旨在实现将来的扩展,例如在Windows上运行代码。云提供商。
用于减少样板的机制之一是建立有关指定应用程序配置方式的约定。特别是,配置由构成层次结构的多个源组成,可以从命令行覆盖它们。例如,如果您的config.yaml配置文件包含程序的许多配置选项,则可以通过Hydra无缝使用它:
hydra.main(config_path='config.yaml')
def my_app(cfg):
    # use cfg configuration options...
如果要在特定运行中覆盖一个配置值,则可以在命令行上提供要使用的新值:
$ python my_app.py db.user=root db.pass=1234
Hydra还可以轻松处理替代的配置选项组。例如,您可能有两个配置文件,一个用于连接到MySQL数据库,另一个用于PostgreSQL数据库。在程序的每次运行中,都可以通过在命令行上指定它来选择要使用的配置文件,如下所示:
$ python my_app.py db=postgresql
$ python my_app.py db=mysql db.timeout=20
配置文件存储在单个目录中,并使用文件系统进行分层组织。Hydracfg通过传递到您的应用程序的映射镜像文件系统层次结构。这样可以将配置选项组织在独立的空间中,然后根据需要进行组合。例如,除了PostgreSQL和MySQL的配置文件之外,您还可以使用配置文件来描述您要使用的许多数据库模式,然后在启动时确定在该特定运行中使用哪种数据库/模式组合:
$ python my_app.py db=postgresql schema=school
$ python my_app.py db=mysql schema=home
方便地,Hydra使用shell选项卡补全来指导您完成可在命令行上使用的配置和子配置,因此您无需记住所有允许的组合。作为一项额外的奖励,Hydra将为程序的每次运行创建一个输出目录,并在其中复制该运行的活动配置以及任何输出文件。当您要运行多个实验并跟踪结果以便最终进行比较时,这是理想的选择。
最后但并非最不重要的一点是,Hydra包括旨在降低安装成本的日志记录功能,这些功能与Hydra配置管理完全集成。
import logging
# A logger for this file
log = logging.getLogger(__name__)
@hydra.main()
def my_app(_cfg):
    log.info("Info level message")
    log.debug("Debug level message")
实际上,您可以设置要显示的日志级别,也可以从命令行或通过配置文件在文件级别打开和关闭日志记录。
$ python my_app.py hydra.verbose=[__main__
如前所述,Facebook计划利用其可插拔架构来扩展Hydra功能。它可以在GitHub在MIT许可下。

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!