超参搜索简介

ModelArts新版训练中新增了超参搜索功能,自动实现模型超参搜索,为您的模型匹配最优的超参。

在模型训练过程中,有很多超参需要根据任务进行调整,比如learning_rate、weight_decay等等,这一工作往往需要一个有经验的算法工程师花费一定精力和大量时间进行手动调优。ModelArts支持的超参搜索功能,在无需算法工程师介入的情况下,即可自动进行超参的调优,在速度和精度上超过人工调优。

ModelArts支持以下三种超参搜索算法:

1、贝叶斯优化(SMAC)

2、TPE算法

3、模拟退火算法(Anneal)


贝叶斯优化(SMAC)

贝叶斯优化假设超参和目标函数存在一个函数关系。基于已搜索超参的评估值,通过高斯过程回归来估计其他搜索点处目标函数值的均值和方差。根据均值和方差构造采集函数(Acquisition Function),下一个搜索点为采集函数的极大值点。相比网格搜索,贝叶斯优化会利用之前的评估结果,从而降低迭代次数、缩短搜索时间;缺点是不容易找到全局最优解。

参数
说明
取值参考

num_samples

搜索尝试的超参组数

int,一般在10-20之间,值越大,搜索时间越长,效果越好

kind

采集函数类型

string,默认为'ucb',可能取值还有'ei'、'poi',一般不建议用户修改

kappa

采集函数ucb的调节参数,可理解为上置信边界

float,一般不建议用户修改

xi

采集函数poi和ei的调节参数

float,一般不建议用户修改

TPE算法

TPE算法全称Tree-structured Parzen Estimator,是一种利用高斯混合模型来学习超参模型的算法。在每次试验中,对于每个超参,TPE为与最佳目标值相关的超参维护一个高斯混合模型l(x),为剩余的超参维护另一个高斯混合模型g(x),选择l(x)/g(x)最大化时对应的超参作为下一组搜索值。

参数
说明
取值参考

num_samples

搜索尝试的超参组数

int,一般在10-20之间,值越大,搜索时间越长,效果越好

n_initial_points

采用TPE接近目标函数之前,对目标函数的随机评估数

int,一般不建议用户修改

gamma

TPE算法的一定分位数,用于划分l(x)和g(x)

float,范围(0,1),一般不建议用户修改

模拟退火算法(Anneal)

模拟退火算法即Anneal算法,是随机搜索中一个简单但有效的变体,它利用了响应曲面中的平滑度。退火速率不自适应。Anneal算法从先前采样的一个试验点作为起点,然后从与先验分布相似的分布中采样每组超参数,但其密度更集中在我们选择的试验点周围。随着时间推移,算法会倾向于从越来越接近最佳点处采样。在采样过程中,算法可能绘制一个次佳试验作为最佳试验,以一定概率跳出局部最优解。

参数
说明
取值参考

num_samples

搜索尝试的超参组数

int,一般在10-20之间,值越大,搜索时间越长,效果越好

avg_best_idx

要探索试验的几何分布平均,从按照分数排序的试验中选择

float,一般不建议用户修改

shrink_coef

随着更多的点被探索,邻域采样大小的减少率

float,一般不建议用户修改

创建超参搜索作业

背景信息

对于用户希望优化的超参,需在“超参”设置中定义,可以给定名称、类型、默认值、约束等,具体设置方法可以参考定义超参。

如果用户使用的AI引擎为pytorch_1.8.0-cuda_10.2-py_3.7-ubuntu_18.04-x86_64和tensorflow_2.1.0-cuda_10.1-py_3.7-ubuntu_18.04-x86_64,并且优化的超参类型为float类型,ModelArts支持用户使用超参搜索功能。

在0代码修改的基础下,实现算法模型的超参搜索。需要完成以下步骤:

准备工作

1、数据已完成准备:已在ModelArts中创建可用的数据集,或者您已将用于训练的数据集上传至OBS目录。

2、请准备好训练脚本,并上传至OBS目录。训练脚本开发指导参见开发自定义脚本

