本页面介绍了平台管理员和机器学习 (ML) 工程师如何创建为基于 Pathways 的工作负载配置的 Google Kubernetes Engine (GKE) 集群。您可以使用 Cluster Toolkit 自动预配预配置的集群,也可以使用 Google Cloud CLI 手动创建集群。
准备工作
在继续操作之前,请先满足以下前提条件:
- 安装 gcloud CLI。
- 安装
kubectl和gke-gcloud-auth-plugin。 - 如果您使用 Cluster Toolkit,请设置 Cluster Toolkit 并将其更新到最新版本。
- 启用 Kubernetes Engine API。
- 验证您是否有足够的 TPU 配额或 TPU 预留,可用于要创建的 TPU 切片。
设置本地环境
使用您的 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
按照部署 GKE TPU v6e 集群中的说明部署 GKE TPU 集群。如需简要了解所有 TPU 部署选项,请参阅 Cloud TPU 部署概览。
配置部署蓝图时,请执行以下操作:
- 将
enable_pathways_for_tpus设置为true(在 Cluster Toolkit TPU 蓝图中默认启用)。此设置会自动为 Pathways 控制器预配所需的cpu-npCPU 节点池 (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 使用选项。
- 将
验证集群节点的
STATUS是否为Ready:kubectl get nodes创建集群后,您可以使用
gcluster job submit命令以及--pathways和--pathways-gcs-location标志提交 Pathways 工作负载。如需了解详情,请参阅使用 Pathways 运行工作负载。
gcloud
如需创建 GKE 集群并将其设置为运行 Pathways 工作负载,请按照以下步骤操作:
设置以下环境变量:
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 个节点。
使用
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}使用
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标志。为 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获取集群的凭据,并为
kubectl设置默认命名空间:gcloud container clusters get-credentials ${CLUSTER} \ --zone=${ZONE} \ --project=${PROJECT} \ && kubectl config set-context --current --namespace=default如需在 GKE 集群上使用 Pathways 架构,请安装
JobSetAPI:kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/v0.12.0/manifests.yaml验证节点的
STATUS为Ready,并且jobset-controller-managerpod 的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}