本页面介绍了如何创建自己的 AI 优化型 Google Kubernetes Engine (GKE) 集群,该集群使用 A4X、A4、A3 Ultra、A3 Mega 和 A3 High(8 个 GPU)虚拟机 (VM) 来支持 AI 和机器学习工作负载。
A4X、A4、A3 Ultra、A3 Mega 和 A3 High(8 个 GPU)机器系列旨在让您能够运行大规模 AI/机器学习集群,并提供有针对性的工作负载放置、高级集群维护控制和拓扑感知调度等功能。如需了解详情,请参阅集群管理概览。
GKE 提供了一个单一的平台界面,可运行各种工作负载,满足组织的需求。这包括高性能分布式预训练、模型微调、模型推理、应用服务和支持服务。GKE 可减轻管理多个平台的运营负担。
选择如何创建 AI 优化型 GKE 集群
以下每种集群创建选项在集群配置和工作负载调度方面都提供了不同程度的便利性和灵活性:
创建集群,并为计算、存储和网络资源使用默认配置,同时启用 GPUDirect RDMA-over-Converged-Ethernet (RoCE):
- 使用 Cluster Toolkit 快速创建可用于生产环境的 GKE 集群。
- 使用加速处理套件 (XPK) 快速创建 GKE 集群,以进行概念验证和测试。
或者,您也可以手动创建 GKE 集群,以便精确自定义或扩展现有生产 GKE 环境。如需手动创建 AI 优化型 GKE 集群,请参阅以下页面之一:
- A4X:创建使用 A4X 的自定义 AI 优化型 GKE 集群。
- A4 或 A3 Ultra:创建使用 A4 或 A3 Ultra 的自定义 AI 优化型 GKE 集群。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
- 验证您是否拥有创建和管理 GKE 集群及关联服务账号所需的权限:
- Kubernetes Engine Admin (
roles/container.admin) - Compute Admin (
roles/compute.admin) - Storage Admin (
roles/storage.admin) - Project IAM Admin (
roles/resourcemanager.projectIamAdmin) - Service Account Admin (
roles/iam.serviceAccountAdmin) - Service Account User (
roles/iam.serviceAccountUser) - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) - Role Administrator (
roles/iam.roleAdmin) - Secret Manager Secret Version Manager (
roles/secretmanager.secretVersionManager)
- Kubernetes Engine Admin (
选择使用选项并获取容量
选择使用选项。您可以根据自己获取和使用 GPU 资源的方式做出选择。如需了解详情,请参阅选择消费选项。
对于 GKE,在选择使用选项时,请考虑以下其他信息:
- A4X 虚拟机无法通过灵活启动进行预配。
- 如需详细了解灵活启动(预览版)和 GKE,请参阅灵活启动的 GPU 可获取性简介。
- 灵活启动使用尽力而为的紧凑放置。如需检查拓扑,请参阅查看 GKE 集群中节点的物理拓扑。
- 只有在配置紧凑放置时,才能在使用 Spot 虚拟机时获取拓扑信息。
获取容量。每种使用选项的容量获取流程各不相同。
如需了解所选消耗选项的流程,请参阅容量概览。
要求
AI 优化型 GKE 集群必须满足以下要求:
对于 A4X,请确保您使用的是 GKE 1.33.4-gke.1036000 版或更高版本(适用于 1.33 或更高版本)。或者,对于 1.32,请使用 GKE 1.32.8-gke.1108000 版或更高版本。这些版本可确保 A4X 使用以下内容:
- R580,A4X 的最低 GPU 驱动程序版本。
- 基于相干驱动程序的内存管理 (CDMM),默认情况下处于启用状态。NVIDIA 建议 Kubernetes 集群启用此模式,以解决内存报告过多的问题。借助 CDMM,可以通过驱动程序(而非操作系统 [OS])来管理 GPU 内存。此方法有助于避免操作系统在线使用 GPU 内存,并将 GPU 内存作为非统一内存访问 (NUMA) 节点公开给操作系统。启用 CDMM 时,不支持多实例 GPU。如需详细了解 CDMM,请参阅硬件和软件支持。
- GPUDirect RDMA,建议启用此功能,以便 A4X 节点池使用 A4X 的网络功能。
请确保您使用的 GPU 驱动程序版本不低于最低版本,具体取决于机器类型:
- A4X:A4X 虚拟机中的 GB200 GPU 至少需要 R580 GPU 驱动程序版本。请参阅上文提及的版本要求。
- A4:A4 虚拟机中的 B200 GPU 需要至少 R570 GPU 驱动程序版本。默认情况下,GKE 会自动在运行 A4 所需最低版本(1.32.1-gke.1729000 或更高版本)的所有 A4 节点上安装此驱动程序版本。
- A3 Ultra:A3 Ultra 虚拟机中的 H200 GPU 需要最低 R550 GPU 驱动程序版本,该版本在 GKE 1.31 中以
latest驱动程序版本提供。对于 A3 Ultra,您必须使用 GKE 1.31 设置gpu-driver-version=latest。对于 GKE 1.31.5-gke.1169000 版及更高版本,GKE 默认会在 A3 Ultra 节点上自动安装 R550 GPU 驱动程序版本。
对于 A3 Ultra 节点池,您必须将磁盘类型设置为
hyperdisk-balanced。如需使用 GPUDirect RDMA,请根据机器类型使用以下最低版本:
- A4X:请参阅上文提及的版本要求。
- A4:使用 1.32.2-gke.1475000 或更高版本。
- A3 Ultra:使用 1.31.4-gke.1183000 或更高版本。
如需使用 GPUDirect RDMA,GKE 节点必须使用 Container-Optimized OS 节点映像。不支持 Ubuntu 和 Windows 节点映像。
您必须使用受预留约束的预配模型来创建包含 A4X 的集群。不支持其他配置模型。
创建集群
按照以下说明使用 Cluster Toolkit 或 XPK 创建集群。
使用 Cluster Toolkit 创建集群
本部分将引导您完成集群创建流程,确保您的项目遵循最佳实践并满足 AI 优化型 GKE 集群的要求。
A4X
- 启动 Cloud Shell。您可以使用其他环境;不过,我们建议使用 Cloud Shell,因为 Cluster Toolkit 的依赖项已预安装。如果您不想使用 Cloud Shell,请按照说明安装依赖项,以准备其他环境。
从 Git 代码库克隆 Cluster Toolkit:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git安装 Cluster Toolkit:
cd cluster-toolkit && git checkout main && make创建一个 Cloud Storage 存储桶来存储 Terraform 部署的状态:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning执行以下变量替换操作:
BUCKET_NAME:新 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION_TERRAFORM_STATE:您希望存储 Terraform 部署状态的计算区域。
在 GitHub 代码库中的
examples/gke-a4x/gke-a4x-deployment.yaml蓝图中,填写terraform_backend_defaults和vars部分中的以下设置,以匹配部署的特定值:DEPLOYMENT_NAME:部署的唯一名称,长度必须介于 6 到 30 个字符之间。如果部署名称在项目中不是唯一的,则集群创建会失败。默认值为gke-a4x。BUCKET_NAME:您在上一步中创建的 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION:集群的计算区域。COMPUTE_ZONE:A4X 机器节点池的计算可用区。请注意,此可用区应与预留中机器可用的可用区相匹配。NODE_COUNT:集群节点池中的 A4X 节点数,必须为 18 个或更少。我们建议使用 18 个节点,以便通过 NVLink 网域在一个子块中获得1x72的 GPU 拓扑。IP_ADDRESS/SUFFIX:您要允许连接到集群的 IP 地址范围。此 CIDR 块必须包含您要用于调用 Terraform 的机器的 IP 地址。如需了解详情,请参阅授权网络的工作原理。对于
extended_reservation字段,请使用以下值之一,具体取决于您在预配节点池时是否要定位预留中的特定块:- 如需将节点池放置在预留中的任意位置,请提供预留的名称 (
RESERVATION_NAME)。 如需指定预留中的特定块,请使用以下格式的预留名称和块名称:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
如果您不知道预留中有哪些可用块,请参阅查看预留拓扑。
- 如需将节点池放置在预留中的任意位置,请提供预留的名称 (
为系统和 A4X 节点池的每个节点设置启动磁盘大小。您需要的磁盘大小取决于您的使用场景。例如,如果您使用磁盘作为缓存来减少重复拉取映像的延迟时间,则可以设置更大的磁盘大小来容纳框架、模型或容器映像:
SYSTEM_NODE_POOL_DISK_SIZE_GB:系统节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为200。A4X_NODE_POOL_DISK_SIZE_GB:A4X 节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。
如需修改高级设置,请修改
examples/gke-a4x/gke-a4x.yaml文件。您可以选择在集群上启用 Cluster Health Scanner (CHS)。CHS 会运行测试来检查 GPU 集群的健康状况,以验证集群是否已准备好运行工作负载。如需启用 CHS,请在
examples/gke-a4x/gke-a4x-deployment.yaml文件中进行以下更改:在
vars代码块中,将enable_periodic_health_checks字段设置为true。默认情况下,健康检查会在每周日太平洋标准时间 (PST) 凌晨 12:00 运行。如果您想更改此设置,请在
vars块中将health_check_schedule字段设置为合适的值(采用 cron 格式)。
以 cron 格式安排时间:none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)
生成应用默认凭证 (ADC),以向 Terraform 提供访问权限。如果您使用的是 Cloud Shell,可以运行以下命令:
gcloud auth application-default login部署蓝图以使用 A4X 机器类型预配 GKE 基础架构:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a4x/gke-a4x-deployment.yaml \ examples/gke-a4x/gke-a4x.yaml出现提示时,选择应用以部署蓝图。
- 该蓝图会创建 VPC 网络、GPU RDMA VPC 网络、服务账号、集群和节点池。
- 为了支持蓝图中的
fio-bench-job-template作业模板,系统会创建Google Cloud 存储分区、网络存储和永久性卷资源。
A4
- 启动 Cloud Shell。您可以使用其他环境;不过,我们建议使用 Cloud Shell,因为 Cluster Toolkit 的依赖项已预安装。如果您不想使用 Cloud Shell,请按照说明安装依赖项,以准备其他环境。
从 Git 代码库克隆 Cluster Toolkit:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git安装 Cluster Toolkit:
cd cluster-toolkit && git checkout main && make创建一个 Cloud Storage 存储桶来存储 Terraform 部署的状态:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning执行以下变量替换操作:
BUCKET_NAME:新 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION_TERRAFORM_STATE:您希望存储 Terraform 部署状态的计算区域。
您需要修改哪些文件才能创建集群取决于您为部署使用的使用选项。选择与您的使用选项的配置模式对应的标签页。
受预留约束
在 GitHub 代码库中的
examples/gke-a4/gke-a4-deployment.yaml蓝图中,填写terraform_backend_defaults和vars部分中的以下设置,以匹配部署的特定值:DEPLOYMENT_NAME:部署的唯一名称,长度必须介于 6 到 30 个字符之间。如果部署名称在项目中不是唯一的,则集群创建会失败。默认值为gke-a4。BUCKET_NAME:您在上一步中创建的 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION:集群的计算区域。COMPUTE_ZONE:A4 机器节点池的计算可用区。请注意,此可用区应与预留中机器可用的可用区相匹配。NODE_COUNT:集群中的 A4 节点数。IP_ADDRESS/SUFFIX:您要允许连接到集群的 IP 地址范围。此 CIDR 块必须包含您要用于调用 Terraform 的机器的 IP 地址。如需了解详情,请参阅授权网络的工作原理。对于
reservation字段,请使用以下值之一,具体取决于您在预配节点池时是否要定位预留中的特定块:- 如需将节点池放置在预留中的任意位置,请提供预留的名称 (
RESERVATION_NAME)。 如需指定预留中的特定块,请使用以下格式的预留名称和块名称:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
如果您不知道预留中有哪些可用块,请参阅查看预留拓扑。
- 如需将节点池放置在预留中的任意位置,请提供预留的名称 (
为系统和 A4 节点池的每个节点设置启动磁盘大小。您需要的磁盘大小取决于您的使用场景。例如,如果您使用磁盘作为缓存来减少重复拉取映像的延迟时间,则可以设置更大的磁盘大小来容纳框架、模型或容器映像:
SYSTEM_NODE_POOL_DISK_SIZE_GB:系统节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。A4_NODE_POOL_DISK_SIZE_GB:A4 节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。
如需修改高级设置,请修改
examples/gke-a4/gke-a4.yaml。灵活启动
在 GitHub 代码库中的
examples/gke-a4/gke-a4-deployment.yaml蓝图中,填写terraform_backend_defaults和vars部分中的以下设置,以匹配部署的特定值:DEPLOYMENT_NAME:部署的唯一名称,长度必须介于 6 到 30 个字符之间。如果部署名称在项目中不是唯一的,则集群创建会失败。默认值为gke-a4。BUCKET_NAME:您在上一步中创建的 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION:集群的计算区域。COMPUTE_ZONE:A4 机器节点池的计算可用区。- 移除了
static_node_count。 IP_ADDRESS/SUFFIX:您要允许连接到集群的 IP 地址范围。此 CIDR 块必须包含您要用于调用 Terraform 的机器的 IP 地址。如需了解详情,请参阅授权网络的工作原理。- 移除
reservation字段,并将该字段替换为enable_flex_start: true。如果您还想使用排队预配,请在下一行中添加enable_queued_provisioning: true。如需了解详情,请参阅使用启用了灵活启动(带已排队的预配)的节点池。 为系统和 A4 节点池的每个节点设置启动磁盘大小。您需要的磁盘大小取决于您的使用场景。例如,如果您使用磁盘作为缓存来减少重复拉取映像的延迟时间,则可以设置更大的磁盘大小来容纳框架、模型或容器映像:
SYSTEM_NODE_POOL_DISK_SIZE_GB:系统节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。A4_NODE_POOL_DISK_SIZE_GB:A4 节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。
在 GitHub 代码库中的
examples/gke-a4/gke-a4.yaml蓝图中,进行以下更改:- 在
vars代码块中,移除static_node_count。 - 在
vars块中,确保version_prefix编号为"1.32."或更高。如需在 GKE 中使用灵活启动,您的集群必须使用 1.32.2-gke.1652000 版或更高版本。 - 在
vars代码块中,将整个reservation代码块(包括reservation行本身)替换为enable_flex_start: true和可选的enable_queued_provisioning: true。 - 在
vars代码块中,如果您不需要排队配置,请移除以下行:kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl"))。 - 在
id: a4-pool下,移除以下行:static_node_count: $(vars.static_node_count)。 在
id: a4-pool下,移除reservation_affinity代码块。将此块替换为以下代码行:enable_flex_start: $(vars.enable_flex_start)auto_repair: false- 对于排队预配,如果您想启用它,请添加以下额外的行:
enable_queued_provisioning: $(vars.enable_queued_provisioning)autoscaling_total_min_nodes: 0
在
id: workload-manager-install下,移除以下代码块:kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(a3-ultragpu-pool.static_gpu_count) accelerator_type: $(vars.accelerator_type)对于灵活启动(带已排队的预配),请执行以下操作:
将
gpu_nominal_quota: NOMINAL_QUOTA添加到vars代码块。gpu_nominal_quota值用于在ClusterQueue规范中设置 GPU 的nominalQuota(请参阅下文中有关设置ClusterQueue的步骤)。在此示例中,只有当 GPU 请求的总和小于或等于NOMINAL_QUOTA值时,ClusterQueue才会接受工作负载。如需详细了解ClusterQueue,请参阅以下 Kueue 集群队列文档。将
kueue代码块更新为以下内容:kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(vars.gpu_nominal_quota)将
kueue-configuration.yaml.tftpl文件的内容替换为以下内容:apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: "default-flavor" --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: dws-prov spec: controllerName: kueue.x-k8s.io/provisioning-request parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: dws-config --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ProvisioningRequestConfig metadata: name: dws-config spec: provisioningClassName: queued-provisioning.gke.io managedResources: - nvidia.com/gpu --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: "dws-cluster-queue" spec: namespaceSelector: {} resourceGroups: - coveredResources: ["nvidia.com/gpu"] flavors: - name: "default-flavor" resources: - name: "nvidia.com/gpu" nominalQuota: ${num_gpus} admissionChecks: - dws-prov --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: namespace: "default" name: "dws-local-queue" spec: clusterQueue: "dws-cluster-queue" ---
在
id: job-template下,将node_count变量替换为2。
- 在
Spot
在 GitHub 代码库中的
examples/gke-a4/gke-a4-deployment.yaml蓝图中,填写terraform_backend_defaults和vars部分中的以下设置,以匹配部署的特定值:DEPLOYMENT_NAME:部署的唯一名称,长度必须介于 6 到 30 个字符之间。如果部署名称在项目中不是唯一的,则集群创建会失败。默认值为gke-a4。BUCKET_NAME:您在上一步中创建的 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION:集群的计算区域。COMPUTE_ZONE:A4 机器节点池的计算可用区。STATIC_NODE_COUNT:集群中的 A4 节点数。IP_ADDRESS/SUFFIX:您要允许连接到集群的 IP 地址范围。此 CIDR 块必须包含您要用于调用 Terraform 的机器的 IP 地址。如需了解详情,请参阅授权网络的工作原理。- 将整个
reservation块(包括reservation行本身)替换为spot: true。 为系统和 A4 节点池的每个节点设置启动磁盘大小。您需要的磁盘大小取决于您的使用场景。例如,如果您使用磁盘作为缓存来减少重复拉取映像的延迟时间,则可以设置更大的磁盘大小来容纳框架、模型或容器映像:
SYSTEM_NODE_POOL_DISK_SIZE_GB:系统节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。A4_NODE_POOL_DISK_SIZE_GB:A4 节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。
在 GitHub 代码库中的
examples/gke-a4/gke-a4.yaml蓝图中,进行以下更改:- 在
vars代码块中,将整个reservation代码块(包括reservation行本身)替换为spot: true。 在
id: a4-pool下,移除reservation_affinity代码块。将此块替换为以下行:spot: $(vars.spot)
- 在
您可以选择在集群上启用 Cluster Health Scanner (CHS)。CHS 会运行测试来检查 GPU 集群的健康状况,以验证集群是否已准备好运行工作负载。如需启用 CHS,请在
examples/gke-a4/gke-a4-deployment.yaml文件中进行以下更改:在
vars代码块中,将enable_periodic_health_checks字段设置为true。默认情况下,健康检查会在每个周日太平洋标准时间 (PST) 凌晨 12:00 运行。如果您想更改此设置,请在
vars块中将health_check_schedule字段设置为合适的值(采用 cron 格式)。
以 cron 格式安排时间:none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)
生成应用默认凭证 (ADC),以向 Terraform 提供访问权限。如果您使用的是 Cloud Shell,可以运行以下命令:
gcloud auth application-default login部署蓝图以使用 A4 机器类型预配 GKE 基础架构:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a4/gke-a4-deployment.yaml \ examples/gke-a4/gke-a4.yaml出现提示时,选择应用以部署蓝图。
- 该蓝图会创建 VPC 网络、GPU RDMA VPC 网络、服务账号、集群和节点池。
- 为了支持蓝图中的
fio-bench-job-template作业模板,系统会创建Google Cloud 存储分区、网络存储和永久性卷资源。
A3 Ultra
- 启动 Cloud Shell。您可以使用其他环境;不过,我们建议使用 Cloud Shell,因为 Cluster Toolkit 的依赖项已预安装。如果您不想使用 Cloud Shell,请按照说明安装依赖项,以准备其他环境。
从 Git 代码库克隆 Cluster Toolkit:
cd ~ git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git安装 Cluster Toolkit:
cd cluster-toolkit && git checkout main && make创建一个 Cloud Storage 存储桶来存储 Terraform 部署的状态:
gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=STANDARD \ --project=PROJECT_ID \ --location=COMPUTE_REGION_TERRAFORM_STATE \ --uniform-bucket-level-access gcloud storage buckets update gs://BUCKET_NAME --versioning执行以下变量替换操作:
BUCKET_NAME:新 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION_TERRAFORM_STATE:您希望存储 Terraform 部署状态的计算区域。
您需要修改哪些文件才能创建集群取决于您为部署使用的使用选项。选择与您的使用选项的配置模式对应的标签页。
受预留约束
在 GitHub 代码库中的
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml蓝图中,替换terraform_backend_defaults和vars部分中的以下变量,以与部署的特定值相匹配:DEPLOYMENT_NAME:部署的唯一名称,长度必须介于 6 到 30 个字符之间。如果部署名称在项目中不是唯一的,则集群创建会失败。BUCKET_NAME:您在上一步中创建的 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION:集群的计算区域。COMPUTE_ZONE:A3 Ultra 机器的节点池的计算可用区。请注意,此可用区应与预留中机器可用的可用区相匹配。NODE_COUNT:集群中的 A3 Ultra 节点数。IP_ADDRESS/SUFFIX:您要允许连接到集群的 IP 地址范围。此 CIDR 块必须包含您要用于调用 Terraform 的机器的 IP 地址。如需了解详情,请参阅授权网络的工作原理。对于
reservation字段,请使用以下选项之一,具体取决于您在预配节点池时是否要定位预留中的特定块:- 如需将节点池放置在预留中的任意位置,请提供预留的名称 (
RESERVATION_NAME)。 如需指定预留中的特定块,请使用以下格式的预留名称和块名称:
RESERVATION_NAME/reservationBlocks/BLOCK_NAME
如果您不知道预留中有哪些可用块,请参阅查看预留拓扑。
- 如需将节点池放置在预留中的任意位置,请提供预留的名称 (
为系统和 A3 Ultra 节点池的每个节点设置启动磁盘大小。您需要的磁盘大小取决于您的使用场景。例如,如果您使用磁盘作为缓存来减少重复拉取映像的延迟时间,则可以设置更大的磁盘大小来容纳框架、模型或容器映像:
SYSTEM_NODE_POOL_DISK_SIZE_GB:系统节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。A3ULTRA_NODE_POOL_DISK_SIZE_GB:A3 Ultra 节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。
如需修改高级设置,请修改
examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml。灵活启动
在 GitHub 代码库中的
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml蓝图中,替换terraform_backend_defaults和vars部分中的以下变量,以与部署的特定值相匹配:DEPLOYMENT_NAME:部署的唯一名称,长度必须介于 6 到 30 个字符之间。如果部署名称在项目中不是唯一的,则集群创建会失败。BUCKET_NAME:您在上一步中创建的 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION:集群的计算区域。COMPUTE_ZONE:A3 Ultra 机器节点池的计算可用区。- 移除了
static_node_count。 IP_ADDRESS/SUFFIX:您要允许连接到集群的 IP 地址范围。此 CIDR 块必须包含您要用于调用 Terraform 的机器的 IP 地址。如需了解详情,请参阅授权网络的工作原理。- 移除
reservation字段,并将该字段替换为enable_flex_start: true。如果您还想使用排队预配,请在下一行中添加enable_queued_provisioning: true。如需了解详情,请参阅使用启用了灵活启动(带已排队的预配)的节点池。 为系统节点池和 A3 Ultra 节点池的每个节点设置启动磁盘大小。您需要的磁盘大小取决于您的使用场景。例如,如果您使用磁盘作为缓存来减少重复拉取映像的延迟时间,则可以设置更大的磁盘大小来容纳框架、模型或容器映像:
SYSTEM_NODE_POOL_DISK_SIZE_GB:系统节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。A3ULTRA_NODE_POOL_DISK_SIZE_GB:A3 Ultra 节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。
在 GitHub 代码库中的
examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml蓝图中,进行以下更改:- 在
vars代码块中,移除static_node_count。 - 在
vars代码块中,将version_prefix数字更新为"1.32."或更高值。如需在 GKE 中使用灵活启动,您的集群必须使用 1.32.2-gke.1652000 版或更高版本。 - 在
vars代码块中,将整个reservation代码块(包括reservation行本身)替换为enable_flex_start: true和可选的enable_queued_provisioning: true。 - 在
vars代码块中,移除以下行:kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl"))。 - 在
id: a3-ultragpu-pool下,移除以下行:static_node_count: $(vars.static_node_count)。 在
id: a3-ultragpu-pool下,移除reservation_affinity代码块。将此块替换为以下代码行:enable_flex_start: $(vars.enable_flex_start)auto_repair: false- 对于排队预配,如果您想启用它,请添加以下额外的行:
enable_queued_provisioning: $(vars.enable_queued_provisioning)autoscaling_total_min_nodes: 0
在
id: workload-manager-install下,移除以下代码块:config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(a4-pool.static_gpu_count) accelerator_type: $(vars.accelerator_type)对于灵活启动(带已排队的预配),请按以下三个步骤操作:
将
gpu_nominal_quota: NOMINAL_QUOTA添加到vars代码块。gpu_nominal_quota值用于在ClusterQueue规范中设置 GPU 的nominalQuota。在此示例中,只有当 GPU 请求的总和小于或等于NOMINAL_QUOTA值时,ClusterQueue才会接受工作负载。如需详细了解ClusterQueue,请参阅以下 Kueue 集群队列文档。将
kueue代码块更新为以下内容:kueue: install: true config_path: $(vars.kueue_configuration_path) config_template_vars: num_gpus: $(vars.gpu_nominal_quota)将
kueue-configuration.yaml.tftpl文件的内容替换为以下内容:apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: "default-flavor" --- apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: dws-prov spec: controllerName: kueue.x-k8s.io/provisioning-request parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: dws-config --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ProvisioningRequestConfig metadata: name: dws-config spec: provisioningClassName: queued-provisioning.gke.io managedResources: - nvidia.com/gpu --- apiVersion: kueue.x-k8s.io/v1beta1 kind: ClusterQueue metadata: name: "dws-cluster-queue" spec: namespaceSelector: {} resourceGroups: - coveredResources: ["nvidia.com/gpu"] flavors: - name: "default-flavor" resources: - name: "nvidia.com/gpu" nominalQuota: ${num_gpus} admissionChecks: - dws-prov --- apiVersion: kueue.x-k8s.io/v1beta1 kind: LocalQueue metadata: namespace: "default" name: "dws-local-queue" spec: clusterQueue: "dws-cluster-queue" ---
在
id: job-template字段中,将node_count变量替换为2。
- 在
Spot
在 GitHub 代码库中的
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml蓝图中,在terraform_backend_defaults和vars部分填写以下设置,以与部署的特定值相匹配:DEPLOYMENT_NAME:部署的唯一名称,长度必须介于 6 到 30 个字符之间。如果部署名称在项目中不是唯一的,则集群创建会失败。BUCKET_NAME:您在上一步中创建的 Cloud Storage 存储桶的名称。PROJECT_ID:您的 Google Cloud 项目 ID。COMPUTE_REGION:集群的计算区域。COMPUTE_ZONE:A3 Ultra 机器节点池的计算可用区。STATIC_NODE_COUNT:集群中的 A3 Ultra 节点数。IP_ADDRESS/SUFFIX:您要允许连接到集群的 IP 地址范围。此 CIDR 块必须包含您要用于调用 Terraform 的机器的 IP 地址。如需了解详情,请参阅授权网络的工作原理。- 将整个
reservation块(包括reservation行本身)替换为spot: true。 为系统节点池和 A3 Ultra 节点池的每个节点设置启动磁盘大小。您需要的磁盘大小取决于您的使用场景。例如,如果您使用磁盘作为缓存来减少重复拉取映像的延迟时间,则可以设置更大的磁盘大小来容纳框架、模型或容器映像:
SYSTEM_NODE_POOL_DISK_SIZE_GB:系统节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。A3ULTRA_NODE_POOL_DISK_SIZE_GB:A3 Ultra 节点池中每个节点的启动磁盘的大小。允许的最小磁盘大小为10。默认值为100。
在 GitHub 代码库中的
examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml蓝图中,进行以下更改:- 在
vars代码块中,将整个reservation代码块(包括reservation行本身)替换为spot: true。 在
id: a3-ultragpu-pool下,移除reservation_affinity代码块。将此块替换为以下行:spot: $(vars.spot)
- 在
您可以选择在集群上启用 Cluster Health Scanner (CHS)。CHS 会运行测试来检查 GPU 集群的健康状况,以验证集群是否已准备好运行工作负载。如需启用 CHS,请在
examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml文件中进行以下更改:在
vars代码块中,将enable_periodic_health_checks字段设置为true。默认情况下,健康检查会在每个周日太平洋标准时间 (PST) 凌晨 12:00 运行。如果您想更改此设置,请在
vars块中将health_check_schedule字段设置为合适的值(采用 cron 格式)。
以 cron 格式安排时间:none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)
生成应用默认凭证 (ADC),以向 Terraform 提供访问权限。如果您使用的是 Cloud Shell,可以运行以下命令:
gcloud auth application-default login部署蓝图以使用 A3 Ultra 机器类型预配 GKE 基础架构:
cd ~/cluster-toolkit ./gcluster deploy -d \ examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml \ examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml出现提示时,选择应用以部署蓝图。
- 该蓝图会创建 VPC 网络、GPU RDMA VPC 网络、服务账号、集群和节点池。
- 为了支持蓝图中的
fio-bench-job-template作业模板,系统会创建Google Cloud 存储分区、网络存储和永久性卷资源。
使用 XPK 创建集群并运行工作负载
借助加速处理套件 (XPK),您可以快速预配和使用集群。XPK 可生成预配置的、经过训练优化的基础架构,非常适合以工作负载执行为主要关注点的情况。
使用 XPK 创建集群并运行采用 A3 Ultra 虚拟机的作业:
- 安装所需的工具,以满足 XPK 前提条件。
- 复制 XPK 的最新标记版本的版本号,例如“v0.8.0”。在以下命令中,将
XPK_TAG替换为最新的 XPK 版本号。 在 Linux 计算机上打开一个 shell 窗口,然后输入以下命令以从 Git 代码库克隆 XPK 并安装所需的软件包:
## Setup virtual environment. VENV_DIR=~/venvp3 python3 -m venv $VENV_DIR source $VENV_DIR/bin/activate ## Clone the repository. git clone --branch XPK_TAG https://github.com/google/xpk.git cd xpk ## Install required packages make install && export PATH=$PATH:$PWD/bin使用 A3 Ultra 虚拟机创建标准集群。您可以使用预留容量来预配集群的节点:
python3 xpk.py cluster create \ --cluster=CLUSTER_NAME \ --device-type=h200-141gb-8 \ --zone=COMPUTE_ZONE \ --project=PROJECT_ID \ --num-nodes=NUM_NODES \ --reservation=RESERVATION_NAME执行以下变量替换操作:
验证是否已成功创建集群:
python3 xpk.py cluster list --zone=COMPUTE_ZONE --project=PROJECT_ID可选:运行工作负载以测试集群环境:
python3 xpk.py workload create \ --workload WORKLOAD_NAME --command "echo goodbye" \ --cluster CLUSTER_NAME \ --device-type=h200-141gb-8 \ --num-nodes=WORKLOAD_NUM_NODES \ --zone=COMPUTE_ZONE \ --project=PROJECT_ID执行以下变量替换操作:
测试网络性能
我们建议您验证已配置集群的功能。为此,请使用 NCCL/gIB 测试,这些测试是针对 Google 环境优化的 NVIDIA Collective Communications Library (NCCL) 测试。
运行可重现的基准测试
您可以在 GKE 上的 A4 和 A3 Ultra 虚拟机上重现大型机器学习开放模型的预训练基准。
每种食谱都提供了完成以下任务的说明:
- 准备环境。
- 运行基准测试。
- 分析基准比较结果。这包括基准测试结果和详细日志,以供进一步分析。
如需查看所有可用的配方,请参阅 GPU 配方 GitHub 代码库。
| 模型 | 框架 | 配方 |
|---|---|---|
| Llama-3.1-70B | MaxText | 32 节点工作负载 |
| Llama-3.1-70B | NeMo | 32 节点工作负载 |
| Mixtral-8-7B | NeMo | 32 节点工作负载 |
清理由 Cluster Toolkit 创建的资源
为避免因本页中使用的资源而产生重复性费用,请清理 Cluster Toolkit 预配的资源,包括 VPC 网络和 GKE 集群:
cd ~/cluster-toolkit
./gcluster destroy CLUSTER_NAME/
将 CLUSTER_NAME 替换为您的集群名称。
对于使用 Cluster Toolkit 创建的集群,集群名称基于 DEPLOYMENT_NAME。
后续步骤
- 如需了解如何使用 TAS 和 Kueue 在 GKE 集群上调度工作负载,请参阅通过拓扑感知调度安排 GKE 工作负载。
- 如需了解如何管理与 GKE 集群和 AI 工作负载相关的常见事件,请参阅管理 AI 优化型 GKE 集群。
- 如需了解如何测试环境以确保设置和优化正确无误,请参阅集群网络优化概览