如何使用 Katib Config

Katib 配置概览以及如何更新值

本指南描述了 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 组件的设置

  1. Katib 证书生成器:certGenerator

  2. 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 集群请求 cpumemoryephemeral-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-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/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 工作方式相同。

后续步骤

反馈

此页面有帮助吗?


上次修改时间 2024 年 10 月 1 日:Update katib-config.md (#3888) (4115c6a)