gpt4 book ai didi

python - 如何从脚本中覆盖 hydra 工作目录?

转载 作者:行者123 更新时间:2023-12-04 08:39:28 24 4
gpt4 key购买 nike

我知道我可以通过设置 hydra.run.dir=XXX 来更改配置中的工作目录从命令行。
但是如何在不使用 CLI 参数的情况下从脚本中正确执行此操作,甚至将日志保存在我设置的目录中?
此代码不起作用,因为:

  • 当我尝试更改目录和
  • 时,Hydra 及其记录器已经初始化。
  • 没有这样的属性 cfg.hydra .

  • UPD : 我在评论中得到了一个指针。我可以更改区块中的九头蛇参数 if __name__ == 'main':在调用 hydra 之前。但是如何获得访问和修改 hydra.run.dir从剧本?
        @hydra.main(config_path="conf", config_name="config")
    def main(cfg):
    cfg.hydra.run.dir = "./c_out/cached_loss" # no such attribute
    logger.info('I log something')
    我的 hydra 配置如下所示:
    defaults:                     
    - hydra/job_logging: custom_logging
    # hydra/custom_logging.yaml
    # python logging configuration for tasks
    version: 1
    formatters:
    simple:
    format: '[%(asctime)s][%(name)s][%(levelname)s] - %(message)s'
    handlers:
    console:
    class: logging.StreamHandler
    formatter: simple
    stream: ext://sys.stdout
    file:
    class: logging.FileHandler
    formatter: simple
    # relative to the job log directory
    filename: ${hydra.job.name}.log
    root:
    level: INFO
    handlers: [console, file]

    disable_existing_loggers: false

    最佳答案

    这可以通过 omegaconf interpolation 实现
    例如,当我创建以 uuid 命名的目录时的用例
    首先,我们使用我们需要的函数而不是 lambda 注册解析器

    from omegaconf import OmegaConf

    OmegaConf.register_resolver("uuid", lambda : "fdjsfas-3213-kjfdsf")

    在 hydra 配置中
    hydra:
    run:
    dir: ./outputs/training/${uuid:}

    这仍然不是真正从脚本访问,但它允许 python 代码生成配置变量。我真的不认为有一种正常的方法可以在初始化后更改 hydra 配置。
    附言我使用结构化配置并不得不更改代码,因此它可能无法实际工作,但我希望您明白

    关于python - 如何从脚本中覆盖 hydra 工作目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64633342/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com