作业创建和执行概览

本文档介绍了作业的执行流程和创建选项。 通过批处理作业,您可以在 Google Cloud 上运行批处理工作负载。如需了解作业的组件以及使用 Batch 的前提条件,请参阅 Batch 使用入门

作业创建和执行的工作原理

如需使用 Batch,您需要创建一个作业来指定工作负载及其要求,然后 Batch 自动运行该作业。

以下各部分详细介绍了作业创建和执行的工作原理:

作业生命周期

本部分介绍了作业的生命周期及其任务(从创建到删除)。

对于要在 Batch 上运行的每个工作负载,您需要完成以下基本流程:

  1. 创建作业:通过指定作业的可运行对象、任务和任何其他要求,定义要运行的工作负载。如需详细了解如何创建作业,请参阅本文档的作业创建选项部分。
  2. 对作业进行监控和问题排查:完成作业创建后,系统会自动在指定资源上将作业加入队列、安排作业和执行作业。您可以查看已创建作业或任何任务的详细信息,以了解当前状态。在作业运行或完成后,您还可以使用日志监控和分析作业。如果作业失败,您可以使用任何错误消息、状态事件或日志对其进行问题排查,以诊断相应问题,然后再重新创建作业。
  3. 删除或导出作业:根据 Cloud Logging 保留政策,系统会自动保留和删除作业的日志。作业的其他信息在 Batch 中仍然可用,直到您或 Google Cloud 将其删除。Google Cloud 会在作业完成 60 天后自动删除作业。在此之前,您可以选择自行删除作业;或者,如果需要保留信息,可以在删除作业之前将其导出。

创建作业后,作业会按以下状态进行:

  1. 已加入队列 (QUEUED):作业请求已被允许,正在等待在队列中。该作业将一直保留在队列中,直到所需的资源可用并对其进行评估。
  2. 已安排 (SCHEDULED):已从队列中选择作业以开始运行,系统正在分配资源。
  3. 正在运行 (RUNNING):作业的资源已成功创建,其任务可以开始运行。

    作业运行时,其每项任务都会经历以下状态:

    1. 待处理 (PENDING):任务正在等待虚拟机运行。
    2. 已分配 (ASSIGNED):任务已被分配用于运行的虚拟机。
    3. 正在运行 (RUNNING):任务正在虚拟机上运行。
    4. 任务会在以下某种状态下完成:
      • 成功 (SUCCEEDED):任务成功,因为其每个可运行对象都成功了(返回退出代码为零)或使用忽略退出状态 (ignoreExitStatus) 字段标记为非关键状态。
      • 失败 (FAILED):任务失败,因为至少有一个关键可运行对象失败(返回非零退出代码)。
  4. 作业会完成处于以下状态之一:

    • 成功 (SUCCEEDED):作业的所有任务均已成功。
    • 失败 (FAILED):作业中至少有一项任务失败。

如需了解详情,请参阅参考文档中的作业状态任务状态

作业排队和调度

通常情况下,如果作业规模较小且只需要少量公共资源,作业运行和完成的可能性会更高。对于 Batch 文档中的示例作业,这些作业通常非常小且使用的资源最少,这些作业只需几分钟即可完成运行。

具体而言,作业完成排队和调度所需的时间因作业而异,而且时间取决于以下因素:

  • 作业资源可用性:允许位置内作业所需资源的可用性。

    首先,如果您碰巧指定了该位置未提供的任何资源,作业将无法运行。发生这种情况时,作业将失败并显示可用区可用性错误

    其次,如果由于资源可用性错误而导致作业所需的任何资源相对于当前需求而言容量较低,则作业更容易延迟或失败。因此,如果您需要更少且更常见的资源,并且不限制作业在区域的任何可用区中运行,则作业的运行速度可能会更快。

    如需详细了解作业的资源,请参阅本文档中的作业执行。如需详细了解您可以为 Batch 作业指定的位置及其资源,请参阅位置页面。

  • 作业优先级:某个作业相对于项目中其他作业的优先级的优先级。

    您可以视需要添加 gcloud CLI 的 --priority 标志priority JSON 字段,以指定作业的优先级。您可以将作业的优先级定义为 0(最低优先级)到 99(最高优先级)之间的数字。设置较高的优先级有助于比项目中优先级较低的作业更早运行。

    如果您未配置作业的优先级,则默认为使用最低优先级 0。如果两个已加入队列的作业的优先级相同,则先创建的作业的优先级较高。

  • 配额和限制:您的项目针对 Google Cloud 资源和请求所设的阈值。

    如果作业超出任何必需资源或请求的限额或项目配额,它将无法运行。如果发生这种情况,Batch 可能会延迟作业并在稍后重试,或者导致作业失败并显示相关错误。

    您可以创建符合所有相关限制的作业,并确保项目有足够的相关配额,从而防止作业出现延迟和错误。如需了解详情,请参阅批量配额和限制

作业执行

执行作业所需的时间可能因任务调度和作业资源而异。

任务调度

作业运行时,系统会根据调度政策 (schedulingPolicy) 字段调度其任务,该字段可让您指定以下选项之一:

  • 尽快AS_SOON_AS_POSSIBLE,默认):任务会在资源可用时尽快运行,并且可以并行运行。一次运行的任务量取决于作业的资源和其他配置选项所允许的每个虚拟机的并行任务,如本文档的作业资源中所述。
  • 按顺序 (IN_ORDER):以索引顺序递增的任务一次运行一个任务。

作业资源

