创建集群

如果您对 Vertex AI 训练集群感兴趣,请与您的销售代表联系以获取访问权限。

本页面提供了创建和管理训练集群的直接的 API 驱动型方法。您将学习如何在 JSON 文件内定义集群的完整配置,包括登录节点、A4 等高性能 GPU 分区和 Slurm 编排器设置。此外,还介绍了如何使用 curl 和 REST API 调用来部署此配置,以及如何使用 GETLISTUPDATEDELETE 操作创建集群并管理生命周期。

定义集群配置

创建一个 JSON 文件,以定义训练集群的完整配置。

如果您的组织政策禁止计算实例使用公共 IP 地址,请使用 enable_public_ips: false 参数部署训练集群,并利用 Cloud NAT 实现互联网出站流量。

预配训练集群的第一步是在 JSON 文件中定义完整配置。此文件充当集群的蓝图,指定了从集群名称和网络设置到登录节点和工作器节点的硬件的所有内容。

以下部分提供了多个完整的 JSON 配置文件,可作为各种常见应用场景的实用模板。请参阅此列表,找到最符合您需求的示例,并将其作为起点。

每个示例后面都详细介绍了该特定配置内使用的关键参数。

仅带 Filestore 的 GPU

这是标准配置。它提供了一个 Filestore 实例,该实例充当集群的 /home 目录,适合一般用途和存储用户数据。

以下示例显示了 gpu-filestore.json 的内容。此规范会创建一个具有 GPU 分区的集群。您可以将此代码用作模板,并根据需要修改 machineTypenodeCount 等值。

如需查看参数列表,请参阅参数参考文档

 {
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "provisioning_model": "RESERVATION",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION"
          ]
        }
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
}

带 Filestore 和 Managed Lustre 的 GPU

此高级配置除了包含标准 Filestore 实例之外,还包含高性能 Lustre 文件系统。如果您的训练作业需要以高吞吐量方式访问大型数据集,请选择此选项。

如需查看参数列表,请参阅参数参考文档

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/asia-sREGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservation_affinity_type": RESERVATION_AFFINITY_TYPE,
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "provisioning_model": "RESERVATION",
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "lustres": [
        "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE"
      ]
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
  

带启动脚本的 GPU

此示例演示了如何向节点池添加自定义脚本。此脚本会在启动时在相应池中的所有节点上执行。如需配置此功能,请在节点池的定义中添加相关字段,以及常规设置。如需查看参数列表及其说明,请参阅参数参考文档

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    },
    {
      "id": "a4",
      "machine_spec": {
        "machine_type": "a4-highgpu-8g",
        "accelerator_type": "NVIDIA_B200",
        "provisioning_model": "RESERVATION_NAME",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
          ]
        }
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "enable_public_ips": true,
      "zone": "ZONE",
      "boot_disk": {
        "boot_disk_type": "hyperdisk-balanced",
        "boot_disk_size_gb": 200
      },
      "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n",
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": [
            "a4"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}
}

纯 CPU 集群

如需预配训练集群环境,您必须先在 JSON 文件中定义其完整配置。此文件充当集群的蓝图,指定了从集群名称和网络设置到登录节点和工作器节点的硬件的所有内容。

如需查看参数列表,请参阅参数参考文档

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8",
      }
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

带有高级 Slurm 配置的 CPU

此示例演示了如何使用高级参数自定义 Slurm 编排器。如果您需要对作业调度行为进行精细控制,例如设置多因素优先级权重、配置作业抢占以及运行 prolog 和 epilog 脚本以实现自动化作业设置和清理,请使用此模板。

如需查看参数列表,请参阅参数参考文档

