已知问题

本页介绍了您在使用批处理时可能会遇到的已知问题。

如果您在使用 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 预订的作业时,批处理作业可能错误地延迟或阻止作业运行。具体而言,批处理要求项目具有足够的 Compute Engine 资源配额,即使这些资源配额正在被未消耗的预留资源使用也是如此。

解决此问题的权宜解决方法

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

例如,如需针对可消耗预留的基本脚本作业预防或解决此问题,请使用以下 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 映像,Batch 会在作业的虚拟机启动后在其上安装所需的软件包。所需软件包可能会因作业而异,并且会随时间而变化,并且它们可能要求您的虚拟机操作系统映像具有最新的内核版本。当更新内核版本需要虚拟机重启时,就会出现此问题,这会导致软件包安装和作业失败。

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

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

此问题与指定包含过时内核的 Compute Engine(或自定义)虚拟机操作系统映像时作业可能会失败密切相关。具体而言,如果作业同时指定了未包含最新内核的 Compute Engine(或自定义)虚拟机操作系统映像并使用 GPU,则只有在您尝试自动安装 GPU 驱动程序时才可能会失败。对于这些作业,您可能只需手动安装 GPU 驱动程序即可解决失败问题。

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