每个批量作业都在区域代管式实例组 (MIG) 上运行,该实例组由一个或多个匹配的 Compute Engine 虚拟机 (VM) 实例组成,每个实例都位于所包含的某个地区中。每个虚拟机都有专用硬件来运行 CPU 核心(具体来说是虚拟 CPU (vCPU))和内存(会影响作业性能)和启动磁盘(用于存储操作系统 (OS) 映像和运行作业的指令)。

在作业运行期间,Batch 会自动创建和删除符合您规范的资源。创建作业时,您可以通过指定以下内容来配置其资源:

  • 您必须指定运行每个任务所需的计算资源,包括 vCPU、内存和(如果需要)额外的启动磁盘存储空间(除非默认值足够)。如需了解详情,请参阅每个任务的计算资源 (computeResource) 字段子字段

  • (可选)您还可以指定要使用的虚拟机类型以及每个虚拟机的其他资源,例如 GPU 和存储卷。如果您未指定这些选项,Batch 会选择兼容的虚拟机类型,且不会添加任何其他资源。如需了解详情,请参阅虚拟机实例资源 (instances[]) 字段子字段

根据任务调度和指定的硬件要求,不同作业中可同时运行的虚拟机数量和任务数量因作业而异。如果指定作业的任务运行 IN_ORDER,则该作业有一个虚拟机,并且一次仅运行一个任务。否则,如果作业的任务运行 AS_SOON_AS_POSSIBLE,那么您可以使用以下公式估算虚拟机数量和同时执行的任务数量:

\[{vmsPerJob}=\frac{taskCount}{concurrentTasksPerVm}\]

此公式具有以下值:

  • \({vmsPerJob}\):作业的最大虚拟机数量。为作业创建的实际虚拟机数量可能少于此值,例如,如果 Batch 预计使用更少的资源运行作业比等待更多资源更快。此值还受每个作业的并发虚拟机数限制限制。
  • \({taskCount}\):该作业的任务总数,可使用“任务数”(taskCount) 字段定义。
  • \({ParallelTasksPerVM}\):可在虚拟机上同时运行的任务数上限。

    此值由以下所有条件确定:

作业创建选项

创建和运行基本作业介绍了基础知识,包括如何使用脚本或容器映像定义可运行对象,以及如何配置预定义和自定义环境变量。

了解作业创建的基础知识后,请考虑创建使用以下一个或多个其他配置选项的作业:

  • 控制对作业的访问权限:

  • 为作业配置其他选项:

    • 使用 MPI 库配置任务通信介绍了如何使用消息传递接口 (MPI) 库配置具有相互依赖的任务(这些任务可通过不同虚拟机相互通信)的作业。MPI 的一个常见使用场景是紧密耦合的高性能计算 (HPC) 工作负载。

    • 自定义运行作业的资源:

      • 使用虚拟机实例模板定义作业资源介绍了如何指定 Compute Engine 虚拟机模板,以便在创建作业时定义作业的资源。

      • 为作业使用 GPU - 介绍了如何定义使用一个或多个图形处理单元 (GPU) 的作业。使用 GPU 的作业的常见用例包括密集型数据处理或机器学习 (ML) 工作负载。

      • 为作业使用存储卷介绍了如何定义可以访问一个或多个外部存储卷的作业。 存储选项包括新的或现有的永久性磁盘、新的本地 SSD、现有 Cloud Storage 存储分区和现有的网络文件系统 (NFS)(例如 Filestore 文件共享)。

      • 虚拟机操作系统环境概览简要介绍了何时以及如何为作业自定义虚拟机操作系统 (OS) 环境,包括作业的虚拟机操作系统映像和启动磁盘。

    • 优化作业的各个方面:

      • 改进监控和分析功能:

        • 写入任务日志介绍了如何配置作业的可运行对象来写入任务日志。通过写入任务日志,您可以在 Cloud Logging 中显示自定义信息,这有助于使作业更易于分析和问题排查。

        • 配置自定义状态事件介绍了如何为作业的可运行对象配置自定义状态事件。通过自定义状态事件,您可以描述可运行对象上发生的重要事件,并在查看作业的状态事件历史记录时显示,这有助于您更轻松地对作业进行分析和问题排查。

        • 启用状态通知介绍了如何配置作业以发送有关其状态的 Pub/Sub 通知,您可以选择在 BigQuery 表中存储和查询这些通知。在阅读本文档之前,请先配置您的项目,以使用 Pub/Sub 通知和 BigQuery 监控作业状态

      • 自动重试任务介绍了如何在发生全部或指定的失败后自动重试作业的任务。自动重试有助于减少遇到临时错误的作业所需的阻力,并缩短所需的总运行时间。例如,自动重试在 Spot 虚拟机上运行的作业,可以提供大幅折扣,但可能并非始终可用且可能随时被抢占。

      • 共置虚拟机以减少延迟时间介绍了如何要求虚拟机彼此靠近,以缩短作业中的虚拟机之间的网络延迟时间。对于在虚拟机之间频繁进行网络通信的作业(例如使用 MPI 库进行通信的任务),这种性能优势尤为有用。

      • 如需了解如何配置可在预留虚拟机上运行的作业,请参阅使用虚拟机预留确保资源可用性。使用预留虚拟机有助于最大限度地缩短作业的调度时间、防止出现资源可用性错误,以及优化费用。

      • 使用映像流式传输介绍了如何通过从 Artifact Registry 流式传输容器映像缩短作业启动时间。

  • 使用其他服务创建和运行作业:

后续步骤