本页面提供了创建和管理训练集群的直接的 API 驱动型方法。您将学习如何在 JSON 文件内定义集群的完整配置,包括登录节点、A4 等高性能 GPU 分区和 Slurm 编排器设置。此外,还介绍了如何使用 curl 和 REST API 调用来部署此配置,以及如何使用 GET、LIST、UPDATE 和 DELETE 操作创建集群并管理生命周期。
定义集群配置
创建一个 JSON 文件,以定义训练集群的完整配置。
如果您的组织政策禁止计算实例使用公共 IP 地址,请使用 enable_public_ips: false 参数部署训练集群,并利用 Cloud NAT 实现互联网出站流量。
预配训练集群的第一步是在 JSON 文件中定义完整配置。此文件充当集群的蓝图,指定了从集群名称和网络设置到登录节点和工作器节点的硬件的所有内容。
以下部分提供了多个完整的 JSON 配置文件,可作为各种常见应用场景的实用模板。请参阅此列表,找到最符合您需求的示例,并将其作为起点。
仅带 Filestore 的 GPU:一种用于通用 GPU 训练的标准配置。
带 Filestore 和 Managed Lustre 的 GPU:一种适用于 I/O 密集型作业的高级设置。
带启动脚本的 GPU:演示如何在启动时在节点上运行自定义命令。
纯 CPU 集群:仅使用 CPU 资源的基本配置。
高级 Slurm 配置:演示如何在集群、分区或节点池范围内设置
slurm.conf参数,以及如何运行 prolog 和 epilog 脚本。
每个示例后面都详细介绍了该特定配置内使用的关键参数。
仅带 Filestore 的 GPU
这是标准配置。它提供了一个 Filestore 实例,该实例充当集群的 /home 目录,适合一般用途和存储用户数据。
以下示例显示了 gpu-filestore.json 的内容。此规范会创建一个具有 GPU 分区的集群。您可以将此代码用作模板,并根据需要修改 machineType 或 nodeCount 等值。
如需查看参数列表,请参阅参数参考文档。
{ "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 }, "labels": { "example-key": "example-value" } }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "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 }, "labels": { "example-key": "example-value" } } ], "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/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 }, "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": { "reservationAffinityType": "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", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "provisioning_model": "PROVISIONING_MODEL", "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 配置
此示例通过按名称设置 slurm.conf 参数,以及运行 prolog 和 epilog 脚本以实现自动化作业设置和清理,对 Slurm 进行精细控制。参数可以针对整个集群、单个分区或单个节点池进行设置。
有三个配置映射,每个 slurm.conf 记录对应一个:
config关于集群范围设置的 Slurm 规范config在分区上- 节点池的
node_sets条目
如需了解参数名称、值以及哪些参数会被拒绝的相关规则,请参阅 Slurm 配置映射。
您不必在创建时就确定这些设置。所有这三个映射都可以在运行的集群上更改,而无需重启节点或中断排队的作业。请参阅更新 Slurm 配置设置。
{ "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", "config": { "PriorityType": "priority/multifactor", "PriorityWeightAge": "1000", "PriorityWeightFairshare": "10000", "PreemptType": "preempt/partition_prio", "PreemptMode": "SUSPEND,GANG", "SchedulerParameters": "bf_continue,bf_window=1440,bf_resolution=600", "AccountingStorageEnforce": "limits,qos" }, "prolog_bash_scripts": [ "#!/bin/bash\necho 'Prolog script running'" ], "epilog_bash_scripts": [ "#!/bin/bash\necho 'Epilog script running'" ], "partitions": [ { "id": "cpu", "node_pool_ids": [ "cpu" ], "config": { "MaxTime": "4-00:00:00", "DefMemPerCPU": "4096", "PriorityTier": "20" } } ], "node_sets": [ { "node_pool_id": "cpu", "config": { "Weight": "10", "Features": "cpu,spot" } } ], "login_node_pool_id": "login" } } }
集群范围的映射会设置多因素优先级、分区优先级抢占和 SchedulerParameters,其 bf_continue 实参显示了复合形式:裸实参会开启标志,实参之间以英文逗号分隔。分区映射仅限制 cpu 分区的作业运行时和默认内存,并使用 node_sets 条目标签对相应池的节点进行标记,以便作业可以使用 --constraint 选择这些节点。
在 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:您要在其中创建集群的 Cloud de Confiance by S3NS 项目 ID。
- REGION:集群及其资源的 Cloud de Confiance by S3NS 区域。
- ZONE:将在其中预配集群资源的 Cloud de Confiance by S3NS 可用区。
- 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:您的 Cloud de Confiance by S3NS 项目 ID。
- REGION:集群及其资源所在的 Cloud de Confiance by S3NS 区域。
- NETWORK:要用于集群资源的虚拟私有云网络。
- ZONE:集群及其资源的 Cloud de Confiance by S3NS 可用区。
- SUBNETWORK:用于集群资源的子网。
节点池配置
以下参数用于定义登录节点和工作器节点的节点池。
常见节点池设置
-
ID:集群内节点池的唯一标识符(例如“
login”“a4”“cpu”)。 -
PROVISIONING_MODEL:工作器节点的预配模型(例如
ON_DEMAND、SPOT、RESERVATION、FLEX_START)。 -
MACHINE_TYPE:工作器节点的机器类型(例如
a3-highgpu-8g、a3-megagpu-8g、a3-ultragpu-8g、a4-highgpu-8g)。如需查看受支持的机器类型的完整列表,请参阅计算资源。 -
MIN_NODE_COUNT:
MIN_NODE_COUNT必须与MAX_NODE_COUNT相同。 -
MAX_NODE_COUNT:对于登录节点池,
MAX_NODE_COUNT必须与MIN_NODE_COUNT相同。 -
ENABLE_PUBLIC_IPS:一个布尔值(
true或false),用于确定登录节点是否具有公共 IP 地址。 -
BOOT_DISK_TYPE:登录节点的启动磁盘类型(例如
pd-standard、pd-ssd)。 - BOOT_DISK_SIZE_GB:登录节点的启动磁盘大小(以 GB 为单位)。
- LABELS:用于标记节点池的一组键值对。
-
NODE_IMAGE(对应于
node_pools对象内的node_image):节点池的节点启动时所用的虚拟机映像,可以是完整映像或映像系列资源路径(例如projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY)。如果省略此字段,节点池将使用其机器类型的当前默认映像,该映像会随时间推移而更新。将其设置为使节点池保持在特定映像上。更改节点池的映像会重新创建其节点。
其他存储空间设置
-
FILESTORES(对应于
node_pools对象内的filestores):要装载在节点池以实现共享文件访问的预先存在的 Filestore 实例的列表。 -
LUSTRES(对应于
node_pools对象内的lustres):要装载在节点池以实现高性能文件访问的预先存在的 Lustre 实例的列表。
特定于工作器的设置
-
ACCELERATOR_TYPE:要挂接到工作器节点的相应 GPU 加速器。
支持的值包括:
NVIDIA_H100_80GBNVIDIA_H100_MEGA_80GBNVIDIA_H200_141GBNVIDIA_B200
- ACCELERATOR_COUNT:要挂接到每个工作器节点的加速器数量。
-
RESERVATION_AFFINITY_TYPE(对应于
machine_spec.reservation_affinity.reservationAffinityType):节点池的预留亲和性。此参数必须为SPECIFIC_RESERVATION,这是唯一支持的值。使用SPECIFIC_RESERVATION时,您必须在machine_spec.reservation_affinity.values中指定预留。 -
RESERVATION_NAME:要用于节点池的预留的名称。此值用于
machine_spec.reservation_affinity.values中提供的完整预留资源名称,例如projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME。 当 RESERVATION_AFFINITY_TYPE 为SPECIFIC_RESERVATION时,必须选择预留。
编排器和存储配置
这些字段在 JSON 文件的 orchestrator_spec.slurm_spec 块中定义。
核心 Slurm 和存储设置
-
HOME_DIRECTORY_STORAGE(对应于
home_directory_storage):要装载为/home目录的现有 Filestore 实例的完整资源名称。 -
LOGIN_NODE_POOL_ID(对应于
login_node_pool_id):应为登录节点使用的节点池的 ID。 -
partitions:分区对象列表,其中每个对象都需要一个id和一个node_pool_ids列表。 -
default_partition_id(可选):在未明确指定分区的情况下(例如,在运行sbatch时未添加--partition标志),用于执行 Slurm 作业的分区的id。如果未设置,则分区列表中的第一个分区将成为默认分区,因此重新排序列表将更改默认分区。
高级 Slurm 设置
-
prolog_bash_scripts:一个字符串列表,其中每个字符串都包含要在作业开始之前执行的 Bash 脚本的完整内容。 -
epilog_bash_scripts:一个字符串列表,其中每个字符串都包含在作业完成后要执行的 Bash 脚本的完整内容。 -
config、partitions[].config和node_sets:按名称设置的 Slurm 参数。请参阅 Slurm 配置映射。 -
scheduling和accounting:已被取代。这两个对象公开了一组固定的优先级、抢占和结算参数,每个参数都可以通过名称在集群范围的config映射中设置(priority_type为"PriorityType",preempt_mode为"PreemptMode",依此类推)。 它们仍适用于使用它们的集群,但新集群应使用config,该参数支持的slurm.conf参数比此子集多得多。
Slurm 配置映射
Slurm 参数按名称设置,分为三个映射,每个映射对应一个 slurm.conf 记录:
-
config:集群级设置,以全局Key=Value行的形式写入。 -
partitions[].config:一个分区的设置,以额外键值对的形式写入相应分区的PartitionName=行。 -
node_sets:一个对象列表,每个对象都包含一个node_pool_id和一个config映射。这些设置以额外的键值对形式写入相应节点池的节点的NodeName=行。每个节点池最多一个条目,并且该池必须是集群的计算池,而不是登录池。
在这三种情况中,键都是 SchedMD 文档中记录的 Slurm 参数名称,不区分大小写,并忽略下划线,因此 DefMemPerCPU、defmempercpu 和 def_mem_per_cpu 都表示相同的参数。值的写入方式与 slurm.conf 的写入方式相同,包括以英文逗号分隔的列表(例如 "PreemptMode": "SUSPEND,GANG")和复合值(例如 "SchedulerParameters": "bf_window=1440,bf_resolution=600")。
每张地图都支持适用于其记录的部分 slurm.conf 参数,而不是全部。如果您需要不受支持的参数,请与 Gemini Enterprise Agent Platform 训练集群联系人联系。
如果您在设置的范围内使用了不受支持的参数,或者使用了对相应参数而言不合法的值,系统会在您发出请求时拒绝该参数,并会在错误消息中指明该参数。不会静默丢弃任何内容。某些参数因特定原因而被拒绝:
-
该服务会管理节点健康检查和作业重新排队,因此无法设置
HealthCheckProgram、HealthCheckInterval、HealthCheckNodeState和RequeueExit。 -
Prolog和Epilog通过prolog_bash_scripts和epilog_bash_scripts设置。 -
slurmdbd.conf参数(例如StorageHost和PurgeJobAfter)不可配置:结算数据库由服务管理。 -
在分区范围内,
Default被拒绝。默认分区是集群范围内的选择,使用default_partition_id设置。
运行时配置
这些字段在 JSON 文件的 runtime_spec 块中定义。
-
service_account:集群在运行任何工作负载时使用的默认服务账号。如果未指定,则使用默认的 Compute Engine 服务账号。 集群创建后,此字段便无法更新。
后续步骤
使用处于活跃状态的永久性训练集群来运行机器学习工作负载。
- 在集群上运行作业:提交
CustomJob以在永久性集群上运行训练作业。 - 使用 Gemini Enterprise Agent Platform Pipelines 编排训练:对于可重复的生产级工作流,可使用 Agent Platform Pipelines 自动执行作业提交流程。
- 查看集群:使用 Cloud de Confiance 控制台或 Agent Platform API 列出项目中的现有集群、检查其状态并查看配置详细信息。
- 更改集群:更新现有集群的配置,例如其节点数量或 Slurm 分区。
- 删除集群以停止产生费用: 训练集群是永久性的,在处于活跃状态时会产生费用。