AutoML
AutoML 是一种 TAO API 服务,可为选定的模型和数据集自动选择深度学习超参数。TAO API 提供了一个 Jupyter notebook 界面来试用 AutoML 功能。
每个 AutoML 运行都包含多个训练实验。在 AutoML 运行结束时,您可以访问包含多个实验中性能最佳模型的超参数的配置,以及用于将模型部署到应用程序的二进制权重文件。
AutoML 支持除 MAL - 自动标注模型之外的所有 TAO 模型。
在使用 AutoML 之前,您需要使用TAO API 设置步骤部署 TAO REST API 服务。
TAO API 设置部分中提到的硬件和软件要求也适用于 AutoML。
部署 TAO API 后,您可以在主机上使用以下命令获取节点
ip_address
和port_number
,以便在 notebook 中使用ip_address:
hostname -i
port_number:
kubectl get service ingress-nginx-controller -o jsonpath='{.spec.ports[0].nodePort}'
AutoML 支持所有支持训练功能的 notebook,MAL - 自动标注除外。
您必须在开头将 automl_enabled 变量更改为 True,然后运行 notebook
在您的计算机上获得 notebook 后,您可以使用以下命令运行 notebook
cd <path_to_your_notebook>
jupyter-lab --ip 0.0.0.0 --allow-root --port 8888
我们建议一次只运行一个 AutoML notebook。AutoML 中的每个实验都是一个单独的 Kubernetes 作业,Kubernetes 根据提交到队列的作业执行调度。因此,跨 notebook 运行多个模型将用不同模型的 AutoML 实验填充队列,从而延长完成单个 AutoML 实验的执行时间。
[必填] 用户输入
对于每个 notebook,您需要提供/修改以下参数
model_name
:支持的网络模型列表将显示在 notebook 单元格中。dataset path
:对于每个任务,数据集应采用特定的文件夹结构(在 notebook 的数据集描述中提供)。automl_algorithm
:要使用的 AutoML 算法选项。算法的简要说明可以在AutoML 算法解释部分中找到。Bayesian
:根据过去的实验自适应地提出新的超参数。与 Hyperband 相比,此算法通常提供更好的准确率结果,但所有实验的执行时间更长。Hyperband
:Hyperband 使用具有自适应资源分配的随机搜索来加速昂贵的超参数优化。
[可选] 用户输入
对于每个模型,TAO 都设置了一组默认参数来运行 AutoML 搜索。您可以通过 additional_automl_parameters
添加新的有效参数,或通过 remove_default_automl_parameters` 从默认列表中删除一些参数。
每个 notebook 都包含 Set AutoML related configurations
单元格中的超链接,以查看特定模型的有效参数列表
additional_automl_parameters
:使用此字符串列表将其他参数添加到 AutoML 搜索算法(例如additional_automl_parameters = ['parameter1','parameter2']
)。超链接表格中任何未将
automl_enabled
列设置为True
/False
的参数都可以添加到 AutoML 搜索空间。例如,对于 DetectNet_v2
dataset_config.target_class_mapping
无法添加到additional_automl_parameters
列表,因为它不符合包含在搜索空间的条件。training_config.regularizer.weight
添加到此列表没有意义,因为它已启用。augmentation_config.preprocessing.output_image_width
可以添加,因为automl_enabled
列既未设置为True
也未设置为False
。
remove_default_automl_parameters
:删除默认情况下为 AutoML 搜索启用的参数(例如remove_default_automl_parameters = ['parameter1','parameter2']
)。超链接表格中任何将
automl_enabled
列设置为True
的参数都可以从 AutoML 搜索空间中删除。例如,对于 DetectNet_v2,
training_config.regularizer.weight
可以从 AutoML 搜索空间中删除。
[可选] AutoML 算法特定参数
有一些算法特定的参数设置为默认值,这些参数决定了 AutoML 实验计划。您可以选择修改它们,如下所示
Bayesian
max_recommendations
:要运行的最大全尺寸训练实验数。默认值为 20。例如,将此值设置为 10 将按顺序运行 10 个训练实验,因为第 n 个实验的训练配置文件是从第 (n-1) 个实验计算得出的。在 10 个实验结束时,该算法将返回训练配置文件和二进制权重,以用于实现最佳准确率的实验。
在 API notebook 中,按如下所示启用此功能
automl_max_recommendations:number_of_recommendations you want to set (integer)
在Set AutoML related configurations
单元格中的automl_information
字典变量中。
在 CLI notebook 中,按如下所示启用此功能
metadata["automl_max_recommendations"]:number_of_recommendations you want to set (integer)
在Set AutoML related configurations
单元格中。
Hyperband
R
:最大资源(即建议数和最大 epoch 数)默认值设置为 27,并按照Hyperband 参数自动调整机制部分中的说明进行调整。
在 API notebook 中,按如下所示启用此功能
automl_R: integer value
在Set AutoML related configurations
单元格中的 automl_information 字典变量中
在 CLI notebook 中,按如下所示启用此功能
metadata["automl_R"]: integer value
在Set AutoML related configurations
单元格中。
Nu
:在每次使用 SuccessiveHalving 算法时丢弃的建议比例。默认值为 3。在 API notebook 中,按如下所示启用此功能
automl_nu::value of nu you want to set (integer)
在Set AutoML related configurations
单元格中的automl_information
字典变量中。
在 CLI notebook 中,按如下所示启用此功能
metadata["automl_nu"]::value of nu you want to set (integer)
在Set AutoML related configurations
单元格中。
epoch_multiplier
:epoch 数,通过将此值与资源 (R
) 相乘来确定。默认值为 10,可以按照Hyperband 参数自动调整机制部分中的说明进行调整。在 API notebook 中,按如下所示启用此功能
epoch_multiplier:value of epoch_multiplier you want to set (integer)
在Set AutoML related configurations
单元格中的automl_information
字典变量中。
在 CLI notebook 中,按如下所示启用此功能
metadata["epoch_multiplier"]:value of epoch_multiplier you want to set (integer)
在Set AutoML related configurations
单元格中。
R 和 nu 的值经过计算以确定在 Hyperband 运行的每个阶段内要运行的实验数量以及每个实验的相应 epoch 数。例如,设置
"R=27, Nu=3, epoch_multiplier=10"
将运行三个阶段的实验,如AutoML 算法解释部分的表 3 中所述第一阶段提出 27 个新建议,运行 10 个 epoch。然后,Hyperband 保留 9 个 (27/3) 表现最佳的建议,再运行 30 个 (10*3) epoch,并重复此过程,直到剩下一个建议。
第二阶段和第三阶段分别提出 9 个和 3 个新建议(基于表 3),并遵循相同的程序。
在所有实验结束后,Hyperband 将返回训练配置文件和二进制权重,以用于实现最佳准确率的实验。
最后,用户可以更改任何与训练相关的规范参数(例如批量大小、学习率、权重正则化器和检查点频率),以便在每个实验期间反映出来。此步骤是必要的,因为这些类型的参数通常取决于计算硬件规格(例如 GPU 内存大小)。
更改上述参数后,您可以运行 notebook 的单元格。在运行 notebook 时,某些单元格需要一段时间才能完成执行。在 API notebook 中,单元格每 15 秒轮询作业状态。只有当状态切换到 Done
或 Error
时,单元格执行才会完成。
对于 AutoML train
单元格,您可以在单元格执行期间看到以下状态指示器。对于 TAO-Client AutoML notebook,您可以查看这些指示器或查看实验的训练日志。默认情况下,启用查看状态指示器;您可以通过设置 poll_automl_stats = True
切换到查看日志
AutoML 当前正在执行的实验
跨不同实验仍待处理的 epoch 总数
AutoML 实验完成的近似剩余时间。请注意,这只是训练时间,此外还有以下时间,这些时间取决于您设置的配置值
每 n 个 epoch 进行评估的时间
每 n 个 epoch 执行杂项操作(如保存检查点)的时间
从磁盘加载模型以在 Hyperband 中恢复训练的时间
直到当前实验的最佳准确率值
结果文件
下载 AutoML 实验的作业内容后,文件夹使用以下结构
├── automl_metadata.json
├── brain.json
├── controller.json
│ ...............
├── best_model
│ ├── log.txt
│ ├── recommendation_5.yaml/protobuf
│ ├── status.json
│ ├── .....
│ └── weights
│ └── weights.tlt/.pth/.hdf5
│ ...............
├── experiment_0
│ ├── log.txt
│ ├── status.json
│ ├── .....
│ ...............
├── recommendation_0.yaml/protobuf
├── recommendation_1.yaml/protobuf
├── recommendation_2.yaml/protobuf
..............
controller.json
:概述有关结果、目标超参数值和状态(成功或失败)的所有实验详细信息。best_model
:包含 AutoML 运行中所有实验集中性能最佳的模型结果(规范、日志、权重)。权重文件(.tlt/.pth/.hdf5
格式)位于best_model
、best_model/train
或best_model/weights
文件夹中,具体取决于网络模型。experiment_n
:包含 AutoML 中第 N 个实验模型结果的内容(规范、日志)。recommendtaions_n.yaml/protobuf
:包含 AutoML 中第 N 个实验的完整规范信息。
AutoML 实验的结果
下表提供了网络模型在不同 AI 应用上的若干实验结果。
这些数字是使用默认 AutoML 特定参数进行分析的:Bayesian 为
max_recommendation=20
,Hyperband 为R=27, nu=3
。对于某些网络模型(efficientdet、mask_rcnn、multitask_classification),默认的automl
参数通过Hyperband 参数自动调整机制调整为 Hyperband 的R=9, nu=3
。所有实验都在具有 Intel Xeon CPU E5-2698 v4 的单个 GPU (Tesla V100) 上执行。
当使用多 GPU 模式时,所用时间预计会相应地扩展;同样,使用更强大的 GPU 将减少执行时间。
表 1。每个网络模型的 AutoML(Bayesian/Hyperband)实验的估计时间
模型 |
epoch |
数据集 |
单个实验 |
Bayesian |
Hyperband |
---|---|---|---|---|---|
detectnet_v2 | 80 | FLIR20 | 45.7 分钟 | 913.2 分钟 | 534.2 分钟 |
efficientdet | 6 | FLIR20 | 82 分钟 | 1640 分钟 | 410 分钟 |
faster_rcnn | 80 | FLIR20 | 252 分钟 | 5040 分钟 | 2948.4 分钟 |
retinanet | 100 | FLIR20 | 75 分钟 | 1500 分钟 | 702 分钟 |
ssd | 80 | FLIR20 | 174 分钟 | 3480 分钟 | 2035 分钟 |
yolo3 | 80 | FLIR20 | 60 分钟 | 1200 分钟 | 702 分钟 |
yolo4 | 80 | FLIR20 | 110 分钟 | 2200 分钟 | 1287 分钟 |
yolo4_tiny | 80 | FLIR20 | 87 分钟 | 1740 分钟 | 1017.9 分钟 |
mask_rcnn | 5 | FLIR20 | 66 分钟 | 1320 分钟 | 237.6 分钟 |
lprnet | 24 | OpenALPR | 1.1 分钟 | 22 分钟 | 39.2 分钟 |
multiclass_classification | 80 | Pascal VOC | 80 分钟 | 1600 分钟 | 1279.7 分钟 |
multitask_classification | 10 | Fashion Product | 12.5 分钟 | 250 分钟 | 799.8 分钟 |
unet | 50 | ISBI | 4.5 分钟 | 90 分钟 | 98.5 分钟 |
本节提供两种 AutoML 算法的更多详细信息。
贝叶斯优化
贝叶斯优化旨在通过根据过去的实验信息自适应地选择超参数,比标准基线(如标准随机搜索)更快地识别最佳配置。
使用代理模型将高斯过程 (GP) 拟合到现有数据 (X,y),其中 X 是建议向量,y 是观察到的验证图。
贝叶斯优化自适应地提出新的建议,这些建议基于拟合的 GP,直到达到
max_recommendations
的数量,从而在期望中产生最佳改进。
Hyperband
Hyperband 通过自适应资源分配加速随机搜索,从而解决了昂贵的超参数优化问题。Hyperband 遵循 SuccessiveHalving 算法,将预算均匀分配给一组超参数建议。在 AutoML 运行期间,Hyperband 评估所有建议的性能,剔除最差的一半,并重复此过程,直到剩下一个建议(有关更多详细信息,请参阅这篇研究论文)。三个与 hyperband 相关的参数 (R, nu, epoch_multiplier
) 预定义了 hyperband 试验序列,该序列基于每个回合执行多少次试验以及在该回合中为每次试验分配多少资源。
R
参数确定最大资源(即 epoch 数和建议数)。Nu
参数控制在每次使用 SuccessiveHalving 算法时丢弃的建议比例。epoch_multiplier
和资源 (r
) 在每个SuccessiveHalving 迭代 (i)
中相乘,以确定每次试验的 epoch 数。每次 SuccessiveHalving 运行都称为一个stage
,每个阶段都包含SuccessiveHalving 迭代 (i)
。
下表描述了 SuccessiveHalving 迭代 (i)
、超参数建议数 (n)
和 资源 (r)
,给定 R
和 nu
。
表 2。设置为 R = 81, nu=3
时的预定义 Hyperband 实验计划。
s=0 |
s=1 |
s=2 |
s=3 |
|||||
---|---|---|---|---|---|---|---|---|
i | n | r | n | r | n | r | n | r |
0 | 81 | 1 | 27 | 3 | 9 | 9 | 6 | 27 |
1 | 27 | 3 | 9 | 9 | 3 | 27 | 2 | 81 |
2 | 9 | 9 | 3 | 27 | 1 | 81 | ||
3 | 3 | 27 | 1 | 81 | ||||
4 | 1 | 81 |
表 3。设置为 R = 27, nu=3
时的预定义 Hyperband 实验计划。
s=0 |
s=1 |
s=2 |
||||
---|---|---|---|---|---|---|
i | n | r | n | r | n | r |
0 | 27 | 1 | 9 | 3 | 6 | 9 |
1 | 9 | 3 | 3 | 9 | 2 | 27 |
2 | 3 | 9 | 1 | 27 | ||
3 | 1 | 27 |
默认情况下,Hyperband 参数 R
设置为 27,nu
设置为 3。基于这些值和每个实验的训练 max_epoch
,hyperband 参数自动调整机制通过 max_epoch^(log(nu)/log(R))
计算 epoch_multiplier
。在这里,如果计算出的 epoch_multiplier
小于 3,则 R
减 1,并重新计算 epoch_multiplier
,直到该值等于或大于 3。