文档首页 > > AI工程师用户指南> 训练管理> 自动化搜索作业> 代码编写规范

代码编写规范

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

编写注意事项

用户代码在使用时需注意如下几点:

  • ModelArts会传入“trial_id”作为运行一次用户代码的唯一标示,请务必将该唯一标示用于文件保存,以免出现多个任务并行下读写文件冲突。
  • 在启动代码中,需要提供命名为“train”的方法,由ModelArts调用进行一次完整的训练、评估与模型导出。如果训练与评估是分开的,可以在该代码中提供一个命名为“eval”的方法,作为模型评估与导出的入口,AutoSearch框架会在“train”执行完毕后在同一个进程里接着调用“eval”“train”“eval”方法都没有入参。
  • argparse的使用时需注意,运行用户代码时传入额外参数,使用非排他性的入参解析API,例如使用“argparse”“parse_known_args”替代“parse_args”

autosearch.config的使用

yaml中定义的搜索空间,在经过搜索算法的处理后,会以dict的形式来传回给用户。在用户代码中可以通过“autosearch.config”来获得。

一般情况下,可以通过“autosearch.config['key']”来获得本次训练对应的配置,比如:

search_space:
  - type: discrete
    params:
      - name: resnet50
        values: ["1-11111111-2111121111-211111",
                 "1-1112-1111111111121-11111112111",
        ]

即可通过“autosearch.config['resnet50']”来获得本次训练使用的配置。上面说的是一般情况,config中的结构编码可能会根据搜索算法的不同而不同。请参见使用样例:示例:使用更优秀的网络结构替换原生ResNet50示例:使用经典超参算法搜索超参示例:使用MBNAS算法搜索网络结构示例:使用预置的数据增强策略进行自动数据增强示例:使用多元搜索

autosearch.reporter的使用

用户可以通过autosearch.reporter来反馈训练的结果信息。

通常,一个搜索算法会要求指定一个“reward_attr”“reward_attr”是越大越好,并且支持数学表达式,可以让你方便地完成一些多目标的搜索。

search_algotirhm:
    type: xxx
    reward_attr: accuracy - 0.1 * latency

此时,在训练代码中,需要上报这两个指标给AutoSearch框架:

autosearch.reporter(accuracy=foo, latency=bar)

搜索算法会根据上报的结果来计算奖励(reward),进而更新算法状态。当然你可以上报额外的信息,但不会被用到。

reporter的0行代码修改方法

除去用户显式的使用autosearch.reporter来反馈训练的结果信息外,还支持通过分析用户的打印日志来自动获取反馈信息。在指定完成reward_attr后,需要在yaml配置文件中配置一个指向reward_attr里指标的正则表达式。

比如针对如下所示屏显信息:

I can see atdout in screen
result=-1.000000;

yaml配置文件如下所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
search_algorithm:
  type: anneal_search
  max_concurrent: 2
  reward_attr: result
  report_keys:
    - name: result
      regex: (?<=result=).+(?=;)
  save_model_count: 3
  num_samples: 6
  mode: max

系统会通过该正则去用户的打印中寻找对应的指标并自动反馈,用户就不需要对自己的业务代码进行修改,无需维护额外的代码。

使用预置解码器(Decoder)

Decoder负责将传入的编码(字符串),转换为实际可执行的某种算法框架的代码(TensorFlow、PyTorch等)。ModelArts预置了几种Decoder,在代码模块中使用预置的Decoder,可以大大节省开发者的工作量。无需再将自己的代码模块化并支持解析网络结构/增强策略,只需嵌入已经预置的Decoder代码即可。

  • 用于NAS场景的ResNet50 Decoder

    此预置Decoder对应的搜索空间,是对于ResNet每一个Stage的Block数的搜索,以及channel翻倍的Block位置的搜索。Backbone架构编码字符串格式“111-2111-211111-211”,其中“-”用不同的分辨率分隔每个下采样阶段,“1”表示不改变通道的常规block,“2”表示加倍基本通道数量的block,前面的字符串表示的就是标准的ResNet50的结构。所以每个Stage可以有任意个“1”,总共要有3个“2”

    其他ResNet Decoder也与ResNet50 Decoder类似。

  • 用于数据增强的Decoder

    针对numpy、TensorFlow、PyTorch框架/库(一般在预处理节点常用),各给出了一个数据增强的Decoder,能将字符串解码成对应框架/库上的数据增强操作。

表1 Decoder API参考

Docoder名称

支持的引擎

ModelArts AutoSearch API

入参

说明

ResNet50 Decoder

TensorFlow

autosearch.client.nas.backbone.resnet.ResNet50

inputs

输入数据Tensor。

include_top

  • 设置为“True”时,返回所有stage输出。
  • 设置为“False”时,只返回最后一个stage输出。

mode

  • 设置为“eval”时,不训练bn层参数。
  • 设置为“Train”时候,训练bn层参数。

data_format

设置tensor数据格式,支持“NHWC”“NCHW”两种格式,默认为“NHWC”

load_weight

  • 设置为“True”,则预加载在imagenet上训练的模型参数,目前只支持resnet50。
  • 设置为“False”,则从头开始训练模型。

TensorFlow

autosearch.client.nas.backbone.resnet.ResNet18

-

入参与autosearch.client.nas.backbone.resnet.ResNet50接口一样

autosearch.client.nas.backbone.resnet.ResNet34

-

入参与autosearch.client.nas.backbone.resnet.ResNet50接口一样

autosearch.client.nas.backbone.resnet.ResNet101

-

入参与autosearch.client.nas.backbone.resnet.ResNet50接口一样

数据增强Decoder

Numpy

autosearch.client.augment.offline_search.preprocessor_builder.ImageClassificationNdarrayBuilder

search_space_type

目前仅支持配置为“offline”

数据增强Decoder

TensorFlow

autosearch.client.augment.offline_search.preprocessor_builder.ImageClassificationTensorflowBuilder

search_space_type

目前仅支持配置为“offline”

数据增强Decoder

PyTorch

autosearch.client.augment.offline_search.preprocessor_builder.ImageClassificationPytorchBuilder

search_space_type

目前仅支持配置为“offline”

内置环境信息参考

针对自动化搜索作业,ModelArts内置环境的信息如表2所示,此环境版本无法修改,供用户在使用自动化搜索作业功能时参考。

表2 内置环境版本信息

组件

版本

CUDA

9.0

Python

3.6

TensorFlow-GPU

1.12.0

PyTorch

1.0.0

ray

0.8.0

Keras

2.3.1

Pillow

6.2.0

numpy

1.18.1

scipy

1.3.2

scikit-image

0.16.2

分享:

    相关文档

    相关产品

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

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

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

字符长度不能超过200

提交反馈 取消

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

智能客服提问云社区提问