本页面介绍了训练作业的状态(通过训练作业的生命周期),以及 Vertex AI 如何处理训练错误。您可以使用此信息来相应地调整您的训练代码。
训练作业的生命周期
本部分介绍 Vertex AI 如何在训练作业的生命周期内处理工作器虚拟机。
将新作业加入队列
创建 CustomJob
或 HyperparameterTuningJob
后,该作业在 Vertex AI 运行之前可能会保持 JOB_STATE_QUEUED
状态一段时间。此时间段通常是简要的,但如果您的 Google Cloud 项目没有足够的自定义训练配额,则 Vertex AI 会一直将作业排入队列,直到您有充足配额。
并行启动工作器
训练作业开始时,Vertex AI 会在短时间内安排尽可能多的工作器。因此,工作器可能会并行启动,而不是按顺序启动。为了缩短启动延迟时间,Vertex AI 会在每个工作器上运行代码后立即开始运行该代码。当所有工作器都可用时,Vertex AI 会将作业状态设置为 JOB_STATE_RUNNING
。
在大多数情况下,您的机器学习框架会自动处理并行启动的工作器。如果您在训练代码中使用分发策略,则可能需要手动调整策略以处理并行启动的工作器。详细了解 TensorFlow 和 PyTorch 中的分发策略。
在训练作业期间重启工作器
在训练作业中,Vertex AI 可以从任何具有相同主机名的工作器池重启工作器。出现此情况的原因如下:
- 虚拟机维护:当运行工作器的虚拟机进行维护时,Vertex AI 会在另一个虚拟机上重启该工作器。详细了解适用于虚拟机维护的实时迁移。
非零退出:如果任何工作器在退出时显示非零退出代码,则 Vertex AI 会立即在同一虚拟机中重启该工作器。
要处理训练代码中的工作器重启,请在训练期间定期保存检查点,以便在工作器重启时从检查点恢复。如果您预计训练时间超过 4 小时,我们建议至少每 4 小时保存一次检查点。了解如何在 TensorFlow 和 PyTorch 中使用训练检查点。
已成功完成作业
如果训练作业的主要副本退出并且退出代码为 0,则表示训练作业已成功完成。此时,Vertex AI 会关停所有其他正在运行的工作器。
Vertex AI 如何处理训练作业错误
本部分介绍 Vertex AI 如何处理常见的训练作业错误和内部错误。
作业结束后一分钟左右,Vertex AI 会根据退出代码在训练作业对象上设置错误代码。
处理常见错误
如果遇到以下任何问题,Vertex AI 将关闭所有工作器:
错误类型 | 错误消息/日志 | 备注 |
用户代码异常 | 副本 REPLICA_NAME 退出且非零状态 EXIT_CODE。终止原因:REASON。 | 如果作业遇到可以瞬时退出的退出代码,Vertex AI 会尝试重启该作业三次。提示 Vertex AI 重试该作业的暂时性错误代码包括:
|
Out-of-memory | 副本 REPLICA_NAME 因内存不足而退出,其非零状态为 EXIT_CODE。 |
GKE 在 Vertex AI 节点上预留内存。在最小的机器类型(例如 n1-standard-4 )上,Vertex AI 系统代理占总内存的 40%。对于较大的虚拟机,开销相对较小。比较适用于 n1-standard 机器类型的可分配内存。 |
您所在区域的容量不足(Compute Engine 容量不足) | 区域资源不足:REGION_NAME。请尝试其他区域或使用其他加速器。 | 当 Compute Engine 已在您区域中的所选 CPU 或 GPU 达到容量时,就会发生缺货。这与您的项目配额无关。发生这种情况时,Vertex AI 会尝试重启作业最多三次。
对于在 A2 和 A3 虚拟机上运行的作业,动态工作负载调度器可让您调度在请求的 GPU 资源可用时运行的作业,而不是因供应不足而失败。如需了解详情,请参阅根据资源可用性安排训练作业。 |
处理内部错误
如果 Vertex AI 发生内部错误,它会尝试重启作业两次(总共尝试三次)。如果重启尝试也失败,Vertex AI 将返回以下错误消息:Internal error occurred for the current attempt
。