如何使用 Katib Config
本指南描述了 Katib Config——每个 Katib 组件的主要配置文件。我们使用 Kubernetes ConfigMap 将该配置获取到 Katib 控制平面组件中。
ConfigMap 必须部署在 KATIB_CORE_NAMESPACE 命名空间中,名称为 katib-config。
Katib config 包含初始化参数:init 和运行时参数:runtime。您可以通过编辑 katib-config ConfigMap 来修改这些参数。
kubectl edit configMap katib-config -n kubeflow
初始化参数
在 init 中设置的 Katib Config 参数代表 Katib 控制平面的初始化设置。这些参数可以在部署 Katib 控制平面之前修改。
apiVersion: config.kubeflow.org/v1beta1
kind: KatibConfig
init:
certGenerator:
enable: true
...
controller:
trialResources:
- Job.v1.batch
- TFJob.v1.kubeflow.org
...
它包含以下 Katib 组件的设置
Katib 证书生成器:
certGeneratorKatib 控制器:
controller
Katib 证书生成器参数
在 .init.certGenerator 中设置的以下参数配置 Katib 证书生成器
enable- 是否启用 Katib 证书生成器。默认值是
falsewebhookServiceName- Katib webhooks 的服务名称。如果设置了此值,则强制启用 Katib 证书生成器。默认值是
katib-controllerwebhookSecretName- 用于存储 Katib webhooks 证书的 secret 名称。如果设置了此值,则强制启用 Katib 证书生成器。默认值是
katib-webhook-cert
Katib 控制器参数
在 .init.controller 中设置的以下参数配置 Katib 控制器
experimentSuggestionName- Experiment controller 的 Suggestion 接口实现。默认值是
defaultmetricsAddr- Katib 控制器应绑定用于提供 prometheus 指标的 TCP 地址。默认值是
8080healthzAddr- Katib 控制器应绑定用于健康探测的 TCP 地址。默认值是
18080injectSecurityContext- 是否将安全上下文注入到 Katib Trial 训练容器中的 Katib metrics collector sidecar 容器。默认值是
falsetrialResources- 可用作 Trial 模板的资源列表。Trial 资源必须采用此格式:Kind.version.group(例如TFJob.v1.kubeflow.org)。遵循本指南,以了解如何使 Katib Trial 与您的 Kubernetes CRD 协同工作。默认值是
[Job.v1.batch]webhookPort- Katib admission webhooks 的端口号。默认值是
8443enableLeaderElection- 是否为 Katib 控制器启用 leader 选举。如果此值为 true,则只有单个 Katib 控制器 Pod 是活动的。默认值是
falseleaderElectionID- Katib 控制器 leader 选举的 ID。默认值是
3fbc96e9.katib.kubeflow.org
运行时参数
在 runtime 中设置的 Katib Config 参数代表 Katib 实验的运行时设置。这些参数可以在创建 Katib 实验之前修改。创建 Katib 实验时,Katib 控制器会从 katib-config ConfigMap 中获取最新配置。
apiVersion: config.kubeflow.org/v1beta1
kind: KatibConfig
runtime:
metricsCollectors:
- kind: StdOut
image: docker.io/kubeflowkatib/file-metrics-collector:latest
...
suggestions:
- algorithmName: random
image: docker.io/kubeflowkatib/suggestion-hyperopt:latest
...
earlyStoppings:
- algorithmName: medianstop
image: docker.io/kubeflowkatib/earlystopping-medianstop:latest
...
指标收集器参数
在 .runtime.metricsCollectors 中设置的参数配置 Katib 指标收集器的容器。以下设置是您要在 Katib 实验中使用的每个 Katib 指标收集器的必需项
kind- Katib 指标收集器类型之一。image- 指标收集器容器的 Docker 镜像。
以下设置是可选的
imagePullPolicy- 指标收集器容器的镜像拉取策略。默认值是
IfNotPresentresources- 指标收集器容器的资源。resources的默认值是metricsCollectors: - kind: StdOut image: docker.io/kubeflowkatib/file-metrics-collector:latest resources: requests: cpu: 50m memory: 10Mi ephemeral-storage: 500Mi limits: cpu: 500m memory: 100Mi ephemeral-storage: 5Gi您可以在不向 Kubernetes 集群请求
cpu、memory或ephemeral-storage资源的情况下运行指标收集器的容器。例如,您必须从容器资源中删除ephemeral-storage才能使用Google Kubernetes Engine 集群自动扩缩器。要从指标收集器容器中删除特定资源,请在您的 Katib config 中按如下方式在 requests 和 limits 中设置负值
resources: requests: cpu: -1 memory: -1 ephemeral-storage: -1 limits: cpu: -1 memory: -1 ephemeral-storage: -1waitAllProcesses- 一个标志,用于定义指标收集器在开始收集指标之前是否应等待 Trial 的训练容器中的所有进程完成。默认值是
false
建议参数
在 .runtime.suggestions 中设置的参数配置 Katib 建议的 Deployment。每个建议都代表您可以在 Katib 实验中使用的 AutoML 算法之一。以下设置是 Suggestion Deployment 的必需项
algorithmName- Katib 算法名称之一。例如:tpeimage- Suggestion Deployment 容器的 Docker 镜像。镜像示例:docker.io/kubeflowkatib/<suggestion-name>对于每种算法,您可以在 Docker 镜像中指定以下建议名称之一
建议名称 支持的算法列表 描述 suggestion-hyperoptrandom,tpeHyperopt 优化框架 suggestion-skoptbayesianoptimizationScikit-optimize 优化框架 suggestion-goptunacmaes,random,tpe,sobolGoptuna 优化框架 suggestion-optunamultivariate-tpe,tpe,cmaes,random,gridOptuna 优化框架 suggestion-hyperbandhyperbandKatib Hyperband 实现 suggestion-pbtpbtKatib PBT 实现 suggestion-enasenasKatib ENAS 实现 suggestion-dartsdartsKatib DARTS 实现
以下设置是可选的
<ContainerV1>- 您可以为 Suggestion Deployment 内联指定所有容器参数。例如,容器资源的resources或容器环境变量的env。resources的配置与 Katib 指标收集器容器的resources工作方式相同。serviceAccountName- Suggestion Deployment 的ServiceAccount。默认情况下,Suggestion Pod 没有特定的 ServiceAccount,在这种情况下,Pod 使用默认 service account。
注意:如果您想使用早期停止运行实验,Suggestion 的 Deployment 必须具有更新实验 Trial 状态的权限。如果您未在 Katib config 中指定 ServiceAccount,Katib 控制器会为 Suggestion 创建所需的Kubernetes 基于角色的访问控制。
如果您需要拥有自己的 ServiceAccount 以便使用早期停止进行实验建议,您必须遵循以下规则
ServiceAccount 名称不能等于
<experiment-name>-<experiment-algorithm>ServiceAccount 必须具有更新实验 Trial 状态的足够权限。
建议卷参数
当您使用FromVolume 恢复策略创建实验时,您可以为实验建议指定PersistentVolume (PV) 和PersistentVolumeClaim (PVC) 设置,以恢复 AutoML 算法的阶段。
如果 PV 设置为空,Katib 控制器仅创建 PVC。如果您想使用默认的卷规范,可以忽略这些参数。
例如,random 算法的建议卷配置
suggestions:
- algorithmName: random
image: docker.io/kubeflowkatib/suggestion-hyperopt:latest
volumeMountPath: /opt/suggestion/data
persistentVolumeClaimSpec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 3Gi
storageClassName: katib-suggestion
persistentVolumeSpec:
accessModes:
- ReadWriteMany
capacity:
storage: 3Gi
hostPath:
path: /tmp/suggestion/unique/path
storageClassName: katib-suggestion
persistentVolumeLabels:
type: local
volumeMountPath- Suggestion Deployment 容器的挂载路径。默认值是
/opt/katib/datapersistentVolumeClaimSpec- Suggestion Deployment 的 PVC 的PVC 规范。默认值是
persistentVolumeClaimSpec: accessModes: - ReadWriteOnce resources: requests: storage: 1GipersistentVolumeSpec- Suggestion Deployment 的 PV 的PV 规范。Suggestion Deployment 的 PV 总是带有
persistentVolumeReclaimPolicy: Delete,以便在 Katib 实验删除后正确移除所有资源。要了解更多关于 PV 回收策略的信息,请查阅Kubernetes 文档。persistentVolumeLabels- Suggestion Deployment 的 PV 的PV 标签。
早期停止参数
在 runtime.earlyStoppings 中设置的参数配置 Katib 早期停止算法的容器。以下设置是您要在 Katib 实验中使用的每个早期停止算法的必需项
algorithmName- 早期停止算法名称之一(例如medianstop)。image- 早期停止容器的 Docker 镜像。
以下设置是可选的
imagePullPolicy- 早期停止容器的镜像拉取策略。默认值是
IfNotPresentresources- 早期停止容器的资源。resources的配置与 Katib 指标收集器容器的resources工作方式相同。
后续步骤
- 如何为各种 Katib 组件设置环境变量。