创建具有默认配置的 AI 优化型 GKE 集群

本页面介绍了如何创建自己的 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 集群

以下每种集群创建选项在集群配置和工作负载调度方面都提供了不同程度的便利性和灵活性:

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 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)

选择使用选项并获取容量

  1. 选择使用选项。您可以根据自己获取和使用 GPU 资源的方式做出选择。如需了解详情,请参阅选择消费选项

    对于 GKE,在选择使用选项时,请考虑以下其他信息:

  2. 获取容量。每种使用选项的容量获取流程各不相同。

    如需了解所选消耗选项的流程,请参阅容量概览

要求

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 ToolkitXPK 创建集群。

使用 Cluster Toolkit 创建集群

本部分将引导您完成集群创建流程,确保您的项目遵循最佳实践并满足 AI 优化型 GKE 集群的要求

A4X

  1. 启动 Cloud Shell。您可以使用其他环境;不过,我们建议使用 Cloud Shell,因为 Cluster Toolkit 的依赖项已预安装。如果您不想使用 Cloud Shell,请按照说明安装依赖项,以准备其他环境。
  2. 从 Git 代码库克隆 Cluster Toolkit:

    cd ~
    git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git
    
  3. 安装 Cluster Toolkit:

    cd cluster-toolkit && git checkout main && make
    
  4. 创建一个 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 部署状态的计算区域。
  5. GitHub 代码库中的 examples/gke-a4x/gke-a4x-deployment.yaml 蓝图中,填写 terraform_backend_defaultsvars 部分中的以下设置,以匹配部署的特定值:

    • 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 文件。

  6. 您可以选择在集群上启用 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)

  7. 生成应用默认凭证 (ADC),以向 Terraform 提供访问权限。如果您使用的是 Cloud Shell,可以运行以下命令:

    gcloud auth application-default login
    
  8. 部署蓝图以使用 A4X 机器类型预配 GKE 基础架构:

    cd ~/cluster-toolkit
    ./gcluster deploy -d \
    examples/gke-a4x/gke-a4x-deployment.yaml \
    examples/gke-a4x/gke-a4x.yaml
    
  9. 出现提示时,选择应用以部署蓝图。

    • 该蓝图会创建 VPC 网络、GPU RDMA VPC 网络、服务账号、集群和节点池。
    • 为了支持蓝图中的 fio-bench-job-template 作业模板,系统会创建Google Cloud 存储分区、网络存储和永久性卷资源。

A4

  1. 启动 Cloud Shell。您可以使用其他环境;不过,我们建议使用 Cloud Shell,因为 Cluster Toolkit 的依赖项已预安装。如果您不想使用 Cloud Shell,请按照说明安装依赖项,以准备其他环境。
  2. 从 Git 代码库克隆 Cluster Toolkit:

    cd ~
    git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git
    
  3. 安装 Cluster Toolkit:

    cd cluster-toolkit && git checkout main && make
    
  4. 创建一个 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 部署状态的计算区域。
  5. 您需要修改哪些文件才能创建集群取决于您为部署使用的使用选项。选择与您的使用选项的配置模式对应的标签页。

    受预留约束

    GitHub 代码库中的 examples/gke-a4/gke-a4-deployment.yaml 蓝图中,填写 terraform_backend_defaultsvars 部分中的以下设置,以匹配部署的特定值:

    • 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

    灵活启动

    1. GitHub 代码库中的 examples/gke-a4/gke-a4-deployment.yaml 蓝图中,填写 terraform_backend_defaultsvars 部分中的以下设置,以匹配部署的特定值:

      • 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
    2. 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)
        
        • 对于灵活启动(带已排队的预配),请执行以下操作:

          1. gpu_nominal_quota: NOMINAL_QUOTA 添加到 vars 代码块。gpu_nominal_quota 值用于在 ClusterQueue 规范中设置 GPU 的 nominalQuota(请参阅下文中有关设置 ClusterQueue 的步骤)。在此示例中,只有当 GPU 请求的总和小于或等于 NOMINAL_QUOTA 值时,ClusterQueue 才会接受工作负载。如需详细了解 ClusterQueue,请参阅以下 Kueue 集群队列文档

          2. kueue 代码块更新为以下内容:

            kueue:
               install: true
               config_path: $(vars.kueue_configuration_path)
               config_template_vars:
                  num_gpus: $(vars.gpu_nominal_quota)
            
          3. 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

    1. GitHub 代码库中的 examples/gke-a4/gke-a4-deployment.yaml 蓝图中,填写 terraform_backend_defaultsvars 部分中的以下设置,以匹配部署的特定值:

      • 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
    2. GitHub 代码库中的 examples/gke-a4/gke-a4.yaml 蓝图中,进行以下更改:

      • vars 代码块中,将整个 reservation 代码块(包括 reservation 行本身)替换为 spot: true
      • id: a4-pool 下,移除 reservation_affinity 代码块。将此块替换为以下行:

        • spot: $(vars.spot)
  6. 您可以选择在集群上启用 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)

  7. 生成应用默认凭证 (ADC),以向 Terraform 提供访问权限。如果您使用的是 Cloud Shell,可以运行以下命令:

    gcloud auth application-default login
    
  8. 部署蓝图以使用 A4 机器类型预配 GKE 基础架构:

    cd ~/cluster-toolkit
    ./gcluster deploy -d \
    examples/gke-a4/gke-a4-deployment.yaml \
    examples/gke-a4/gke-a4.yaml
    
  9. 出现提示时,选择应用以部署蓝图。

    • 该蓝图会创建 VPC 网络、GPU RDMA VPC 网络、服务账号、集群和节点池。
    • 为了支持蓝图中的 fio-bench-job-template 作业模板,系统会创建Google Cloud 存储分区、网络存储和永久性卷资源。

