TAO v5.5.0

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_addressport_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 valueSet AutoML related configurations 单元格中的 automl_information 字典变量中

    • 在 CLI notebook 中,按如下所示启用此功能

      • metadata["automl_R"]: integer valueSet 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 秒轮询作业状态。只有当状态切换到 DoneError 时,单元格执行才会完成。

对于 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_modelbest_model/trainbest_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),给定 Rnu

表 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。

上一页 API 参考
下一页 优化训练管道
© 版权所有 2024,NVIDIA。 上次更新时间:2024 年 10 月 15 日。