【ModelArts】多yaml文件的模型的云上适配小技巧

前言

  yaml文件是一种常用的配置文件,经常用于配置模型的参数。而当一个文件有多个数据集时,为了适应不同的数据集,我们会对模型设置不同的超参,因此可能会有多个yaml文件。在线下机进行使用的时候,我们其实很好找到yaml文件所路径,从而很好根据所需条件来设置当前模型使用的是哪个yaml文件,但当我们使用华为云ModelArts进行线上训练或者预测时,由于不能直接读取obs桶里的文件,需要读取拷贝过来的文件。而我们在进行线上模型的训练时,使用了华为官方mindspore/modesl仓库里offical文件夹下的config.py+yaml文件进行模型的配置时的就遇到了找不到yaml文件的问题。我们尝试了设置cogfig_path为yaml文件所在的绝对路径以及相对路径,发现都不行,我们又上models仓库里查看了里面多yaml文件的模型的云上适配的设置,发现都讲的不明确,所以在通过一点小技巧解决了这个问题后,决定写一篇文章来和大家分享。


一yaml文件的作用

  YAML 是专门用来写配置文件的语言,非常简洁和强大, 而且可读性很高。使用yaml文件,可以很方便我们配置模型以及文件的参数。

二、官方的config.py文件

  华为官方有在mindspore/models仓库下提供开源的cofig.py文件用来读取并处理yaml文件中的配置信息。

这里以models中的lenet里的config.py文件为例

def get_config():
    """
    Get Config according to the yaml file and cli arguments.
    """
    parser = argparse.ArgumentParser(description="default name", add_help=False)
    current_dir = os.path.dirname(os.path.abspath(__file__))
    parser.add_argument("--config_path", type=str, default=os.path.join(current_dir, "../../default_config.yaml"),
                        help="Config file path")
    path_args, _ = parser.parse_known_args()
    default, helper, choices = parse_yaml(path_args.config_path)
    args = parse_cli_to_yaml(parser=parser, cfg=default, helper=helper, choices=choices, cfg_path=path_args.config_path)
    final_config = merge(args, default)
    pprint(final_config)
    print("Please check the above information for the configurations", flush=True)
    return Config(final_config)

config = get_config()

  这里我们可以看到代码找到yaml文件,可以直接通过把默认的yaml文件设置为default_config.yaml并放在config.py文件所处的文件夹两层之外,或者使用其绝对路径或相对路径。但这在线下机使用的时候是可以正常找到的,放到云上反而无法找到了。我们在网上设置了config_path为需要的yaml文件的相对路径,发现无法找到,而我们对拷贝过去的yaml文件所处的绝对路径也不是很清楚,我们通过打印当前文件所在路径发现云上拷贝过去的yaml文件位于/cache/user-job-dir,虽然这个很奇怪,但是我们还是尝试在网页上设置config_path为/cache/user-job-dir+yaml文件名,显然最后还是找不到yaml文件。

二、我们修改的config.py文件

  我们发现使用官方的config.py文件在云上是可以很好的读取默认的yaml文件的,所以如果使用官方的config.py文件,在我们只有一个yaml文件的情况下还是很好用的,但由于我们搭建的模型有多个数据集,并且对于不同的数据集模型的超参等还是有很大的不同,所以我们需要配置多个yaml文件。
  与此同时,鉴于官方的config.py文件在线上训练的时候还是可以很好的找到默认的yaml文件的,也就是说os.path.join(current_dir, “…/…/default_config.yaml”)这个方法所拼接出来的路径在云上也是能很好的找到的,所以我们对config.py文件进行了一点小修改,把config_path这个参数设置为yaml文件相对config.py的绝对路径,在寻找yaml文件时,找yaml文件的路径为os.path.join(current_dir, path_args.config_path),具体代码如下:

def get_config():
    """
    Get Config according to the yaml file and cli arguments.
    """
    parser = argparse.ArgumentParser(description="default name", add_help=False)
    current_dir = os.path.dirname(os.path.abspath(__file__))
    
    parser.add_argument("--config_path", type=str, default="../../default_config.yaml",
                        help="Config file path")
    path_args, _ = parser.parse_known_args()
    config_path = os.path.join(current_dir, path_args.config_path)
    default, helper, choices = parse_yaml(config_path)
    args = parse_cli_to_yaml(parser=parser, cfg=default, helper=helper, choices=choices, cfg_path=config_path)
    final_config = merge(args, default)
    return Config(final_config)

config = get_config()

所以这样我们在线上适配的时候只要简单的把config_path设置为yaml文件相对的config.py文件的相对路径即可。


总结

  以上就是今天要分享的内容,本文仅仅简单介绍了一个多yaml文件的模型在云上适配的时候便于找到yaml文件的小技巧,谢谢大家的观看。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值