如何配置实验
本指南介绍了如何配置用于超参数 (HP) 调优的 Katib Experiment。
创建训练代码镜像
如果您不使用 Katib Python SDK 中的 tune
API,您必须将您的训练代码打包到 Docker 容器镜像中,并将该镜像上传到仓库中。请查阅Docker 文档和Kubernetes 文档了解更多信息。
配置实验
您可以在 Katib Experiment YAML 文件中配置 HP 调优任务。YAML 文件定义了您想要优化的 HP 的潜在值范围(搜索空间)、用于确定最优值的目标指标、优化期间使用的搜索算法以及其他配置。
作为参考,您可以使用随机搜索算法示例的 YAML 文件。
下面的列表描述了 Experiment YAML 文件中的字段。
objective:您想在超参数调优任务中优化的指标。您应该指定是希望 Katib 最大化还是最小化该指标。
Katib 使用
objectiveMetricName
和additionalMetricNames
来监控超参数在模型上的表现。Katib 会记录最佳objectiveMetricName
指标的值(根据type
进行最大化或最小化)以及 Experiment 的.status.currentOptimalTrial.parameterAssignments
中相应的超参数集。如果一组超参数的objectiveMetricName
指标达到goal
,Katib 将停止尝试更多的超参数组合。您可以运行 Experiment 而无需指定
goal
。在这种情况下,Katib 将一直运行 Experiment,直到相应的成功试验达到maxTrialCount
。maxTrialCount
参数将在下面描述。计算 Experiment 目标的默认方法是
当目标
type
为maximize
时,Katib 比较所有最大指标值。当目标
type
为minimize
时,Katib 比较所有最小指标值。
要更改此默认设置,请使用各种规则(
min
、max
或latest
)定义metricStrategies
,以从 Experiment 的objectiveMetricName
和additionalMetricNames
中提取每个指标的值。Experiment 的目标值将根据所选策略计算。例如,您可以在 Experiment 中按如下方式设置参数
. . . objectiveMetricName: accuracy type: maximize metricStrategies: - name: accuracy value: latest . . .
在这种情况下,Katib 控制器会从每个试验报告的所有最新
accuracy
指标中寻找最佳最大值。请查阅指标策略示例。每个指标的默认策略类型等于目标的
type
。algorithm:您希望 Katib 用于寻找最佳 HP 的搜索算法。示例包括随机搜索、网格搜索、贝叶斯优化等。请查阅HP 调优算法了解如何配置它们。
parallelTrialCount:Katib 应并行训练的最大 HP 集数量。默认值为 3。
maxTrialCount:要运行的最大试验数量。这相当于 Katib 应生成用于测试模型的 HP 集数量。如果省略
maxTrialCount
值,您的 Experiment 将一直运行,直到达到目标goal
或 Experiment 达到最大失败试验数量。maxFailedTrialCount:允许失败的最大试验数量。这相当于 Katib 应测试的失败 HP 集数量。Katib 将状态为
Failed
或MetricsUnavailable
的试验视为Failed
试验,如果失败试验数量达到maxFailedTrialCount
,Katib 将停止 Experiment 并将其状态设为Failed
。parameters:您希望为机器学习 (ML) 模型调优的 HP 范围。这些参数定义了搜索空间,也称为可行集或解空间。在规范的这一部分,您可以定义 HP 的名称、分布和类型:
int
(整数)、double
(双精度浮点数)或categorical
(类别)。Katib 根据您指定的 HP 调优算法在此范围内生成 HP 组合。trialTemplate:定义试验的模板。您必须将您的 ML 训练代码打包到 Docker 镜像中,如上文所述。
trialTemplate.trialSpec
是您的非结构化模板,包含模型参数,这些参数将从trialTemplate.trialParameters
中替换。例如,您的训练容器可以接收 HP 作为命令行参数或环境变量。您必须在trialTemplate.primaryContainerName
中设置训练容器的名称。遵循试验模板指南,了解如何使用任何 Kubernetes 资源作为 Katib Trial 以及如何将 ConfigMap 用于 Trial 模板。
使用 Istio 运行 Katib 实验
来自此目录的 Katib Experiment 不适用于Istio sidecar 注入,因为试验需要访问互联网以下载数据集。如果您使用 Kubeflow 平台部署 Katib,则可以禁用 Istio sidecar 注入。在您的 Experiment 试验的模板中指定此注解:sidecar.istio.io/inject: "false"
来禁用 Istio sidecar 注入。
trialSpec:
apiVersion: batch/v1
kind: Job
spec:
template:
metadata:
annotations:
"sidecar.istio.io/inject": "false"
如果您在试验模板中使用 PyTorchJob
或其他 Training Operator 任务,请在此处查看如何设置注解。
运行实验
您可以使用随机搜索示例的 YAML 文件创建超参数调优 Experiment。
Experiment 的试验使用 PyTorch 模型来训练 FashionMNIST 数据集的图像分类模型。您可以查看训练容器源代码。注意:由于此训练容器会下载 FashionMNIST 数据集,如果您使用 Kubeflow 平台部署 Katib,则需要禁用 Istio sidecar 注入。
部署 Experiment
kubectl create -f https://raw.githubusercontent.com/kubeflow/katib/master/examples/v1beta1/hp-tuning/random.yaml
此示例随机生成以下超参数
--lr
:学习率。类型:double。--momentum
:PyTorch 优化器的动量。类型:double。
您可以在 status
规范中检查 Experiment 的结果。
$ kubectl -n kubeflow get experiment random -o yaml
apiVersion: kubeflow.org/v1beta1
kind: Experiment
metadata:
...
name: random
namespace: kubeflow
...
spec:
...
status:
currentOptimalTrial:
bestTrialName: random-hpsrsdqp
observation:
metrics:
- latest: "0.11513"
max: "0.53415"
min: "0.01235"
name: loss
parameterAssignments:
- name: lr
value: "0.024736875661534784"
- name: momentum
value: "0.6612351235123"
runningTrialList:
- random-2dwxbwcg
- random-6jd8hmnd
- random-7gks8bmf
startTime: "2021-10-07T21:12:06Z"
succeededTrialList:
- random-xhpcrt2p
- random-hpsrsdqp
- random-kddxqqg9
- random-4lkr5cjp
trials: 7
trialsRunning: 3
trialsSucceeded: 4
在 status.currentOptimalTrial
参数中查看关于最佳试验的信息。此外,status
显示了 Experiment 的试验及其当前状态。例如,运行此命令获取最优试验的信息
$ kubectl get experiment random -n kubeflow -o=jsonpath='{.status.currentOptimalTrial}'
{
"bestTrialName": "random-hpsrsdqp",
"observation": {
"metrics": [
{
"latest": "0.11513",
"max": "0.53415",
"min": "0.01235",
"name": "loss"
}
]
},
"parameterAssignments": [
{
"name": "lr",
"value": "0.024736875661534784",
},
{
"name": "momentum",
"value": "0.6612351235123"
}
]
}
下一步
了解HP 调优算法。
如何配置Katib Trial 模板。
通过早期停止指南提升您的超参数调优 Experiment。