A3 Ultra

  1. 启动 Cloud Shell。您可以使用其他环境;不过,我们建议使用 Cloud Shell,因为 Cluster Toolkit 的依赖项已预安装。如果您不想使用 Cloud Shell,请按照说明安装依赖项,以准备其他环境。
  2. 从 Git 代码库克隆 Cluster Toolkit:

    cd ~
    git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git
    
  3. 安装 Cluster Toolkit:

    cd cluster-toolkit && git checkout main && make
    
  4. 创建一个 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 部署状态的计算区域。
  5. 您需要修改哪些文件才能创建集群取决于您为部署使用的使用选项。选择与您的使用选项的配置模式对应的标签页。

    受预留约束

    GitHub 代码库中的 examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml 蓝图中,替换 terraform_backend_defaultsvars 部分中的以下变量,以与部署的特定值相匹配:

    • 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

    灵活启动

    1. GitHub 代码库中的 examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml 蓝图中,替换 terraform_backend_defaultsvars 部分中的以下变量,以与部署的特定值相匹配:

      • 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
    2. 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)
        
        • 对于灵活启动(带已排队的预配),请按以下三个步骤操作:

          1. gpu_nominal_quota: NOMINAL_QUOTA 添加到 vars 代码块。gpu_nominal_quota 值用于在 ClusterQueue 规范中设置 GPU 的 nominalQuota。在此示例中,只有当 GPU 请求的总和小于或等于 NOMINAL_QUOTA 值时,ClusterQueue 才会接受工作负载。如需详细了解 ClusterQueue,请参阅以下 Kueue 集群队列文档

          2. kueue 代码块更新为以下内容:

            kueue:
               install: true
               config_path: $(vars.kueue_configuration_path)
               config_template_vars:
                  num_gpus: $(vars.gpu_nominal_quota)
            
          3. 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

    1. GitHub 代码库中的 examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml 蓝图中,在 terraform_backend_defaultsvars 部分填写以下设置,以与部署的特定值相匹配:

      • 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
    2. GitHub 代码库中的 examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml 蓝图中,进行以下更改:

      • vars 代码块中,将整个 reservation 代码块(包括 reservation 行本身)替换为 spot: true
      • id: a3-ultragpu-pool 下,移除 reservation_affinity 代码块。将此块替换为以下行:

        • spot: $(vars.spot)
  6. 您可以选择在集群上启用 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)

  7. 生成应用默认凭证 (ADC),以向 Terraform 提供访问权限。如果您使用的是 Cloud Shell,可以运行以下命令:

    gcloud auth application-default login
    
  8. 部署蓝图以使用 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
    
  9. 出现提示时,选择应用以部署蓝图。

    • 该蓝图会创建 VPC 网络、GPU RDMA VPC 网络、服务账号、集群和节点池。
    • 为了支持蓝图中的 fio-bench-job-template 作业模板,系统会创建Google Cloud 存储分区、网络存储和永久性卷资源。

使用 XPK 创建集群并运行工作负载

借助加速处理套件 (XPK),您可以快速预配和使用集群。XPK 可生成预配置的、经过训练优化的基础架构,非常适合以工作负载执行为主要关注点的情况。

使用 XPK 创建集群并运行采用 A3 Ultra 虚拟机的作业:

  1. 安装所需的工具,以满足 XPK 前提条件
  2. 复制 XPK 的最新标记版本的版本号,例如“v0.8.0”。在以下命令中,将 XPK_TAG 替换为最新的 XPK 版本号。
  3. 在 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
    
  4. 使用 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
    

    执行以下变量替换操作:

    • CLUSTER_NAME:集群的名称。
    • COMPUTE_ZONE:A3 Ultra 机器节点池的计算可用区。如需使用预留容量,请确保您使用的是预留容量的可用区。我们通常建议选择靠近用户的可用区,以尽可能缩短延迟时间。
    • PROJECT_ID:您的 Google Cloud 项目 ID
    • NUM_NODES:节点池中的工作器节点数。
    • RESERVATION_NAME:预留的名称。

      XPK 为集群创建提供了额外的实参,包括用于创建专用集群、创建 Vertex AI TensorBoard 和使用节点自动配置的实参。如需了解详情,请参阅 XPK 的集群创建指南。

  5. 验证是否已成功创建集群:

      python3 xpk.py cluster list --zone=COMPUTE_ZONE --project=PROJECT_ID
    
  6. 可选:运行工作负载以测试集群环境:

      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
    

    执行以下变量替换操作:

    • WORKLOAD_NAME:工作负载的名称。
    • CLUSTER_NAME:集群的名称。
    • WORKLOAD_NUM_NODES:用于执行工作负载的工作器节点数量。
    • COMPUTE_ZONE:A3 Ultra 机器节点池的计算可用区
    • PROJECT_ID:您的 Google Cloud 项目 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

后续步骤