文档首页 > > AI工程师用户指南> 训练管理> 自动化搜索作业> yaml配置文件说明

yaml配置文件说明

分享
更新时间:2020/07/14 GMT+08:00

ModelArts将AutoSearch框架运行所需的所有参数配置统一放在yaml文件中,是框架运行的必须项。一个合理配置的yaml文件,是成功完成搜索任务的前提。

yaml文件配置样例

如下示例仅用于帮助理解下方的yaml文件说明,更多示例可参见示例:使用更优秀的网络结构替换原生ResNet50示例:使用经典超参算法搜索超参示例:使用MBNAS算法搜索网络结构示例:使用预置的数据增强策略进行自动数据增强示例:使用多元搜索

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
general:
  gpu_per_instance: 1

search_space:
  - type: discrete
    params:
      - name: resnet50
        values: ["1-11111111-2111121111-211111", "1-1112-1111111111121-11111112111", "1-11111121-12-11111211", "11-111112-112-11111211", "1-1-111111112-11212", "1-1-1-2112112", "1-111211-1111112-21111111", "1-1111111111-21112112-11111","1-111111111112-121111111121-11","11-211-121-11111121", "111-2111-211111-211"]

search_algorithm:
  type: grid_search
  reward_attr: mean_accuracy

scheduler:
  type: FIFOScheduler

yaml配置文件概览

从上述样例中可以看出,yaml配置分为4个部分:

  • 通用配置
  • 搜索空间配置
  • 搜索算法配置
  • 调度器配置(可选)

通用配置主要是配置单次训练的需要的资源信息,调度器配置一般可以不涉及,搜索空间、搜索算法配置是主要需要配置的内容。

自动化搜索作业简介中介绍的四种使用场景,对于NAS、超参和自动数据增强这三种场景,在使用上的区别主要就是搜索空间与搜索算法不同。 定义一个搜索超参的搜索空间,再选择一个适合超参的算法,就可以做一次超参搜索。同样,定义一个搜索网络结构的搜索空间,再选择一个适合网络结构搜索的算法,就可以做一个NAS搜索。而对于多元搜索,就是在一次任务中提交多个配置文件,系统则会依次根据yaml文件来完成多元搜索。

通用配置

通用配置是分布式框架运行时资源消耗相关的一些配置项,可配置项如表1所示。

表1 通用配置的配置项说明

字段

说明

cpu_per_instance

一个worker所需要占用的CPU数量。

gpu_per_instance

一个worker所需要占用的GPU数量。

npu_per_instance

一个worker所需要占用的NPU数量。

instance_per_trial

一次trial的worker数量。默认为“1”,由于目前暂时未开放多节点支持,因此目前只能设置为“1”

通用配置的示例:

如果原来的训练脚本消耗的资源为单机双卡,那么就应该按如下方式来配置。

使用这个配置时,如果使用单机8卡的节点来执行自动化搜索作业,那么,并行执行的trial数量超过4个(8/2=4)时,超过部分的trial就会在自动化搜索作业内部排队等待执行。

1
2
general:
    gpu_per_instance: 2

搜索空间配置

搜索空间通常包含多个变量,每个变量有各自的类型(离散型、连续性)和取值范围。yaml是按这种方式来抽象的,配置示例如下所示。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
search_space:
  - params:
    - type: discrete_param
      name: filter_size
      values: [3, 5, 7]
    - type: discrete_param
      name: activation
      values: [relu, sigmoid]
    - type: continuous_param
      name: blocks
      start: 2
      stop: 4
      num: 3
    - type: continuous_param
      name: learning_rate
      start: -1
      stop: -5
      num: 5
      base: 10

ModelArts提供了最基本的两种变量。

  • 离散型(discrete_param):离散型非常简单,指定名字和取值即可,如上面的“filter_size”“activation”,所以这里不多赘述。
  • 连续型(continuous_param):连续性的变量需要指定取值范围,从“start”“stop”

另外,由于有些算法只支持离散型的变量,所以,在这种情况下,如果输入了连续型的变量,需要自动地将他分割成离散的点。这时就需要用户告知系统如何切这些点。ModelArts提供了两种方式,分别对应于numpy的linspacelogspace,如果用户熟悉numpy的这两个API,将非常容易上手。

  • 如果没有指定“base”,就是线性切分,相当于“np.linspace”。如示例中的“blocks”,就是说从2至4的区间,取三个值,也就是“2,3,4”
  • 如果指定了“base”,就是按对数来取值,相当于“np.logspace”,也就是从“base ** start”“base ** end”,取“num”个值。如示例中的“learning_rate”,就是表示从10的负一次方到10的负五次方,这5个值。

搜索空间配置(简化写法)

