本文档介绍了作业的执行过程和创建选项。 借助批量作业,您可以在 Google Cloud 上运行批处理工作负载。如需了解作业的组件和使用 Batch 的前提条件,请参阅 Batch 使用入门。
作业创建和执行的工作原理
如需使用 Batch,您需要创建一个指定工作负载及其要求的作业,然后 Batch 会自动运行该作业。
以下部分详细介绍了作业创建和执行的工作原理:
作业生命周期
本部分介绍作业的生命周期及其从创建到删除的任务。
对于要在 Batch 上运行的每个工作负载,您都需要完成以下基本过程:
- 创建作业:通过指定作业的可运行项、任务和任何其他要求来定义要运行的工作负载。如需详细了解如何创建作业,请参阅本文档的作业创建选项部分。
- 对作业进行监控和问题排查:完成作业的创建后,作业将自动排队、安排并在指定的资源上执行。您可以查看已创建作业或其任何任务的详细信息,了解当前状态。在作业运行或完成后,您还可以使用日志来监控和分析作业。如果作业失败,您可以在重新创建作业之前,使用任何错误消息、状态事件或日志来诊断问题,从而对其进行问题排查。
- 删除或导出作业:根据 Cloud Logging 保留政策,自动保留和删除作业的日志。作业的其他信息在 Batch 中仍然可用,直到您或 Google Cloud 将其删除。Google Cloud 会在作业运行完成 60 天后自动删除作业。在此之前,您可以选择自行删除作业;如果需要保留信息,您可以在删除作业之前将其导出。
创建作业后,它将经历以下状态:
- 已加入队列 (
QUEUED
):作业请求已被接受,并在队列中等待。该作业将保留在队列中,直到所需资源可用并且其前面的作业得到评估为止。 - 已安排 (
SCHEDULED
):已从队列中选择作业以开始运行,并且正在分配资源。 正在运行 (
RUNNING
):已成功为作业创建资源,其任务可以开始运行了。作业运行时,其每项任务都会经历以下状态:
- 待处理 (
PENDING
):任务正在等待虚拟机在其上运行。 - 已分配 (
ASSIGNED
):已为任务分配一个虚拟机以在其上运行。 - 正在运行 (
RUNNING
):任务正在虚拟机上运行。 - 任务完成时处于以下状态之一:
- 成功 (
SUCCEEDED
):任务成功,因为其每个可运行项要么成功(返回零的退出代码),要么是使用忽略退出状态 (ignoreExitStatus
) 字段标记为非关键型的。 - 失败 (
FAILED
):任务失败,因为其中至少有一个关键可运行项失败(返回非零退出代码)。
- 成功 (
- 待处理 (
作业会在以下状态之一完成:
- 成功 (
SUCCEEDED
):作业的所有任务均已成功完成。 - 失败 (
FAILED
):该作业中至少有一个任务失败。
- 成功 (
作业排队和调度
通常,如果作业较小且只需要少量通用资源,则更有可能提前运行并完成。对于 Batch 文档中的示例作业,这些作业通常非常小并且使用的资源很少,您可能会看到它们在短短几分钟内即可完成运行。
具体而言,作业完成排队和调度所需的时间因作业和因以下因素而异:
作业资源可用性:在允许的位置内,作业所需资源的可用性。
首先,如果您恰好指定了该位置未提供的任何资源,则作业将无法运行。发生这种情况时,作业将失败并显示可用区可用性错误。
其次,如果由于资源可用性错误而导致作业的任何所需资源容量偏低,则作业更有可能延迟或失败。因此,当您需要更少、更常用的资源,并且不限制作业在某个区域的任何可用区中运行时,您的作业可能会更快运行。
如需详细了解作业资源,请参阅本文档中的作业执行。如需详细了解您可以为 Batch 作业及其资源指定的位置,请参阅位置页面。
作业优先级:某个作业相对于项目中其他作业的优先级。
您可以视需要添加 gcloud CLI 的
--priority
标志或priority
JSON 字段,以指定作业的优先级。您可以将作业的优先级定义为0
(最低优先级)和99
(最高优先级)之间的数字。设置较高的优先级有助于使作业的运行时间早于项目中优先级较低的作业。如果不配置作业的优先级,则默认使用最低优先级
0
。如果两个已加入队列的作业具有相同的优先级,则最先创建的作业的优先级较高。配额和限制:您的项目针对 Google Cloud 资源和请求设置的阈值。
如果作业超出任何所需资源或请求的限额或项目配额,则无法运行。发生这种情况时,Batch 可能会延迟作业并在稍后重试,或者让作业失败并显示相关错误。
您可以创建符合所有相关限制的作业并确保项目具有足够的相关配额,从而防止作业出现延迟和错误。如需了解详情,请参阅批量处理配额和限制。
作业执行
执行作业所需的时间可能因任务调度和作业的资源而异。
任务调度
作业运行时,系统会根据调度政策 (schedulingPolicy
) 字段安排其任务,该字段允许您指定以下选项之一:
- 尽快 (
AS_SOON_AS_POSSIBLE
)(默认):在资源可用时立即运行任务,并且可以并行运行。一次运行的任务数量取决于作业资源和其他配置选项所允许的每个虚拟机的并行任务,如本文档的作业资源中所述。 - 顺序 (
IN_ORDER
):任务以递增的索引顺序一次运行一个。
作业资源
每个批量作业都在一个区域级代管式实例组 (MIG) 上运行,MIG 是指由一个或多个匹配的 Compute Engine 虚拟机 (VM) 实例组成的群组,每个实例都位于一个所含区域。每个虚拟机都有专用硬件(具体是指虚拟 CPU (vCPU))和内存(会影响作业性能)和启动磁盘(用于存储操作系统 (OS) 映像和运行作业的指令)。
在作业运行时,Batch 会自动创建和删除符合您的规范的资源。创建作业时,您可以通过指定以下内容来配置其资源:
您必须指定运行每项任务所需的计算资源(vCPU、内存和(如果需要)额外的启动磁盘存储空间),除非默认值足够。如需了解详情,请参阅每个任务的计算资源 (
computeResource
) 字段和子字段。(可选)您还可以指定要使用的虚拟机类型以及每个虚拟机提供的其他资源,例如 GPU 和存储卷。如果您未指定这些选项,Batch 会选择兼容的虚拟机类型,并且不会添加任何其他资源。如需了解详情,请参阅虚拟机实例资源 (
instances[]
) 字段和子字段。
根据任务调度和您指定的硬件要求,不同作业的虚拟机数量和可在每个虚拟机上同时运行的任务数量会有所不同。如果指定让作业的任务运行 IN_ORDER
,则该作业将具有一个虚拟机,并且一次仅运行一个任务。否则,如果作业的任务运行 AS_SOON_AS_POSSIBLE
,则您可以使用以下公式估算虚拟机数量和同时执行的任务数量:
\[{vmsPerJob}=\frac{taskCount}{parallelTasksPerVm}\]
此公式具有以下值:
- \({vmsPerJob}\):作业的最大虚拟机数量。例如,如果 Batch 预期在更少的资源上运行作业比等待更多资源更快,那么为作业创建的实际虚拟机数量可能少于此值。此值还受每个作业的并发虚拟机数限制的限制。
- \({taskCount}\):作业的任务总数,您可以使用任务计数 (
taskCount
) 字段对其进行定义。 \({parallelTasksPerVM}\):一个虚拟机上可同时运行的任务数上限。
此值由以下所有条件决定:
最小值为 1 个任务。
最大值为 20 个任务和每个作业的并行任务数上限 (
parallelism
) 字段的值(若已定义)中的较小者。如果定义了每个虚拟机的并行任务数上限 (
taskCountPerNode
) 字段,系统会使用该值。否则,如果未定义
taskCountPerNode
,Batch 会将每个虚拟机的计算资源总数(具体来说就是 vCPU)除以每个任务所需的数量,从而确定一个值:\[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]
此公式具有以下值:
\({vcpusPerVm}\):每个虚拟机的 vCPU 总数,该数量取决于作业虚拟机的机器类型。
\({vcpusPerTask}\):每个任务的 vCPU 数量,通过转换每个任务的 vCPU 数量 (
cpuMilli
) 字段的单位确定。
作业创建选项
创建和运行基本作业介绍了一些基础知识,包括如何使用脚本或容器映像定义可运行作业,以及如何配置预定义和自定义环境变量。
了解作业创建的基础知识后,请考虑创建使用以下一个或多个其他配置选项的作业:
控制对作业的访问权限:
使用自定义服务帐号控制作业的访问权限介绍了如何指定作业的服务帐号,该设置会影响作业的虚拟机可以访问的资源和应用。如果未指定自定义服务帐号,则作业默认使用 Compute Engine 默认服务帐号。
网络概览简要介绍了何时以及如何为作业自定义网络配置,包括指定作业的网络、阻止外部连接以及使用 VPC Service Controls 保护数据和资源。
使用 Secret Manager 保护敏感数据介绍了如何在创建作业时使用 Secret Manager Secret 指定加密信息,从而安全地定义敏感数据,例如自定义环境变量和登录凭据。
为作业配置其他选项:
使用 MPI 库配置任务通信介绍了如何使用消息传递接口 (MPI) 库配置具有相互依赖的任务的任务,这些任务在不同虚拟机之间相互通信。MPI 的常见用例是紧密耦合的高性能计算 (HPC) 工作负载。
自定义运行作业的资源:
使用虚拟机实例模板定义作业资源一文介绍了如何指定 Compute Engine 虚拟机模板,以便在创建作业时定义作业的资源。
使用 GPU 执行作业介绍了如何定义使用一个或多个图形处理单元 (GPU) 的作业。使用 GPU 的作业的常见使用场景包括密集型数据处理或机器学习 (ML) 工作负载。
将存储卷用于作业介绍了如何定义可以访问一个或多个外部存储卷的作业。存储选项包括新的或现有的永久性磁盘、新的本地 SSD、现有的 Cloud Storage 存储分区以及现有的网络文件系统 (NFS),例如 Filestore 文件共享。
虚拟机操作系统环境概览简要介绍了何时以及如何为作业自定义虚拟机操作系统 (OS) 环境,包括作业的虚拟机操作系统映像和启动磁盘。
优化作业的各个方面:
改善监控和分析:
写入任务日志介绍了如何配置作业的可运行对象以写入任务日志。通过写入任务日志,您可以在 Cloud Logging 中显示自定义信息,以便更轻松地分析作业和排查问题。
配置自定义状态事件介绍了如何为作业的可运行项配置自定义状态事件。借助自定义状态事件,您可以描述可运行对象发生的重要事件,并在您查看作业的状态事件记录时显示,这有助于更轻松地分析作业和排查问题。
启用状态通知介绍了如何配置作业以发送有关其状态的 Pub/Sub 通知,您可以选择在 BigQuery 表中存储和查询这些通知。在阅读本文档之前,请先配置您的项目以使用 Pub/Sub 通知和 BigQuery 监控作业状态。
启用 Ops Agent 指标介绍了如何将作业配置为自动安装 Ops Agent。Ops Agent 会收集有关作业资源性能和利用率的其他指标。如需详细了解如何查看和使用资源指标,请参阅通过查看指标监控和优化作业资源。
自动重试任务说明了如何在发生所有失败或指定失败后自动重试作业的任务。自动重试有助于减少遇到临时错误的作业所需的问题排查摩登和总运行时间。例如,对在 Spot 虚拟机上运行的作业使用自动重试,这种方式可以提供大幅折扣,但可能并不总是可用,并且可能随时被抢占。
共置虚拟机以缩短延迟时间说明了如何通过要求虚拟机在物理上彼此靠近来缩短作业虚拟机之间的网络延迟时间。这种性能优势对于跨虚拟机进行频繁网络通信的作业特别有用,例如使用 MPI 库进行通信的任务。
如需了解如何配置可在预留虚拟机上运行的作业,请参阅使用虚拟机预留确保资源可用性。使用预留虚拟机有助于最大限度地缩短作业的调度时间,防止资源可用性错误并优化费用。
使用映像流式传输介绍了如何通过从 Artifact Registry 流式传输容器映像来缩短作业启动时间。
使用其他服务创建和运行作业:
使用 Workflows 编排作业说明了如何使用 Workflows 按照您使用 Workflows 语法定义的顺序执行作业的任务。
使用 Nextflow 编排作业介绍了如何通过 Nextflow 流水线运行批量作业,该流水线可用于编排生物信息学工作流。
使用 dsub 编排作业介绍了如何通过
dsub
流水线运行批量作业,该流水线可用于在 Google Cloud 服务上编排批处理工作流。使用 Terraform 和 Cloud Scheduler 创建和运行批量作业介绍了如何将批量作业合并到 Terraform 中。借助 Terraform,您可以通过在配置文件中指定首选状态来预配和管理基础架构,这些状态可被视为代码并存储在 GitHub 等版本控制系统中。