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-smi、dcgmi和xid代码监控。 - 磁盘用量:检查关键分区(
/、/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 工作流的关键一步。
- 监控和调试训练作业:跟踪训练作业的进度、资源利用率和健康状况,包括如何识别节点何时已恢复,或作业何时因故障而重新启动。
- 使用 Gemini Enterprise Agent Platform 流水线编排弹性作业:对于生产环境,请使用 Gemini Enterprise Agent Platform 流水线创建自动化且可重复的工作流,以将弹性训练作业提交到集群。
- 管理和部署模型:弹性训练作业完成后,请使用 Gemini Enterprise Agent Platform Model Registry 对模型制品进行版本控制,然后再将模型部署到端点以处理在线推理请求。