未验证 提交 e5c89400 编写于 作者: S Steffy-zxf 提交者: GitHub

Update autofinetune.md

上级 cd70e88e
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
## 一、简介 ## 一、简介
机器学习训练模型的过程中自然少不了调参。模型的参数可分成两类:参数与超参数,前者是模型通过自身的训练学习得到的参数数据;后者则需要通过人工经验设置(如学习率、dropout_rate、batch_size等),以提高模型训练的效果。当前模型往往参数空间大,手动调参十分耗时,尝试成本高。PaddleHub Auto Fine-tune可以实现自动调整超参数。 目前深度学习模型参数可分类两类:参数与超参数,前者是模型通过大量的样本数据进行训练学习得到的参数数据;后者则需要通过人工经验或者不断尝试找到最佳设置(如学习率、dropout_rate、batch_size等),以提高模型训练的效果。如果想得到一个效果好的深度学习神经网络模型,超参的设置非常关键。因为模型参数空间大,目前超参调整都是通过手动,依赖人工经验或者不断尝试,且不同模型、样本数据和场景下不尽相同,所以需要大量尝试,时间成本和资源成本非常浪费。PaddleHub Auto Fine-tune可以实现自动调整超参数。
PaddleHub Auto Fine-tune提供两种超参优化策略: PaddleHub Auto Fine-tune提供两种超参优化策略:
...@@ -18,19 +18,20 @@ PaddleHub Auto Fine-tune提供两种超参优化策略: ...@@ -18,19 +18,20 @@ PaddleHub Auto Fine-tune提供两种超参优化策略:
<img src="https://raw.githubusercontent.com/PaddlePaddle/PaddleHub/release/v1.2/docs/imgs/thermodynamics.gif" hspace='10'/> <br /> <img src="https://raw.githubusercontent.com/PaddlePaddle/PaddleHub/release/v1.2/docs/imgs/thermodynamics.gif" hspace='10'/> <br />
</p> </p>
PaddleHub Auto Fine-tune提供两种超参评估策略: PaddleHub Auto Fine-tune为了评估搜素的超参对于任务的效果,提供两种超参评估策略:
* FullTrail: 给定一组超参,利用这组超参从头开始Finetune一个新模型,之后在数据集dev部分评估这个模型 * FullTrail: 给定一组超参,利用这组超参从头开始Fine-tune一个新模型,之后在验证集评估这个模型
* ModelBased: 给定一组超参,若这组超参来自第一轮优化的超参,则从头开始Finetune一个新模型;若这组超参数不是来自第一轮优化的超参数,则程序会加载前几轮已经Fine-tune完毕后保存的较好模型,基于这个模型,在当前的超参数组合下继续Finetune。这个Fine-tune完毕后保存的较好模型,评估方式是这个模型在数据集dev部分的效果 * ModelBased: 给定一组超参,若这组超参是第一轮尝试的超参组合,则从头开始Fine-tune一个新模型;否则基于前几轮已保存的较好模型,在当前的超参数组合下继续Fine-tune并评估
## 二、准备工作 ## 二、准备工作
使用PaddleHub Auto Fine-tune必须准备两个文件,并且这两个文件需要按照指定的格式书写。这两个文件分别是需要Fine-tune的python脚本finetunee.py和需要优化的超参数信息yaml文件hparam.yaml 使用PaddleHub Auto Fine-tune需要准备两个指定格式的文件:待优化的超参数信息yaml文件hparam.yaml和需要Fine-tune的python脚本train.py
### 关于hparam.yaml
hparam给出了需要搜索的超参名字、类型(int或者float,代表了离散型和连续型的两种超参)、搜索范围等信息,通过这些信息构建了一个超参空间,PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入finetunee.py获得评估效果,根据评估效果引导下一步的超参搜索方向,直到满足搜索次数 ### 1. hparam.yaml
hparam给出待搜索的超参名字、类型(int或者float,离散型和连续型的两种超参)、搜索范围等信息,通过这些信息构建了一个超参空间,PaddleHub将在这个空间内进行超参数的搜索,将搜索到的超参传入train.py获得评估效果,根据评估效果自动调整超参搜索方向,直到满足搜索次数。
`Note`: `Note`:
* yaml文件的最外层级的key必须是param_list * yaml文件的最外层级的key必须是param_list
...@@ -43,28 +44,28 @@ hparam给出了需要搜索的超参名字、类型(int或者float,代表了 ...@@ -43,28 +44,28 @@ hparam给出了需要搜索的超参名字、类型(int或者float,代表了
greater_than : 0.00005 greater_than : 0.00005
... ...
``` ```
* 超参名字可以随意指定,PaddleHub会将搜索到的值以指定名称传递给finetunee.py进行使用 * 超参名字可以任意指定,PaddleHub会将搜索到的值以指定名称传递给train.py使用
* PaddleHub Auto Fine-tune优化超参策略选择HAZero时,必须提供两个以上的待优化超参。 * 优化超参策略选择HAZero时,需要提供两个以上的待优化超参。
### 关于finetunee.py ### 2. train.py
finetunee.py用于接受PaddleHub搜索到的超参进行一次优化过程,将优化后的效果返回 train.py用于接受PaddleHub搜索到的超参进行一次优化过程,将优化后的效果返回
`Note` `Note`
* finetunee.py必须可以接收待优化超参数选项参数, 并且待搜索超参数选项名字和yaml文件中的超参数名字保持一致。 * train.py的选项参数须包含待优化超参数,待搜索超参数选项名字和yaml文件中的超参数名字保持一致。
* finetunee.py必须有saved_params_dir这个选项。并且在完成优化后,将参数保存到该路径下。 * train.py须包含选项参数saved_params_dir,优化后的参数将会保存到该路径下。
* 如果PaddleHub Auto Fine-tune超参评估策略选择为ModelBased,则finetunee.py必须有model_path选项,并且从该选项指定的参数路径中恢复模型 * 超参评估策略选择ModelBased时,train.py须包含选项参数model_path,自动从model_path指定的路径恢复模型
* finetunee.py必须输出模型的评价效果(建议使用dev或者test数据集),同时以“AutoFinetuneEval"开始,和评价效果之间以“\t”分开,如 * finetunee.py须输出模型的评价效果(建议使用验证集或者测试集上的评价效果),输出以“AutoFinetuneEval"开始,与评价效果之间以“\t”分开,如
```python ```python
print("AutoFinetuneEval"+"\t" + str(eval_acc)) print("AutoFinetuneEval"+"\t" + str(eval_acc))
``` ```
* 输出的评价效果取值范围应`(-∞, 1]`,取值越高,表示效果越好。 * 输出的评价效果取值范围应为`(-∞, 1]`,取值越高,表示效果越好。
### 示例 ### 示例
...@@ -85,22 +86,23 @@ $ hub autofinetune finetunee.py --param_file=hparam.yaml --cuda=['1','2'] --pops ...@@ -85,22 +86,23 @@ $ hub autofinetune finetunee.py --param_file=hparam.yaml --cuda=['1','2'] --pops
其中,选项 其中,选项
> `--param_file`: 需要优化的超参数信息yaml文件,即上述[hparam.yaml](#hparam.yaml)。 > `--param_file`: 必填,待优化的超参数信息yaml文件,即上述[hparam.yaml](#hparam.yaml)。
> `--cuda`: 设置运行程序的可用GPU卡号,list类型,中间以逗号隔开,不能有空格,默认为[‘0’] > `--cuda`: 可选,设置运行程序的可用GPU卡号,list类型,中间以逗号隔开,不能有空格,默认为[‘0’]
> `--popsize`: 设置程序运行每轮产生的超参组合数,默认为5 > `--popsize`: 可选,设置程序运行每轮产生的超参组合数,默认为5
> `--round`: 设置程序运行的轮数,默认是10 > `--round`: 可选,设置程序运行的轮数,默认为10
> `--output_dir`: 设置程序运行输出结果存放目录,可选,不指定该选项参数时,在当前运行路径下生成存放程序运行输出信息的文件夹 > `--output_dir`: 可选,设置程序运行输出结果存放目录,不指定该选项参数时,在当前运行路径下生成存放程序运行输出信息的文件夹
> `--evaluate_choice`: 设置自动优化超参的评价效果方式,可选fulltrail和modelbased, 默认为modelbased > `--evaluate_choice`: 可选,设置自动优化超参的评价效果方式,可选fulltrail和modelbased, 默认为modelbased
> `--tuning_strategy`: 设置自动优化超参策略,可选hazero和pshe2,默认为pshe2 > `--tuning_strategy`: 可选,设置自动优化超参策略,可选hazero和pshe2,默认为pshe2
`NOTE` `NOTE`
* 进行超参搜索时,一共会进行n轮(--round指定),每轮产生m组超参(--popsize指定)进行搜索。每一轮的超参会根据上一轮的优化结果决定,当指定GPU数量不足以同时跑一轮时,Auto Fine-tune功能自动实现排队,为了提高GPU利用率,建议卡数为刚好可以被popsize整除。如popsize=6,cuda=['0','1','2','3'],则每搜索一轮,Auto Fine-tune自动起四个进程训练,所以第5/6组超参组合需要排队一次,在搜索第5/6两组超参时,会存在两张卡出现空闲等待的情况,如果设置为3张可用的卡,则可以避免这种情况的出现。 * 进行超参搜索时,一共会进行n轮(--round指定),每轮产生m组超参(--popsize指定)进行搜索。上一轮的优化结果决定下一轮超参数调整方向
* 当指定GPU数量不足以同时跑一轮时,Auto Fine-tune功能自动实现排队为了提高GPU利用率,建议卡数为刚好可以被popsize整除。如popsize=6,cuda=['0','1','2','3'],则每搜索一轮,Auto Fine-tune自动起四个进程训练,所以第5/6组超参组合需要排队一次,在搜索第5/6两组超参时,会存在两张卡出现空闲等待的情况,如果设置为3张可用的卡,则可以避免这种情况的出现。
## 四、目录结构 ## 四、目录结构
...@@ -124,19 +126,19 @@ $ hub autofinetune finetunee.py --param_file=hparam.yaml --cuda=['1','2'] --pops ...@@ -124,19 +126,19 @@ $ hub autofinetune finetunee.py --param_file=hparam.yaml --cuda=['1','2'] --pops
``` ```
其中output_dir为启动autofinetune命令时指定的根目录,目录下: 其中output_dir为启动autofinetune命令时指定的根目录,目录下:
* log_file.txt记录每一轮搜索所有的超参以及整个过程中所搜索到的最优超参 * log_file.txt记录每一轮搜索所有的超参以及整个过程中所搜索到的最优超参
* visualization记录可视化过程的日志文件 * visualization记录可视化过程的日志文件
* round0 ~ roundn记录每一轮的数据,在每个round目录下,还存在以下文件: * round0 ~ roundn记录每一轮的数据,在每个round目录下,还存在以下文件:
* log-0.info ~ log-m.info记录每个搜索方向的日志 * log-0.info ~ log-m.info记录每个搜索方向的日志
* model-0 ~ model-m记录对应搜索的参数 * model-0 ~ model-m记录对应搜索的参数
## 五、可视化 ## 五、可视化
Auto Finetune API在优化超参过程中会自动对关键训练指标进行打点,启动程序后执行下面命令 Auto Fine-tune API在优化超参过程中会自动对关键训练指标进行打点,启动程序后执行下面命令
```shell ```shell
$ tensorboard --logdir ${OUTPUT}/visualization --host ${HOST_IP} --port ${PORT_NUM} $ tensorboard --logdir ${OUTPUT}/visualization --host ${HOST_IP} --port ${PORT_NUM}
...@@ -153,7 +155,7 @@ $ tensorboard --logdir ${OUTPUT}/visualization --host ${HOST_IP} --port ${PORT_N ...@@ -153,7 +155,7 @@ $ tensorboard --logdir ${OUTPUT}/visualization --host ${HOST_IP} --port ${PORT_N
首先根据终端上的输出信息,确定这个输出信息是在第几个round(如round 3),之后查看${OUTPUT}/round3/下的日志文件信息log.info, 查看具体出错原因。 首先根据终端上的输出信息,确定这个输出信息是在第几个round(如round 3),之后查看${OUTPUT}/round3/下的日志文件信息log.info, 查看具体出错原因。
2. PaddleHub AutoFinetune 命令行支持从启动命令hub autofinetune传入finetunee.py中不需要搜索的选项参数,如 2. PaddleHub Auto Fine-tune 命令行支持从启动命令hub autofinetune传入finetunee.py中不需要搜索的选项参数,如
[PaddleHub Auto Fine-tune超参优化--NLP情感分类任务](./autofinetune-nlp.md)示例中的max_seq_len选项,可以参照以下方式传入。 [PaddleHub Auto Fine-tune超参优化--NLP情感分类任务](./autofinetune-nlp.md)示例中的max_seq_len选项,可以参照以下方式传入。
```shell ```shell
...@@ -162,4 +164,4 @@ $ hub autofinetune finetunee.py --param_file=hparam.yaml --cuda=['1','2'] --pops ...@@ -162,4 +164,4 @@ $ hub autofinetune finetunee.py --param_file=hparam.yaml --cuda=['1','2'] --pops
--output_dir=${OUTPUT} --evaluate_choice=fulltrail --tuning_strategy=pshe2 max_seq_len 128 --output_dir=${OUTPUT} --evaluate_choice=fulltrail --tuning_strategy=pshe2 max_seq_len 128
``` ```
3. PaddleHub Auto Fine-tune功能使用过程中确认使用的GPU卡仅供PaddleHub使用,无其他任务使用。 3. PaddleHub Auto Fine-tune功能使用过程中建议使用的GPU卡仅供PaddleHub使用,无其他任务使用。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册