集群弹性

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

Gemini Enterprise Agent Platform 训练集集群成了全面的健康检查系统,可确保计算节点的可靠性和 Slurm 作业的稳定性。此系统同时提供自动和手动账号恢复选项。在作业执行期间,系统会运行自动化流程来监控 GPU 健康状况和磁盘使用情况等关键组件,并自动替换发生故障的节点。对于需要用户干预的情况,训练集群提供 reportFaultyNodes API,让您可以手动删除特定的故障节点,或报告底层主机上疑似出现的硬件故障。

运行测试工作负载以验证 GPU 功能

第 1 步:使用 SSH 连接到集群节点

从 Cloud Shell 或 Google Cloud 控制台,使用 IAP 连接到登录节点。以下示例展示了 Cloud Shell 的命令:

gcloud compute ssh --zone $ZONE "Login Node Name" --tunnel-through-iap --project $PROJECT_ID

第 2 步:运行标准 Slurm 命令

连接到登录节点后,运行一些标准 Slurm 命令来验证集群是否正常运行。

~$ sinfo
PARTITION   AVAIL  TIMELIMIT  NODES  STATE NODELIST
partition1*    up   infinite      2   idle hcsa3m1236-a3mnodeset-[0-1]

接下来,提交批量作业。

~$ sbatch --qos normal --wrap "echo start! && sleep 10s && echo done!"

您应该会看到,系统在您的主目录中创建了一个 slurm-job-id.out 文件。

第 3 步:运行 GPU 工作负载

将以下内容保存为名为 test.sh 的脚本文件,并放在您的主目录中。

#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:8
#SBATCH --job-name=nvidia_smi

srun nvidia-smi -L

将脚本的权限设置为 755,使其可执行,然后提交 Slurm 作业:

~$ sbatch ./test.sh

Slurm 会将脚本的输出保存到名为 slurm-job-id.out 的文件中。

预期输出:

GPU 0: NVIDIA H100 80GB HBM3 (UUID: GPU-f75045e8-4d87-49d1-2eb9-39ec2baddf9b)
GPU 1: NVIDIA H100 80GB HBM3 (UUID: GPU-b91556d8-5215-d0ed-50b8-a88720e5b29c)
GPU 2: NVIDIA H100 80GB HBM3 (UUID: GPU-7600155a-0036-35f5-9489-a7b4ed0ce887)
GPU 3: NVIDIA H100 80GB HBM3 (UUID: GPU-a402e125-7841-033f-f08b-7921526c121f)
GPU 4: NVIDIA H100 80GB HBM3 (UUID: GPU-20eef8f8-b2c7-1716-5ce7-7f64475bd2c0)
GPU 5: NVIDIA H100 80GB HBM3 (UUID: GPU-65463286-e587-b52f-4d5b-8880eecbf0e7)
GPU 6: NVIDIA H100 80GB HBM3 (UUID: GPU-d5ff75e7-dd54-edf6-a684-33c26fc365e1)
GPU 7: NVIDIA H100 80GB HBM3 (UUID: GPU-26e81ae2-11fd-9d7e-95b6-c186e5173007)
GPU 0: NVIDIA H100 80GB HBM3 (UUID: GPU-e66a185a-b40c-81d9-d35d-19cab811df34)
GPU 1: NVIDIA H100 80GB HBM3 (UUID: GPU-d23e5cf7-afd8-bec2-1487-9e27eeb6aae0)
GPU 2: NVIDIA H100 80GB HBM3 (UUID: GPU-4dde1b05-ea5e-01e9-5c1e-e1c0d3b4b113)
GPU 3: NVIDIA H100 80GB HBM3 (UUID: GPU-3a0d734a-6fb8-d841-a97f-d6846553ea7f)
GPU 4: NVIDIA H100 80GB HBM3 (UUID: GPU-76fe0d37-08b2-a3a6-8ddf-55501426bc7c)
GPU 5: NVIDIA H100 80GB HBM3 (UUID: GPU-9e0a41e1-b399-8934-01af-6198b749c02a)
GPU 6: NVIDIA H100 80GB HBM3 (UUID: GPU-dddd09ee-c944-1098-9c4e-d96f8762ecb1)
GPU 7: NVIDIA H100 80GB HBM3 (UUID: GPU-df52c109-0ac1-30cc-226b-85b1a8a6bc16)

自动健康检查和恢复

为确保节点可靠性,训练集群会使用以下自动化检查套件持续监控节点健康状况。 训练集群会在 Slurm prolog(作业开始之前)和 epilog(作业完成之后)期间运行健康检查。

