已知问题

本页面介绍您在使用 Batch 时可能会遇到的已知问题。

如果您需要有关使用 Batch 的更多帮助,请参阅问题排查文档或获取支持

超时日志不会指示是否超出了任务或可运行的超时

如果作业因超过超时而失败,则与作业关联的日志不会指明失败是由相关任务的超时还是相关可运行对象的超时导致的。

如需解决此问题,请为任务和可运行对象设置不同的超时值。然后,您可以按照以下步骤确定失败是由于超出相关任务的超时时间还是可运行导致的:

  1. 确定超出超时失败的任务、可运行状态和时间。

    1. 查看作业的日志

    2. 找到包含超出超时退出代码 50005 的日志。此日志包含类似于以下消息的 textPayload

      Task task/JOB_UID-group0-TASK_INDEX/0/0 runnable RUNNABLE_INDEX...exitCode 50005
      

      在该日志中,将 TASK_INDEX 记录为失败的任务,将 RUNNABLE_INDEX 记录为失败的可运行对象,将日志的 timestamp 值记录为发生超限超时失败的时间。

  2. 确定失败任务的开始时间。

    1. 查看失败任务的状态事件

    2. 找到提及以下消息的状态事件:

      Task state is updated from ASSIGNED to RUNNING
      

      从该状态事件中,将 eventTime 字段记录为失败任务的开始时间。

  3. 使用以下公式计算失败任务的总运行时间 \({failedTaskRunTime}\):

    \[{failedTaskRunTime}={failureTime}-{failedTaskStartTime}\]

    替换以下值:

    • \({failureTime}\):超出超时故障的时间。
    • \({failedTaskStartTime}\):失败任务的开始时间。
  4. 确定超出的超时:

    • 如果 \({failedTaskRunTime}\) 与您为失败任务配置的超时时间匹配,则表示已超出该失败任务的超时,从而导致失败。

    • 否则,就会超出您为失败的可运行对象配置的超时时间,从而导致失败。

使用预留的作业可能会延迟或阻止

当您尝试创建和运行使用 Compute Engine 预留的作业时,Batch 可能会错误地延迟或阻止作业运行。具体而言,Batch 要求项目具有足够的 Compute Engine 资源配额,即使这些资源配额正由未使用的预留占用。

解决方法

如需为作业解决此问题,请向作业级 labels 字段添加名为 goog-batch-skip-quota-check 且值为 true 的标签。此标签会导致 Batch 在尝试创建作业之前跳过验证项目的资源配额步骤。

例如,如需防止或解决可使用预留的基本脚本作业的此问题,请使用以下 JSON 配置创建并运行作业:

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "instances": [
      {
        VM_RESOURCES
      }
    ],
  },
  "labels": {
    "goog-batch-skip-quota-check": "true"
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

VM_RESOURCES 替换为与作业要使用的预留相匹配的虚拟机资源。

如需了解更多说明,请参阅创建和运行可以使用预留虚拟机的作业以及为作业定义自定义标签

找出问题

此问题并未体现在具体错误消息中。相反,以下情况可能会发生此问题:

  • 如果您的项目预留了所有具有配额的资源,则此问题会阻止指定这些资源的任何作业。

    例如,假设您的项目满足以下条件:

    • H100 GPU 的配额上限为 16 个。
    • 2 个 a3-highgpu-8g 虚拟机的未使用的单项目预留,共预留 16 个 H100 GPU。

    在这种情况下,此问题会阻止项目调度和运行任何已正确配置为使用任何预留 H100 GPU 的作业。

  • 如果您的项目预留了一些具有配额的资源,则此问题可能会阻止或延迟指定这些资源的作业。

    例如,假设您的项目满足以下条件:

    • H100 GPU 的配额上限为 16 个。
    • 1 个 a3-highgpu-8g 虚拟机的未用量单项目预留,共预留 8 个 H100 GPU。
    • 一个 a3-highgpu-8g 虚拟机,配置为不使用任何预留,偶尔被删除后重新创建。(此虚拟机如果存在,会使用 8 个未预留的 H100 GPU。)

    在这种情况下,此问题仅允许您的项目安排和开始运行已正确配置为在 a3-highgpu-8g 虚拟机不存在时使用任何预留的 H100 GPU 的任何作业。

指定内核过时的 Compute Engine(或自定义)虚拟机操作系统映像时,作业可能会失败

如果作业指定的 Compute Engine 虚拟机操作系统映像没有最新的内核版本,则其可能会失败。此问题还会影响基于 Compute Engine 虚拟机操作系统映像的任何自定义映像。导致此问题的 Compute Engine 公共映像无法轻松识别,并且随时可能会更改。

此问题并未体现具体错误消息。如果您的作业意外失败,并指定 Compute Engine 虚拟机操作系统映像或类似自定义映像,请考虑此问题。

要防止或解决此问题,您可以执行以下操作:

  1. 请尽可能使用批处理映像或基于批处理映像的自定义映像,这些映像不会受此问题的影响。
  2. 如果您无法使用批处理映像,请尝试使用最新版本的首选 Compute Engine 映像。通常,较新版本的 Compute Engine 映像更有可能具有最新的内核版本。
  3. 如果特定映像的最新版本不起作用,您可能需要尝试其他操作系统或创建自定义映像。例如,如果最新版本的 Debian 11 不起作用,您可以尝试从运行 Debian 11 并且已更新为使用最新内核版本的 Compute Engine 虚拟机创建自定义映像

此问题是由虚拟机操作系统映像中过时的内核版本导致的,从而导致虚拟机重新启动。如果作业指定了任何并非来自 Batch 或基于批处理映像的虚拟机操作系统映像,则 Batch 会在作业启动后在其虚拟机上安装所需的软件包。所需的软件包可能因作业而异,并会随时间而变化,并且可能需要您的虚拟机操作系统映像具有最新的内核版本。如果更新内核版本需要重新启动虚拟机,就会出现此问题,这会导致软件包安装和作业失败。

如需详细了解虚拟机操作系统映像,请参阅作业虚拟机的操作系统环境概览

只有在自动安装驱动程序时,使用 GPU 和虚拟机操作系统映像(内核过时)的作业才可能失败

此问题与指定内核过时的 Compute Engine(或自定义)虚拟机操作系统映像时,作业可能会失败。具体而言,指定 Compute Engine(或自定义)虚拟机操作系统映像但不包含最新内核且使用 GPU 的作业可能仅在您尝试自动安装 GPU 驱动程序时失败。对于这些作业,只需手动安装 GPU 驱动程序即可解决失败问题。

如需详细了解 GPU,请参阅创建和运行使用 GPU 的作业