通过 Pathway 创建 GKE 集群

本页面介绍了平台管理员和机器学习 (ML) 工程师如何创建为基于 Pathways 的工作负载配置的 Google Kubernetes Engine (GKE) 集群。您可以使用 Cluster Toolkit 自动预配预配置的集群,也可以使用 Google Cloud CLI 手动创建集群。

准备工作

在继续操作之前,请先满足以下前提条件:

设置本地环境

使用您的 Google Cloud 凭据登录 gcloud CLI:

gcloud auth login

如果您使用 Cluster Toolkit,还需要生成 Terraform 使用的应用默认凭证 (ADC):

gcloud auth application-default login

创建 GKE 集群

在以下示例中,您将创建一个包含 TPU v6e 2x4 节点池的集群。 您可以使用 Cluster Toolkit 或 gcloud CLI 创建集群。

Cluster Toolkit

  1. 按照部署 GKE TPU v6e 集群中的说明部署 GKE TPU 集群。如需简要了解所有 TPU 部署选项,请参阅 Cloud TPU 部署概览。

    配置部署蓝图时,请执行以下操作:

    • 将 enable_pathways_for_tpus 设置为 true(在 Cluster Toolkit TPU 蓝图中默认启用)。此设置会自动为 Pathways 控制器预配所需的 cpu-np CPU 节点池 (n4-standard-64) 和 Kueue 配置。仅当您未在 kueue_configuration_path 变量中指定自定义 Kueue 配置文件时,Cluster Toolkit 才会应用默认 Pathways Kueue 配置。
    • 将 num_slices 设置为工作负载所需的 TPU 切片节点池数量。
    • 将 tpu_topology 设置为您选择的 TPU 切片拓扑(例如 2x4 或 4x4)。
    • 选择使用选项。默认情况下,TPU v6e 部署文件会使用特定的 TPU 预留,因此请在 reservation_affinity 变量中指定预留名称。如需使用其他使用选项,请参阅 GKE 使用选项。
  2. 验证集群节点的 STATUS 是否为 Ready:

    kubectl get nodes
    

    创建集群后,您可以使用 gcluster job submit 命令以及 --pathways 和 --pathways-gcs-location 标志提交 Pathways 工作负载。如需了解详情,请参阅使用 Pathways 运行工作负载。

gcloud

