已知问题

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

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

超时日志不会指明任务或可运行对象是否超时

当作业因超出超时而失败时, 与作业关联的日志并不会表明 是由相关任务的超时或相关可运行对象的超时引起的。

要解决此问题,请为任务和 Runnables然后,您可以使用以下步骤确定失败是否是由相关任务或可运行项超时所致:

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

    1. 查看作业的日志

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

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

      在该日志中,将 TASK_INDEX 记录为 失败的任务,RUNNABLE_INDEX作为 runnable 失败,并将日志的 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 可能会错误地延迟或阻止作业 。具体而言,批处理要求项目具有足够的 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,如果有的话。)

    在这种情况下,此问题仅允许您的项目按计划 开始运行正确配置为 使用任何预留的 H100 GPU(如果 a3-highgpu-8g 虚拟机未使用) 存在。

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

如果作业指定了 Compute Engine 虚拟机操作系统映像,则可能会失败 内核版本未搭载最新内核版本。 此问题还会影响基于 Compute Engine 虚拟机操作系统映像的任何自定义映像。导致此问题的 Compute Engine 公共映像不易识别,并且可能会随时发生变化。

系统不会通过特定错误消息指明此问题。不过,如果您的作业意外失败并指定了 Compute Engine 虚拟机操作系统映像或类似的自定义映像,请考虑此问题。

如需预防或解决此问题,您可以执行以下操作:

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

此问题由虚拟机操作系统映像中的过时内核版本导致,会导致虚拟机重新启动。如果作业指定 不是来自 Batch 或基于 批量映像、批量安装 必需的软件包。所需软件包可能会因作业而异,并且会随时间而变化,并且它们可能要求您的虚拟机操作系统映像具有最新的内核版本。当更新内核版本需要虚拟机重启时,就会出现此问题,这会导致软件包安装和作业失败。

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

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

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

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