如何使用 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 证书生成器:
certGenerator
Katib 控制器:
controller
Katib 证书生成器参数
在 .init.certGenerator
中设置的以下参数配置 Katib 证书生成器
enable
- 是否启用 Katib 证书生成器。默认值是
false
webhookServiceName
- Katib webhooks 的服务名称。如果设置了此值,则强制启用 Katib 证书生成器。默认值是
katib-controller
webhookSecretName
- 用于存储 Katib webhooks 证书的 secret 名称。如果设置了此值,则强制启用 Katib 证书生成器。默认值是
katib-webhook-cert
Katib 控制器参数
在 .init.controller
中设置的以下参数配置 Katib 控制器
experimentSuggestionName
- Experiment controller 的 Suggestion 接口实现。默认值是
default
metricsAddr
- Katib 控制器应绑定用于提供 prometheus 指标的 TCP 地址。默认值是
8080
healthzAddr
- Katib 控制器应绑定用于健康探测的 TCP 地址。默认值是
18080
injectSecurityContext
- 是否将安全上下文注入到 Katib Trial 训练容器中的 Katib metrics collector sidecar 容器。默认值是
false
trialResources
- 可用作 Trial 模板的资源列表。Trial 资源必须采用此格式:Kind.version.group(例如TFJob.v1.kubeflow.org
)。遵循本指南,以了解如何使 Katib Trial 与您的 Kubernetes CRD 协同工作。默认值是
[Job.v1.batch]
webhookPort
- Katib admission webhooks 的端口号。默认值是
8443
enableLeaderElection
- 是否为 Katib 控制器启用 leader 选举。如果此值为 true,则只有单个 Katib 控制器 Pod 是活动的。默认值是
false
leaderElectionID
- 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
- 指标收集器容器的镜像拉取策略。默认值是
IfNotPresent
resources
- 指标收集器容器的资源。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: -1
waitAllProcesses
- 一个标志,用于定义指标收集器在开始收集指标之前是否应等待 Trial 的训练容器中的所有进程完成。默认值是
false
建议参数
在 .runtime.suggestions
中设置的参数配置 Katib 建议的 Deployment。每个建议都代表您可以在 Katib 实验中使用的 AutoML 算法之一。以下设置是 Suggestion Deployment 的必需项
algorithmName
- Katib 算法名称之一。例如:tpe
image
- Suggestion Deployment 容器的 Docker 镜像。镜像示例:docker.io/kubeflowkatib/<suggestion-name>
对于每种算法,您可以在 Docker 镜像中指定以下建议名称之一
建议名称 支持的算法列表 描述 suggestion-hyperopt
random
,tpe
Hyperopt 优化框架 suggestion-skopt
bayesianoptimization
Scikit-optimize 优化框架 suggestion-goptuna
cmaes
,random
,tpe
,sobol
Goptuna 优化框架 suggestion-optuna
multivariate-tpe
,tpe
,cmaes
,random
,grid
Optuna 优化框架 suggestion-hyperband
hyperband
Katib Hyperband 实现 suggestion-pbt
pbt
Katib PBT 实现 suggestion-enas
enas
Katib ENAS 实现 suggestion-darts
darts
Katib 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/data
persistentVolumeClaimSpec
- Suggestion Deployment 的 PVC 的PVC 规范。默认值是
persistentVolumeClaimSpec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
persistentVolumeSpec
- 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
- 早期停止容器的镜像拉取策略。默认值是
IfNotPresent
resources
- 早期停止容器的资源。resources
的配置与 Katib 指标收集器容器的resources
工作方式相同。
后续步骤
- 如何为各种 Katib 组件设置环境变量。