为了方便配置,ModelArts也提供了三种额外的搜索空间类型。

  • 离散型搜索空间,即里面的所有参数都是离散型,配置了搜索空间为离散型搜索空间后,则其下所有参数都不需要再配置参数类型。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    - type: discrete
      params:
        - name : resnet50
          values: ["1-11111111-2111121111-211111",
                "1-1112-1111111111121-11111112111",
                "1-11111121-12-11111211",
                "11-111112-112-11111211",
                "1-1-111111112-11212",
                "1-1-1-2112112",
                "1-111211-1111112-21111111",
                "1-1111111111-21112112-11111",
                "1-111111111112-121111111121-11",
                "11-211-121-11111121",
                "111-2111-211111-211"]
    
  • 连续型搜索空间,即里面的所有参数都是连续型,配置了搜索空间为连续型搜索空间后,则其下所有参数都不需要再配置参数类型。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    - type: continuous
      params:
        - name: learning_rate
          start: 0.01
          stop: 0.1
    
        - name: weight_decay
          start: 0.9
          stop: 1.0
    
  • 重复型离散空间,该搜索空间是为了处理在NAS搜索中经常遇到的同一个参数在不同位置取值范围不同而抽象出的。

    重复型离散空间“type”“repeat_discrete”,拥有一个独有属性为“repeat”,表示该搜索空间里的会被重复几次(针对block-like的结构)。

    其参数都是离散型的,但额外拥有一个属性“values_each_block”,代表该参数在每个block里的取值范围。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    search_space:
      - type: repeat_discrete
        name: mbnas
        repeat: 8
        params:
          - name: block_repeat
            values: [0, 1, 2, 3, 4]
            values_each_block: [
              [1, 2, 3, 4],
              [0, 1, 2, 3, 4],
              [1, 2, 3, 4],
              [0, 1, 2, 3, 4],
              [1, 2, 3, 4],
              [0, 1, 2, 3, 4],
              [1, 2, 3, 4],
              [0, 1, 2, 3, 4],
            ]
          - name: neck_filter_ratio
            values: [1, 1, 2]
          - name: kernel_size
            values: [3, 5, 7]
          - name: filter_ratio
            values: [0.5, 0.75, 1, 1.25, 1.5]
    

搜索算法配置

在定义了搜索空间以后,如何使用这些变量,就是搜索算法做的事情。

算法配置的标示为“search_algorithm”,必须配置的有两个字段,如表2所示。除了必须配置的字段外,不同的搜索算法,可以配置不同的值,可查看具体的算法文档或者算法的代码,如表3所示。

表2 必须配置的字段

字段

说明

type

用来确定算法的类型。

reward_attr

AutoSearch中所有的算法,都将最大化“reward_attr”的值作为目标。此字段支持数学表达式,如果需要最小化指标,在这里传入负值即可,如“-loss”。这是一个非常有用的功能,可以通过数学表达式,轻松地实现多目标搜索,比如平衡模型的精度和速度。

表3 支持的算法

算法

适用场景

reward_attr是否支持表达式

参考示例

详细参数

random_search

超参、NAS

使用经典超参算法搜索超参

请参见表4

grid_search

超参、NAS、数据增强

tpe_search

超参

使用经典超参算法搜索超参

请参见表5

anneal_search

超参

使用经典超参算法搜索超参

bayes_opt_search

超参

使用经典超参算法搜索超参

mbnas

NAS

使用MBNAS算法

请参见表6

表4 random_search算法参数

参数名称

说明

repeat

总共尝试的trial数。

表5 tpe_search,anneal_search,bayes_opt_search算法参数

参数名称

说明

max_concurrent

同时执行的trial个数。

num_samples

总共尝试的trial数。

mode

希望反馈的reward_attr更大还是更小,可配置为max或min。

表6 mbnas算法参数

参数名称

说明

num_of_arcs

最终返回的结构个数。

调度器配置

一个搜索算法,会根据搜索空间,提出不同的尝试(Trial)。而提出很多Trial以后,由于可用的资源有限,有些Trial只能排队执行。ModelArts提供的调度器,调度的就是这些Trial,调度器有权利决定哪些Trial优先进行,甚至可以提前终止一个正在运行中的Trial。

AutoSearch目前支持先入先出的调度器(FIFOScheduler),能够提前终止明显较弱的Trial的调度器(MedianStoppingRule)和自研的基于预测模型的调度器(ModelBasedScheduler,目前可以配合随机搜索、网格搜索、mbnas、autoevo使用)。

支持的调度器中,FIFOScheduler和MedianStoppingRule调度器目前均无需配置额外参数,ModelBasedScheduler支持额外参数进行配置。

  • FIFOScheduler的配置方式
    1
    2
    scheduler:
        type: FIFOScheduler
    
  • MedianStoppingRule的配置方式
    1
    2
    scheduler:
        type: MedianStoppingRule
    

    Median Stoping Rule会提前终止一些明显不如其他Trials的Trial,判断的方法是在收到若干步的report以后,如果发现当前这个Trial的best_result,不如此前已进行的Trial在同样步数的running average的中位数,就会提前终止或暂停这个Trial。

  • ModelBasedScheduler的配置方式
    1
    2
    3
    scheduler:
        type: ModelBasedScheduler
        grace_period:5
    

    ModelBasedScheduler会使用之前trial的全量训练数据训练一个基于loss曲线的一个预测模型,随后的trial在训练部分epoch后,该预测模型会基于已经epoch的loss讯息,预测出trial的最终指标,对于最终指标不够理想的trial,直接停止。

    表7 ModelBasedScheduler支持的参数

    参数

    说明

    grace_period

    在完成多少个trial的完整训练后使用训练的预测模型进行早停,默认为20。

    input_ratio

    用于预测的数据的占比。默认为0.1,即表示会用反馈值的前10%的数据,去预测后90%的数据及最高的精度。

    validation_ratio

    从完整的loss曲线数据中,取该参数配置的比例的loss曲线来作为验证集,用来选择最佳预测模型,默认为0。一般建议配置为0.2。

    ensemble_models

    使用的预测模型数,支持使用集成学习,训练多个预测模型联合预测,默认预测模型数为1。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问