{
  "display_name": "DISPLAY_NAME",
  "network": {
    "network": "projects/PROJECT_ID/global/networks/NETWORK",
    "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK"
  },
  "node_pools": [
    {
      "id": "cpu",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    },
    {
      "id": "login",
      "machine_spec": {
        "machine_type": "n2-standard-8"
      },
      "scaling_spec": {
        "min_node_count": MIN_NODE_COUNT,
        "max_node_count": MAX_NODE_COUNT
      },
      "zone": "ZONE",
      "enable_public_ips": true,
      "boot_disk": {
        "boot_disk_type": "pd-standard",
        "boot_disk_size_gb": 120
      }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

在 JSON 文件中定义集群后,您可以使用以下 REST API 命令来部署和管理集群。这些示例使用 gcurl 别名,该别名是一种方便的经过身份验证的快捷方式,可用于与 API 端点进行互动。这些命令涵盖了整个生命周期,从最初部署集群到更新集群、获取集群状态、列出所有集群,再到最终删除集群。

身份验证

alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'

创建一个 JSON 文件

创建一个 JSON 文件(例如 @cpu-cluster.json),以指定模型训练集群的配置。

部署集群

创建 JSON 配置文件后,您可以使用 REST API 部署集群。

设置环境变量

在运行命令之前,设置以下环境变量。这样可使 API 命令更简洁,更易于管理。

  • PROJECT_ID:您要在其中创建集群的 Google Cloud 项目 ID。
  • REGION:集群及其资源的 Google Cloud 区域。
  • ZONE:将在其中预配集群资源的 Google Cloud 可用区。
  • CLUSTER_ID:训练集群的唯一标识符,也用作命名相关资源的前缀。

运行创建命令

现在,执行以下 gcurl 命令。它使用 JSON 文件(在本例中为 cpu-cluster.json)作为请求正文,并使用您刚设置的环境变量来构建 API 端点和查询参数。

  gcurl -X POST -d @cpu-cluster.json https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters?model_development_cluster_id=CLUSTER_ID
    

部署开始后,系统会生成一个操作 ID。请务必复制此 ID。您需要在下一步中使用此ID来验证集群。

  gcurl -X POST -d @cpu-cluster.json https://us-central1-aiplatform.googleapis.com/v1beta1/projects/managedtraining-project/locations/us-central1/modelDevelopmentClusters?model_development_cluster_id=training
  {
      "name": "projects/1059558423163/locations/us-central1/operations/2995239222190800896",
      "metadata": {
      "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateModelDevelopmentClusterOperationMetadata",
      "genericMetadata": {
        "createTime": "2025-10-24T14:16:59.233332Z",
        "updateTime": "2025-10-24T14:16:59.233332Z"
      },
      "progressMessage": "Create Model Development Cluster request received, provisioning..."
  }
    

验证集群部署

使用部署集群时提供的操作 ID 跟踪部署进度。例如,2995239222190800896 是前面引用的示例中的操作 ID。

    gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
    

总结

使用 gcurl POST 命令提交集群配置会启动集群的预配,这是一项异步的长时间运行的操作。该 API 会立即返回包含 Operation ID 的响应。请务必保存此 ID,因为您将在后续步骤中使用它来监控部署进度、验证集群是否已成功创建并管理生命周期。

参数引用

以下列表介绍了配置示例中使用的所有参数。 这些参数根据其配置的资源分为若干逻辑组。

常规设置和网络设置

  • DISPLAY_NAME:训练集群的唯一名称。 字符串只能包含小写字母数字字符,必须以字母开头,且长度不得超过 10 个字符。
  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • REGION:集群及其资源所在的 Google Cloud 区域。
  • NETWORK:要用于集群资源的虚拟私有云网络。
  • ZONE:集群及其资源的 Google Cloud 可用区。
  • SUBNETWORK:用于集群资源的子网。

节点池配置

以下参数用于定义登录节点和工作器节点的节点池。

常见节点池设置

  • ID:集群内节点池的唯一标识符(例如“login”“a4”“cpu”)。
  • MACHINE_TYPE:工作器节点的机器类型。支持的值为 a3-megagpu-8ga3-ultragpu-8ga4-highgpu-8g
  • MIN_NODE_COUNTMIN_NODE_COUNT 必须与 MAX_NODE_COUNT 相同。
  • MAX_NODE_COUNT:对于登录节点池,MAX_NODE_COUNT 必须与 MIN_NODE_COUNT 相同。
  • ENABLE_PUBLIC_IPS:一个布尔值(truefalse),用于确定登录节点是否具有公共 IP 地址。
  • BOOT_DISK_TYPE:登录节点的启动磁盘类型(例如 pd-standardpd-ssd)。
  • BOOT_DISK_SIZE_GB:登录节点的启动磁盘大小(以 GB 为单位)。

特定于工作器的设置

  • ACCELERATOR_TYPE:要挂接到工作器节点的相应 GPU 加速器。 支持的值包括:
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT:要挂接到每个工作器节点的加速器数量。
  • PROVISIONING_MODEL:工作器节点的预配模型(例如 ON_DEMANDSPOTRESERVATIONFLEX_START)。
  • RESERVATION_AFFINITY_TYPE:节点池的预留亲和性(例如 SPECIFIC_RESERVATION)。
  • RESERVATION_NAME:要用于节点池的预留的名称。

编排器和存储配置

这些字段在 JSON 文件的 orchestrator_spec.slurm_spec 块中定义。

核心 Slurm 和存储设置

  • FILESTORE(对应于 home_directory_storage):要装载为 /home 目录的 Filestore 实例的完整资源名称。
  • LUSTRE(对应于 node_pools 对象内的 lustres):要装载在集群节点上以实现高性能文件访问的预先存在的 Managed Lustre 实例的列表。
  • LOGIN_NODE_POOL_ID(对应于 login_node_pool_id):应为登录节点使用的节点池的 ID。
  • partitions:分区对象列表,其中每个对象都需要一个 id 和一个 node_pool_ids 列表。

高级 Slurm 设置

  • prolog_bash_scripts:一个字符串列表,其中每个字符串都包含要在作业开始之前执行的 Bash 脚本的完整内容。
  • epilog_bash_scripts:一个字符串列表,其中每个字符串都包含在作业完成后要执行的 Bash 脚本的完整内容。
  • ACCOUNTING_STORAGE_ENFORCE:强制执行存储空间用量的账号限制。
  • PRIORITY_TYPE:要使用的调度优先级算法(例如 priority/multifactor)。
  • priority_weight_*:一组整数值,用于在调度优先级计算中为不同因素分配权重(例如 priority_weight_agepriority_weight_fairshare)。
  • PREEMPT_TYPE:要使用的抢占插件(例如 preempt/partition_prio)。
  • PREEMPT_MODE:抢占插件的模式(例如 REQUEUE)。
  • PREEMPT_EXEMPT_TIME:作业开始后无法抢占的时间。

后续步骤

使用处于活跃状态的永久性训练集群来运行机器学习工作负载。