为 ML 诊断配置 GKE

如果您使用 Google Kubernetes Engine (GKE) 来处理机器学习工作负载,请按照本指南配置 GKE 集群并安装所需的 GKE 制品。

工作负载的配置取决于您使用的是按需分析还是程序化分析

如果您使用的 GKE 版本高于 1.35.0-gke.3065000,则只需运行一条 gcloud CLI 命令即可为 ML 诊断设置 GKE 集群。如需了解详情,请参阅使用 gcloud CLI 进行设置

对于低于 1.35.0-gke.3065000 的 GKE 版本,您需要手动配置 GKE 集群,以安装 cert-managerinjection-webhookconnection-operator 制品。如需了解详情,请参阅手动安装

使用 gcloud CLI 进行设置

对于高于 1.35.0-gke.3065000 的 GKE 版本,请使用以下 gcloud CLI 命令之一将所需的 ML 诊断组件(connection-operator 和 injection-webhook)部署到您的 GKE 集群中。

对于新的 GKE 集群:

gcloud beta container clusters create CLUSTER_NAME --enable-managed-mldiagnostics

对于现有 GKE 集群:

gcloud beta container clusters update CLUSTER_NAME --enable-managed-mldiagnostics

如需停用 ML 诊断,请使用以下方法:

gcloud beta container clusters update CLUSTER_NAME --no-enable-managed-mldiagnostics

您还可以通过 GKE Google Cloud 控制台启用 gcloud CLI 命令:

  • 对于新的 GKE 集群,请前往功能管理器 > 托管式机器学习诊断

    前往 GKE 受管机器学习诊断

  • 对于现有的 GKE 集群,请前往集群,选择集群名称,前往修改,然后在功能下修改受管理的机器学习诊断

如需详细了解用于为机器学习诊断设置 GKE 集群的 gcloud CLI 命令,请参阅以下 API 参考文档中的 enable-managed-mldiagnostics 标志:

手动安装

对于 1.35.0-gke.3065000 之前的 GKE 版本,您需要手动配置 GKE 集群以安装以下内容:

  • cert-managerinjection-webhook 的前提条件。
  • injection-webhook:向 SDK 提供所需的元数据。它支持常见的 ML Kubernetes 工作负载,例如 JobSetRayJobLeaderWorkerSet
  • connection-operator:用于在 GKE 上进行按需分析。 将 connection-operatorinjection-webhook 一起部署到 GKE 集群中,将在您触发按需捕获时,向运行性能分析服务器的目标 pod 初始化性能分析请求。

如需详细了解如何为 Google Kubernetes Engine 进行设置,请参阅配置 Google Kubernetes Engine 集群

Cert-manager

cert-manager 可作为集群的证书控制器,确保应用安全无虞,并且证书不会意外过期。

使用 Helm 安装以下内容:

helm repo add jetstack https://charts.jetstack.io
helm repo update

helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.13.0 \
  --set installCRDs=true \
  --set global.leaderElection.namespace=cert-manager \
  --timeout 10m

注入 webhook

injection-webhook 将元数据传递到 SDK。使用 helm upgrade --install 进行首次安装或升级现有安装。

使用 Helm 安装以下内容:

helm upgrade --install mldiagnostics-injection-webhook \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.25.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-injection-webhook

Connection-operator

connection-operator 可在 GKE 上启用按需分析。使用下表查找正确的 mldiagnostics-connection-operator 版本:

JAX 版本 Helm 图表版本
0.8.x 0.24.0
0.9.x+ 0.24.0+

使用 Helm 安装所需版本。

对于 JAX 0.8.x:

helm upgrade --install mldiagnostics-connection-operator \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.24.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-connection-operator \
  --set 'mldiagnosticsConnectionOperator.controller.args={--metrics-bind-address=:8443,--health-probe-bind-address=:8081,--sidecar-timeout=65m,--disable-hostname-override}'

对于 JAX 0.9.x 及更高版本:

helm upgrade --install mldiagnostics-connection-operator \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.24.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-connection-operator

标记工作负载

对于程序化分析,您需要触发 injection-webhook 将元数据注入到 pod 中。在部署工作负载之前,请使用 managed-mldiagnostics-gke=true 为工作负载或其命名空间添加标签:

  • 为工作负载添加标签。为 JobsetLWSRayJob 工作负载添加标签,这将为该特定工作负载启用 webhook。以下是 JobSet 工作负载的示例:

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: single-host-tpu-v3-jobset2
      namespace: default
      labels:
        managed-mldiagnostics-gke: "true"
    
  • 为命名空间添加标签。这将为相应命名空间中的所有 JobsetLWSRayJob 工作负载启用 webhook。

    kubectl create namespace ai-workloads
    kubectl label namespace ai-workloads managed-mldiagnostics-gke=true