Katib 架构
本页介绍 Katib 的概念和架构。
超参数调优
超参数是控制模型训练过程的变量。它们包括
- 学习率。
- 神经网络中的层数。
- 训练轮数。
超参数值不是通过学习得到的。换句话说,与模型权重和偏差不同,模型训练过程不会调整超参数的值。
超参数调优是优化超参数值以最大化模型预测精度的过程。如果不使用 Katib 或类似的系统进行超参数调优,您需要自己运行许多训练 Job,手动调整超参数以找到最优值。
您可以使用早停技术改进超参数调优 Experiment。有关详细信息,请参阅早停指南。
用于超参数调优的 Katib 架构
此图展示了 Katib 如何执行超参数调优
首先,用户需要编写 ML 训练代码,该代码将在每个具有不同超参数的 Katib 试验上进行评估。然后,用户应使用 Katib Python SDK 设置目标、搜索空间、搜索算法、试验资源,并创建 Katib Experiment。
Katib 实现了以下 Kubernetes Custom Resource Definitions (CRDs) 来调优超参数。
实验
一个 Experiment 是一个独立的调优运行,也称为优化运行。
您可以指定配置设置来定义 Experiment。主要配置项如下:
目标:您想要优化的内容。这是目标指标,也称为目标变量。一个常见的指标是模型在训练 Job 的验证阶段的准确率(例如,验证准确率)。您还需要指定超参数调优 Job 是要最大化还是最小化该指标。
搜索空间:超参数调优 Job 应考虑优化的所有可能的超参数值集合,以及每个超参数的约束。搜索空间的其他名称包括可行集和解空间。例如,您可以提供您要优化的超参数的名称。对于每个超参数,您可以提供一个最小值和最大值,或者一个允许值的列表。
搜索算法:用于搜索最优超参数值的算法。例如,贝叶斯优化或随机搜索。
有关如何定义 Experiment 的详细信息,请参阅此指南。
建议
一个 建议 是一组超参数值,由超参数调优过程提出。Katib 会创建一个 Trial 来评估这组建议的值。
试验
一个 试验 是超参数调优过程的一次迭代。一个试验对应一个工作 Job 实例,包含一组参数赋值。这组参数赋值对应一个建议。
每个 Experiment 运行多个 Trial。Experiment 会一直运行 Trial,直到达到目标或配置的最大 Trial 数量。
工作器
工作器是运行以评估 Trial 并计算其目标值的进程。
工作器可以是任何类型的 Kubernetes 资源或 Kubernetes CRD。请参阅Trial 模板指南,了解如何在 Katib 中支持您自己的 Kubernetes 资源。
神经网络架构搜索
Alpha 版本
NAS 目前处于 alpha 阶段,支持有限。Kubeflow 团队非常欢迎您提供反馈,特别是关于该功能的易用性。您可以在 Katib issue tracker 中提交问题和评论。除了超参数调优,Katib 还提供神经网络架构搜索功能。您可以使用 NAS 设计您的人工神经网络,目标是最大化模型的预测准确性和性能。
NAS 与超参数调优密切相关。两者都是 AutoML 的子集。超参数调优优化模型的超参数,而 NAS 系统优化模型的结构、节点权重和超参数。
一般而言,NAS 技术使用各种技术来寻找最优的神经网络设计。
在可微分架构搜索 (Differentiable Architecture Search) 和高效神经网络架构搜索 (Efficient Neural Architecture Search) 指南中了解更多关于各种 NAS 算法的信息。
Katib 控制平面组件
Katib 控制平面包含以下组件,用于运行 Experiment:
katib-controller
- 管理 Katib Kubernetes CRD 的控制器:Experiment
、Suggestion
、Trial
。- (可选)如果在Katib Config 中启用了证书生成器,Katib 控制器部署将为 Katib webhook 创建自签名证书。在开发者指南中了解有关证书生成器的更多信息。
katib-ui
- Katib 用户界面。katib-db-manager
- 控制 Katib DB 接口的 gRPC API 服务器。katib-mysql
- 存储 Katib Experiment 指标的 MySQL DB 后端。