如需创建 GKE 集群并将其设置为运行 Pathways 工作负载,请按照以下步骤操作:

  1. 设置以下环境变量:

    CLUSTER=GKE_CLUSTER_NAME
    PROJECT=PROJECT_ID
    ZONE=ZONE
    REGION=REGION
    CLUSTER_VERSION=GKE_CLUSTER_VERSION
    PW_CPU_MACHINE_TYPE="n2-standard-64"
    NETWORK=NETWORK
    SUBNETWORK=SUB_NETWORK
    CLUSTER_NODEPOOL_COUNT=3
    TPU_MACHINE_TYPE="ct6e-standard-4t"
    WORKERS_PER_SLICE=2
    TOPOLOGY="2x4"
    NUM_CPU_NODES=1

    替换以下内容:

    • GKE_CLUSTER_NAME:GKE 集群的名称。
    • PROJECT_ID:您的 Google Cloud 项目 ID。
    • ZONE:您在其中创建集群的可用区。 选择提供 TPU v6e 的可用区。如需了解详情,请参阅 Cloud TPU 区域和可用区。
    • REGION(可选):如果您使用区域级集群,则为创建资源的区域。
    • GKE_CLUSTER_VERSION:可选:GKE 集群版本。使用 1.32.2-gke.1475000 或更高版本,并选择标准支持中的版本。如需了解详情,请参阅 GKE 发布时间表。如果您未指定版本,请从以下 gcloud container clusters create 命令中移除 --cluster-version 标志。
    • NETWORK(可选):Virtual Private Cloud (VPC) 网络的名称。在创建集群之前,网络必须已存在。如果您未指定网络,请从以下 gcloud container clusters create 命令中移除 --network 标志。
    • SUB_NETWORK(可选):子网的名称。子网必须在您创建集群之前存在。如果您未指定子网,请从以下 gcloud container clusters create 命令中移除 --subnetwork 标志。

    此示例为其余变量设置了默认值,您可以根据工作负载进行修改:

    • PW_CPU_MACHINE_TYPE:集群的默认节点池以及运行 Pathways 头(Pathways 资源管理器和代理)的 CPU 节点池的机器类型。
    • NUM_CPU_NODES:CPU 节点池中的节点数。
    • CLUSTER_NODEPOOL_COUNT:TPU 切片的数量。每个切片都是一个单独的节点池。
    • TPU_MACHINE_TYPE 和 TOPOLOGY:每个切片的 TPU 机器类型和 TPU 拓扑。
    • WORKERS_PER_SLICE:每个切片中的节点数,即拓扑中的 TPU 芯片数除以每个节点的芯片数。例如,2x4 拓扑有 8 个芯片,ct6e-standard-4t 节点有 4 个芯片,因此每个切片有 2 个节点。
  2. 使用 gcloud container clusters create 命令创建 GKE 集群:

    gcloud container clusters create ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster-version=${CLUSTER_VERSION} \
        --scopes=storage-full,gke-default,cloud-platform \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --network=${NETWORK} \
        --subnetwork=${SUBNETWORK}
    
  3. 使用 gcloud container node-pools create 命令创建 TPU 切片节点池:

    for i in $(seq 1 ${CLUSTER_NODEPOOL_COUNT}); do
        gcloud container node-pools create "tpu-np-${i}" \
            --project=${PROJECT} \
            --zone=${ZONE} \
            --cluster=${CLUSTER} \
            --machine-type=${TPU_MACHINE_TYPE} \
            --num-nodes=${WORKERS_PER_SLICE} \
            --placement-type=COMPACT \
            --tpu-topology=${TOPOLOGY} \
            --scopes=storage-full,gke-default,cloud-platform \
            --workload-metadata=GCE_METADATA
    done
    

    这些命令不针对特定预留。如需使用 TPU 预留,请添加 --reservation-affinity=specific 和 --reservation=RESERVATION_NAME 标志,其中 RESERVATION_NAME 是 TPU 预留的名称。如需使用 Spot 虚拟机,请添加 --spot 标志。

  4. 为 Pathways 头节点创建一个 CPU 节点池,该节点池运行 Pathways 资源管理器和代理。将节点池命名为 cpu-np,以便 gcluster job submit --pathways 命令可以检测到它:

    gcloud container node-pools create cpu-np \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster=${CLUSTER} \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --num-nodes=${NUM_CPU_NODES} \
        --scopes=storage-full,gke-default,cloud-platform \
        --workload-metadata=GCE_METADATA
    
  5. 获取集群的凭据,并为 kubectl 设置默认命名空间:

    gcloud container clusters get-credentials ${CLUSTER} \
        --zone=${ZONE} \
        --project=${PROJECT} \
        && kubectl config set-context --current --namespace=default
    
  6. 如需在 GKE 集群上使用 Pathways 架构,请安装 JobSet API:

    kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/v0.12.0/manifests.yaml
    
  7. 验证节点的 STATUS 为 Ready,并且 jobset-controller-manager pod 的 STATUS 为 Running:

    kubectl get nodes
    kubectl get pods --namespace=jobset-system
    

    输出类似于以下内容:

    NAME                                      STATUS   ROLES    AGE   VERSION
    gke-cluster-cpu-np-12345678-abcd          Ready    <none>   5m    v1.32.2-gke.1475000
    gke-cluster-tpu-np-1-12345678-efgh        Ready    <none>   5m    v1.32.2-gke.1475000
    ...
    NAME                                         READY   STATUS    RESTARTS   AGE
    jobset-controller-manager-6f7b8c9d4-xyz12    1/1     Running   0          2m
    

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请在完成后删除集群:

  • Cluster Toolkit:运行以下命令销毁部署:

    ./gcluster destroy DEPLOYMENT_FOLDER_NAME

    将 DEPLOYMENT_FOLDER_NAME 替换为部署文件夹的名称。

  • gcloud CLI:运行以下命令,删除 GKE 集群及其节点池:

    gcloud container clusters delete ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE}
    

后续步骤