健康检查套件

  • GPU 健康状况:执行详细的单个 GPU 诊断,包括 nvidia-smidcgmixid 代码监控。
  • 磁盘用量:检查关键分区(//mnt/localssd/mnt/localdisk)的磁盘用量是否过高,以防止作业因空间不足而失败。
  • 网络健康状况:验证主网络接口是否具有 IPv4 地址。如果发现问题,它会尝试通过重置接口进行自我修复。
  • CPU 负载:监控系统的平均负载,如果超过预定义阈值,则记录警告。

故障恢复流程

如果检查检测到严重且无法恢复的错误,Gemini Enterprise Agent Platform 训练集群会自动启动故障恢复流程。标准流程包括排空故障节点、重新将受影响的 Slurm 作业加入队列,然后删除并重新创建已排空的节点,以将其恢复到健康状态。

此自动恢复功能需满足以下条件:

  • 重启次数上限:如果受影响的 Slurm 作业已重启指定次数,则跳过恢复流程。

  • GPU 利用率:如果节点上运行的作业未使用所有可用的 GPU,系统也会跳过节点删除和重新创建操作。在这种情况下,节点仅会被排空,以防止在其上调度新作业。

手动管理有故障的计算节点

训练集群提供了一些 API,用于手动报告和管理有故障的计算节点,这在自动健康检查无法解决问题时特别有用。您一次只能在一个节点上运行这些操作。

操作 说明 适用场景
删除节点 从集群中移除指定的故障节点。这是默认操作。 一般错误或节点无响应且需要回收时。
报告主机有故障 报告底层物理主机出现故障,从而触发修复或迁移流程。 托管 GPU 节点的物理机上疑似出现硬件故障。

操作 1:删除故障节点

此操作会删除指定的节点。此操作的结果取决于 Slurm 将节点归类为“静态”还是“动态”:

  • 静态节点:如果已删除节点的索引小于节点池的最小节点数,则会重新创建具有相同名称和规格的新计算节点。

  • 动态节点:如果已删除节点的索引大于最小节点数,则仅当有待处理的工作负载安排给该节点时,系统才会重新创建该节点。否则应将其移除。

这些示例使用 gcurl 别名,该别名是一种方便的经过身份验证的快捷方式,可用于与 API 端点进行交互。以下命令会为 curl 创建一个别名,其中包含所需的授权标头。

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

用于删除节点的 API 请求

如需删除故障节点,请执行以下 POST 请求。NODE_ID 应采用 CLUSTER_ID-NODEPOOL_ID-INDEX 格式。

  gcurl -X POST https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters/CLUSTER_ID:reportFaultyNodes -d '{"nodeActions": [{"nodeId": "NODE_ID"}]}'
  

查看操作状态
您可以通过检查操作状态来监控 reportFaultyNodes 操作的结果。

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

操作 2:报告主机有故障

如果您怀疑出现硬件故障,可以将 GPU 节点的物理主机报告为有故障。

  • 支持的虚拟机:A3 Ultra 和 A4 High-GPU

  • 节点状态:在调用 API 之前,目标节点必须处于 RUNNING 状态。成功调用后,它将转换为 REPAIRING,并在主机修复或在新主机上重新创建节点后返回到 RUNNING。这是一项尽力而为的操作。

前提条件:授予 IAM 角色

如需使用此功能,您必须向 Agent Platform Service Agent 授予 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) 角色。

  PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")

  gcloud projects add-iam-policy-binding PROJECT_ID\
  --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-aiplatform.iam." \
  --role="roles/compute.instanceAdmin.v1"
  

用于报告主机故障的 API 请求

执行以下 POST 请求,将底层主机报告为故障。执行此操作时,您必须为 faultReasons 提供一种或多种观察到的行为和说明。
对于 behavior 字段,您应使用以下某个值:

行为 说明
PERFORMANCE 与集群中的其他 GPU 相比,附加到虚拟机的 GPU 存在性能问题;您在日志中未看到任何 XID 错误;Compute Engine 未检测到其他异常故障模式,例如静默数据损坏。
SILENT_DATA_CORRUPTION 您发现虚拟机中出现数据损坏,但虚拟机仍在运行。这可能是由于 vCPU 缺陷、软件 bug 或内核问题等原因造成的。
UNRECOVERABLE_GPU_ERROR 您发现了一个 XID 对应的不可恢复的 GPU 错误。
BEHAVIOR_UNSPECIFIED 您不确定虚拟机存在什么问题。

以下是 API 请求的示例。

gcurl -X POST \
  https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters/CLUSTER_ID:reportFaultyNodes \
  -d '{"nodeActions": [{"nodeId": "NODE_ID", "reportFaultyHost": {"faultReasons": [{"behavior": "BEHAVIOR_1", "description": "DESCRIPTION_1"}, {"behavior": "BEHAVIOR_2", "description": "DESCRIPTION_2"}]}}]}'
  

综合应用

通过利用自动化健康检查和本页详细介绍的手动控制机制,您可以维护一个高度弹性的训练环境。通过删除故障节点或报告硬件问题来主动管理集群的健康状况,可确保最长的正常运行时间和训练作业的成功完成。对于持续存在或复杂的问题,请务必考虑咨询 Google Cloud 支持团队,以获取深入的诊断和帮助。

后续步骤

配置训练集群以实现容错是构建完整的生产级 MLOps 工作流的关键一步。