3、在训练代码中,用户需打印搜索指标参数。

4、已在OBS创建至少1个空的文件夹,用于存储训练输出的内容。

5、由于训练作业运行需消耗资源,确保账户未欠费。

6、确保您使用的OBS目录与ModelArts在同一区域。


创建算法

进入ModelArts控制台,参考创建算法操作指导,创建自定义算法。在配置自定义算法参数时,需关注“超参”和“支持的策略”参数的设置。

对于用户希望优化的超参,需在“超参”设置中定义,可以给定名称、类型、默认值、约束等。

单击勾选自动搜索,用户为算法设置算法搜索功能。自动搜索作业运行过程中,ModelArts后台通过指标正则表达式获取搜索指标参数,朝指定的优化方向进行超参优化。用户需要在代码中打印搜索参数并在控制台配置参数,具体可参见创建算法

创建训练作业(New)

登录ModelArts控制台,参考创建训练作业操作指导,创建训练作业。用户需关注以下操作才能开启超参搜索。

当您选择支持超参搜索的算法,需单击超级参数的范围设置按钮才能开启超参搜索功能。

开启超参搜索功能后,用户可以设置搜索指标、搜索算法和搜索算法参数。三个参数显示的支持值与算法管理模块的超参设置一一对应。

完成超参搜索作业的创建后,训练作业需要运行一段时间。

创建训练作业常见问题

创建训练作业常见问题

  • TPE算法优化的超参数必须是分类特征(categorical features)么?

    对于优化的超参数类型,TPE算法本身是没有限制的,但出于面对普通用户节省资源的目的,ModelArts在前端限制了TPE的超参数必须是float,如果想离散型和连续型参数混用的话,可以调用rest接口。

  • 训练作业参数填写应该注意什么?

    训练作业参数填写需要您注意以下几点:

    1、如果已配置算法来源和数据来源,则下方的运行参数,将根据选择的对象自动填写“data_url”,无法直接在运行参数中直接修改。

    2、在创建训练作业配置运行参数时,只需要填写对应的参数与参数值。

    3、训练作业中的参数值为OBS桶路径时,需要使用数据对应的路径,且以“obs://”开头。

    4、在代码中创建OBS文件夹时,需要调用MoXing的API,具体方法如下:

    import moxing as mox
    mox.file.make_dirs('obs://bucket_name/sub_dir_0/sub_dir_1')
  • 训练作业的“/cache”目录是否安全?

    ModelArts训练作业的程序运行在容器中,容器挂载的目录地址是唯一的,只有运行时的容器能访问到。因此训练作业的“/cache”是安全的。

  • 训练环境中不同规格资源“/cache”目录的大小

    在创建训练作业时可以根据训练作业的大小选择CPU、GPU或者Ascend资源。

    ModelArts会挂载硬盘至“/cache”目录,用户可以使用此目录来储存临时文件。“/cache”与代码目录共用资源,不同资源规格有不同的容量。

  • 训练作业一直在等待中(排队)?

    训练作业状态一直在等待中状态表示当前所选的资源池规格资源紧张,作业需要进行排队,请耐心等待。如想降低排队时间,根据您所选资源池的类型,有以下建议:

    1、公共资源池:

    1. 公共资源池资源较少,高峰期如举办相关活动时会存在资源不足情况。有以下方法可以尝试:
    2. 如果使用的是免费规格,可以换成收费规格,免费规格资源较少,排队概率高。
    3. 规格选择卡数尽量少,如可以选择1卡,相比于选择8卡排队几率大大降低。
    4. 可以尝试使用其他Region(如北京四切换为上海一)。
    5. 如果有长期的资源使用诉求,可以购买独占使用的专属资源池。

    2、专属资源池:

    1. 如有多个可用的专属资源池,可尝试选择其他较为空闲的资源池。
    2. 可清理当前资源池下的其他资源,如停止长时间不使用的Notebook。
    3. 在非高峰期时提交训练作业。
    4. 如长期长时间排队可以联系该专属资源池的账号管理员,管理员可根据使用情况对资源池进行扩容。