如何获取Hydra生成的运行日期和时间?



我在Python项目中使用hydra。我的yaml配置文件包含以下几行:

now_dir: ${now:%Y-%m-%d}/${now:%H-%M-%S}
hydra:
run:
dir: ./hydra_outputs/${now_dir}

在我的代码中,我想获得hydra用于创建其输出文件夹结构的日期和时间。如果hydra有一个内置函数,可以返回包含${now:%Y-%m-%d}/${now:%H-%M-%S}生成的日期的strDatetime对象,那将是完美的。

如果没有,我仍然可以解析hydra设置的当前路径(我可以使用os.getcwd())或使用hydra从上面的yaml创建的Dictconfig中的信息,但这将不太方便。

如果只使用一个普通的html锚呢?

now_dir: &nowdir ${now:%Y-%m-%d}/${now:%H-%M-%S}

您将能够在后面的.yaml文件中使用值*nowdir

所以我发现最好的方法是从hydra用regex创建的路径中获取日期:

>>> import re
>>> from datetime import datetime
>>> path
'hydra_outputs/2021-07-09/16-25-37/.hydra'
>>> match = re.search(r'd{4}-d{2}-d{2}/d{2}-d{2}-d{2}', path)
>>> datetime.strptime(match.group(), '%Y-%m-%d/%H-%M-%S')
datetime.datetime(2021, 7, 9, 16, 25, 37)

我把这个问题留着,以防有人有更好的解决办法。

请参阅Hydra配置文档

从Hydra 1.1版本开始,您的选项包括:

1)在你的配置中,使用hydra解析器:
output_dir: ${hydra:run.dir}

注意上面yaml代码中括号内的冒号:这是对名为" hydr& quot;的自定义解析器的调用。

在您的python代码中,您可以通过主函数配置中的output_dir键访问此值:

@hydra.main()
def my_app(cfg: DictConfig) -> None:
print(cfg.output_dir)
在你的代码中,使用HydraConfig单例:
from hydra.core.hydra_config import HydraConfig
@hydra.main()
def my_app(cfg: DictConfig) -> None:
print(HydraConfig.get().run.dir)

为了得到一致的结果,确保你对HydraConfig单例的访问发生在你的@hydra.main装饰函数的范围内。

相关内容

  • 没有找到相关文章

最新更新