运行第一个超参搜索任务

本文以“蝾螈图像检测”任务为例,体验超参搜索任务过程。整个体验可以分成以下三部分:

  1. 收藏资源仓库中的数据集、算法、预训练模型和镜像;

  2. 配置超参搜索搜索算法、搜索目标和待搜索超参数并创建超参搜索任务;

  3. 查看搜索得到的最优值、对应的超参数和子任务运行详情。

在本例中,平台的内置超参搜索算法将自动生成超参数值并创建对应的训练子任务,每个子任务使用 90% 的数据进行训练,10% 的数据进行验证,同时计算验证数据集的图像检测平均 IoU 值,根据IoU值继续迭代超参数值。通过多个任务的搜索指标对比,可快速的查看到最合适的超参数值。

资源准备

单击右上角菜单栏选择“资源仓库”,进入“资源仓库”页面

数据集准备

  1. 单击上方的“数据集”,搜索“rongyuan”数据集;

  2. 单击“rongyuan”数据集,单击详情页右上方的“收藏至算力平台”,选择“v1”版本,单击“收藏”。

算法准备

  1. 单击上方的“算法”,搜索“retinanet”算法;

  2. 单击“retinanet”算法,单击详情页右上方的“收藏至算力平台”,选择“v1”版本,单击“收藏”。

预训练模型准备

  1. 单击上方的“Model Zoo”,搜索“resnet-50”;

  2. 单击“resnet-50”,单击详情页右上方的“收藏至算力平台”,选择“v1”版本,单击“收藏”。

镜像准备

  1. 单击上方的“镜像 Hub”,搜索“horovod-dev-py3-cuda11.2-cudnn8.1.0”;

  2. 单击“horovod-dev-py3-cuda11.2-cudnn8.1.0”,单击详情页右上方的“收藏至算力平台”,选择“20210623”版本,单击“收藏”。

创建超参搜索任务

  1. 左侧功能栏选择“训练管理->超参搜索”;

  2. 单击右上角“创建超参搜索”;

  3. 按照页面提示配置参数:

    • 数据集选择“数据集收藏”的“rongyuan”;

    • 算法选择“算法收藏”的“retinanet”;

      在本例中,“retinanet”的代码已适配好,若是自研算法,需要按照固定格式修改代码,从而能够接受新的入参并将结果汇报给搜索算法。

      • 修改代码入口,使得代码能够接受入参。如需要搜索“momentum”和“max_iteration”两个超参,则需要在代码入口处允许这两个超参输入,改完后如下所示:

      flags = tf.compat.v1.flags
      flags.DEFINE_float("momentum", 0.1, "momentum")
      flags.DEFINE_integer("max_iteration", 6000, "max_iteration")
      
      • 在每次训练完成后,需要严格按固定格式打印评价指标,来将结果汇报给搜索算法,用于下一个超参数组合的建议以及是否早停的判断。如希望“最大化mean-iou指标,目标精度0.9”,需要在“retinanet”代码”train.py”文件中,打印“mean-iou=”,后跟评估结果,改完之后如下所示:

      print("{} mean-iou={}".format(
               datetime.now(timezone.utc).isoformat(), np.mean(iou_list)))
      
    • 配置“保存模型地址”;

    ../_images/create_first_hpo_data_algo.png

    图 49 超参搜索配置数据集和算法

    • 优化指标和目标配置:

      • 搜索指标填写“mean-iou”;

      • 优化方向选择“最大化”;

      • 优化目标配置为“0.9”;

    • 搜索算法支持“Random”、“Bayesian Optimization”、“Grid”、“TPE”、“multivariate TPE”和”CMA-ES”,可任选其一,此处选择“Grid”完成网格搜索,其他搜索算法介绍见 超参搜索

    • 超参数配置:

      • 配置参数“max_iteration”,类型下拉选择:“categorical”,设置迭代次数,如“4000”,“5000”和“6000”;

      • 配置参数“momentum”,类型下拉选择:“double”,设置值区间和间隔,如:值区间设置为“0.3-0.8”,间隔设置为“0.1”;

      ../_images/create_first_hpo_search_config.png

      图 50 超参搜索参数配置

    • 配置最大任务数量(最多尝试的次数)、最大并行任务和最大失败任务数;

    • 分布式模式选择“单机”;

    • 单节点规格选择含有GPU类型的规格;

    • 镜像选择“镜像收藏”,下拉选择“horovod-dev-py3-cuda11.2-cudnn8.1.0”,版本为“20210623”;

    • 每轮训练结束后,超参搜索会生成新的一组超参数组合,所以需要在运行指令中显式配置超参数。对于本例中,需要将”max_iteration”和“momentum”传给代码入口,则运行指令设置为:

    python3 /workspace/algorithm/favorite/retinanet/v1/train.py \
    --dataset_dir=/workspace/dataset/favorite/rongyuan/v1 \
    --label_file=/workspace/dataset/favorite/rongyuan/v1/label.json \
    --pretrained_path=/workspace/model/favorite/resnet-50/v1 \
    --logs_dir=/workspace/outputs/hyper \
    --max_iteration=${trialParameters.max_iteration} \
    --momentum=${trialParameters.momentum} \
    --evaluate
    
    • 单击“更多设置”, 模型设置为“模型收藏”下的“resnet-50”;

  4. 单击“创建”,等待训练任务完成。

  5. 单击超参搜索任务,进入详情页,可查看参数配置和最优任务信息;

../_images/hyper_tune_job_best_job.png

图 51 超参搜索详情页

  1. 详情页单击“超参任务”,可查看到每个子任务的超参数值和目标指标值。

../_images/hyper_tune_job_sub_jobs.png

图 52 超参搜索子任务