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

news2024/12/28 19:36:00

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.method
    print('flag:',flag)
    print('all config:',cfg)

得到的结果如下

flag: clipfont

all 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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM学习之自然语言处理简单叙述

自然语言处理基础 自然语言处理:让计算机读懂人所写好的这些文本,能够像人一样进行交互。 自然语言处理的任务和应用 任务: 词性标注 part of speech tagging 动词,名词,形容词? 命名实体的识别 name…

深度学习与神经网络入门

前言 人工智能(AI)与机器学习(ML)与深度学习(DL)的关系: DL包含于ML,ML包含于AI。 即深度学习是机器学习一部分,机器学习又是人工智能的一个分支。 那么深度学习到底有…

用Python自动化操作PPT,看完这篇文章就够了!

1.PPT自动化能干什么?有什么优势? 它可以代替你自动制作PPT它可以减少你调整用于调整PPT格式的时间它可以让数据报告风格一致总之就是:它能提高你的工作效率!让你有更多时间去做其他事情! 2.使用win32com操作ppt 官…

GDC 笔记

1 Title Diffusion Improves Graph Learning(Johannes Gasteiger, Stefan Weienberger, Stephan Gnnemann)【NeurIPS 2019】 2 Conclusion This study removes the restriction of using only the direct neighbors by introducing a powerful, yet spa…

【软件测试】Selenium实战技巧-多页面和Windows控件处理

01 多页面处理 做UI自动化的时候常常会遇到浏览器弹出新的Tab页,或者需要在多个网页服务之间来回取数据的情况。 比如在首页点击文章“Jmeter使用?”的链接,浏览器会弹出一个新的页面显示“Jmeter使用?”这篇文章的详情。此时如…

PySide6应用实践 | 在PyCharm配置和使用PySide6 QtDesinger

PySide6应用实践 | 在PyCharm配置和使用PySide6 QtDesinger 一、前言二、在PyCharm External Tools中配置PySide61.PyCharm External Tools的用途2.在Pycharm External Tools中配置PySide6 QtDesinger3.在Pycharm中使用PySide6 QtDesinger 一、前言 程序员缓解工作压力的小窍门…

JS -关于对象相关介绍

在JS中,除去基本的数据类型,还有包含对象这种复合数据类型,他可以储存多个键值对,并且每个键都是唯一的,并且在对象中可以包含各种数据类型的值,包括其他对象,数组,函数等。对象是Ja…

Android studio添加aidl文件时,添加按钮为黑色不可点击添加解决办法

在android studio添加aidl文件时出现下面这个情况只需要在模块的build.gradle.kts文件中的android中添加以下代码即可添加aidl android {// 设置 AIDL 支持buildFeatures {aidl true} }

pyenv-win管理windows上多个版本python

pyenv是一款管理多个python版本的工具,可以便捷的切换使用的python版本,但是不支持windows环境,在windows环境需要使用pyenv-win pyenv-win安装 官方介绍的安装方式比较多,在此主要记录一下我习惯的安装方式 下载pyenv-win,可以…

虚良SEO怎么有效的对百度蜘蛛权重优化?

人们交换链接通常首先要问的是你BR值是多少?国内搜索引擎来说以百度马首是瞻,无论seo还是竞价都看重的是百度,那么针对百度权重的优化就特别重要了。其实,百度权重是民间的一种说法,百度官方并没有认同这个数值&#x…

DenseDiffusion:Dense Text-to-Image Generation with Attention Modulation

1 研究目的 该文献的研究目的主要是: 探讨一种更为广泛的调制方法,通过设计多个正则化项来优化图像合成过程中的空间控制。论文的大致思想是,在现有的基于数据驱动的图像合成系统基础上,通过引入更复杂的调制策略,实现…

操作系统——进程

进程定义 是计算机中已经运行的程序是系统进行资源分配和调度的一个独立单位。 进程的特性 独立性:进程在内存中可以独立寻址,每个进程都有一个独立的堆栈空间。动态性:进程在执行过程中可以申请资源、使用资源、释放资源。并发性&#xf…

埃夫特机器人更换编码器电池

一、编码器电池位置 埃夫特机器人编码器电池位置,在机器人基座底部位置,将编码器电池包拆卸下来,并按线标将新的编码器电池连接上去。 二、消除各轴编码器报警 点开监控选项中的驱动器页面,输入密码1975,开打权限管理…

将CSV转换为LDIF以便导入到ldap中?

将CSV转换为LDIF以便导入到ldap中? 目标格式: dn: uidzhangsan,ouusers,dcbaimeidashu,dccom objectClass: posixAccount objectClass: top objectClass: inetOrgPerson gidNumber: 0 givenName: zhangsan sn: 1 displayName:张三 uid: zhangsan homeDi…

node.js-包

包的概念 包:将模块,代码,其他资料聚合成的一个文件夹 包分类: 1.项目包:主要用于编写项目和业务逻辑的文件夹 2.软件包:封装工具和方法供开发者使用(一般使用npm管理) 1&#…

迅雷下载不了的资源怎么下载?

我想下载Boost库,但是下载不下来 用迅雷下载是一直卡在0k 后来尝试在centos上用wget进行下载,竟然可以 wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.gz

HCIP(路由过滤)--7

实验要求: 实现过程: (一)配置IP地址与环回地址: AR1: [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 100.1.1.1 24 Apr 22 2024 19:24:50-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on …

C++核心编程——4.3 C++对象模型和this指针

4.3.1 成员变量和成员函数分开存储 在C中,类内的成员变量和成员函数分开存储(虽然封装在一起,但是分开存储) 只有非静态成员变量才属于类的对象上,静态成员(包括静态成员变量和静态成员函数)和非…

绿联 安装qbittorrent及一些常见错误的解决办法

绿联 安装qbittorrent及一些常见错误的解决办法 1、镜像 linuxserver/qbittorrent:latest 2、安装 2.1、创建容器 按需决定是否进行资源限制。 2.2、基础设置 2.3、网络 桥接即可。 注:如果使用IPV6,请选择"host"模式。 注:如…

C# 使用 ThoughtWorks.QRCode 生成二维码

目录 关于 ThoughtWorks.QRCode 开发运行环境 方法设计 代码实现 调用示例 Logo图标透明化 小结 关于 ThoughtWorks.QRCode 二维码是用某种特定的几何图形按一定规律在平面分布的、黑白相间的、记录数据符号信息的图形,在应用程序开发中也被广泛使用&#x…