【看不懂命令行、.yaml?】Hydra 库极速入门

2024-04-22 21:04

本文主要是介绍【看不懂命令行、.yaml?】Hydra 库极速入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hydra 是一个开源的 Python 框架,可以简化研究和其他复杂应用程序的开发。其核心功能是通过组合动态创建层次化的配置,并可以通过配置文件和命令行进行覆盖。Hydra 的名字来源于它能够运行多个类似的作业 - 就像一个多头的水怪一样。

主要特性:

  1. 从多个不同来源的可组合层次化配置
  2. 可以通过命令行指定或覆盖配置
  3. 动态命令行 tab 补全
  4. 在本地运行应用程序或启动它进行远程运行
  5. 使用单个命令运行具有不同参数的多个 jobs

以开源项目 https://github.com/ximinng/PyTorch-SVGRender 为例,在 svg_render.py 中的以下这段代码是 hydra 库的具体应用

@hydra.main(version_base=None, config_path="conf", config_name='config')
def main(cfg: omegaconf.DictConfig):"""The project configuration is stored in './conf/config.yaml’And method configurations are stored in './conf/x/’"""# print(omegaconf.OmegaConf.to_yaml(cfg))flag = cfg.x.method

Hydra 提供了装饰器 @hydra.main 来修饰 main 函数,其具体含义如下:

  1. @hydra.main:这是一个 Hydra 提供的装饰器,用于标识一个函数是 Hydra 应用程序的主函数。通过使用这个装饰器,Hydra 可以识别并执行标记的函数作为程序的入口点。
  2. (version_base=None, config_path=“conf”, config_name=‘config’):这是 @hydra.main 装饰器的参数列表,用于配置 Hydra 应用程序的行为。
  3. version_base=None:这个参数用于指定 Hydra 应用程序的版本基础路径。如果设置为 None,则表示不使用版本控制。如果设置了一个路径,则 Hydra 将根据该路径来管理应用程序的版本。
  4. config_path=“conf”:这个参数用于指定 Hydra 应用程序配置文件的搜索路径。在这个例子中,配置文件会在 conf 目录下进行搜索。
  5. config_name=‘config’:这个参数用于指定 Hydra 应用程序配置文件的名称。在这个例子中,配置文件的名称为 config.yaml。

cfg.x.method 即对应各个 .yaml 中的 method。
在这里插入图片描述
命令行 bashpython svg_render.py x=clipfont prompt='Starry Night by Vincent van gogh' target='./data/alphabet1.svg'

@hydra.main(version_base=None, config_path="conf", config_name='config')
def main(cfg: omegaconf.DictConfig):"""The project configuration is stored in './conf/config.yaml’And method configurations are stored in './conf/x/’"""# print(omegaconf.OmegaConf.to_yaml(cfg))flag = cfg.x.methodprint('flag:',flag)print('all config:',cfg)

得到的结果如下

flag: clipfontall config: {'target': './data/alphabet1.svg', 'prompt': 'Starry Night by Vincent van gogh', 'neg_prompt': None, 'state': {'cpu': False, 'mprec': 'no'}, 'diffuser': {'download': False, 'force_download': False, 'resume_download': False}, 'diffvg': {'print_timing': False}, 'seed': 951222, 'multirun': False, 'srange': None, 'result_path': './workspace', 'save_step': 10, 'eval_step': 10, 'mv': False, 'framefreq': 5, 'framerate': 24, 'x': {'method': 'clipfont', 'lr_base': {'point': 0.1, 'color': 0.01}, 'lr_decay_rate': 0.1, 'decay_steps': [1000, 1500], 'lr_schedule': False, 'num_iter': 200, 'batch_size': 1, 'font': {'reinit': False, 'reinit_color': 'randn'}, 'clip': {'model_name': 'ViT-B/32'}, 'thresh': 0.0, 'num_crops': 128, 'crop_size': 230, 'lam_patch': 150, 'lam_dir': 30, 'lam_lpips': 0, 'lam_l2': 0}}

看出 all config 里其实就是命令行 bash加 config.yaml 加 clipfont.yaml 这三者的组合,非常具有层次性,使得代码的复用性很高、且结构清晰。
在这里插入图片描述

以上就是 Hydra 的大概用处,想要了解更多,可查阅下方参考资料:
[1] Hydra 官方文档:https://hydra.cc/docs/intro/
[2] Hydra GitHub 仓库:https://github.com/facebookresearch/hydra
[3] https://blog.csdn.net/a486259/article/details/125897007
[4] https://www.kingname.info/2022/04/22/hydra/

这篇关于【看不懂命令行、.yaml?】Hydra 库极速入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/926853

相关文章

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决