本文档介绍了作业的执行过程和创建选项。借助批处理作业,您可以在Google Cloud上运行批处理工作负载。如需了解作业的组成部分以及使用 Batch 的前提条件,请参阅 Batch 使用入门。
作业创建和执行的运作方式
如需使用 Batch,您需要创建一个作业来指定工作负载及其要求,然后 Batch 会自动运行该作业。
以下部分详细介绍了作业创建和执行的工作方式:
作业生命周期
本部分介绍了作业及其任务从创建到删除的生命周期。
对于要在 Batch 上运行的每个工作负载,您需要完成以下基本流程:
- 创建作业:您可以通过指定作业的可运行对象、任务和任何其他要求来定义要运行的工作负载。本文档的作业创建选项部分介绍了创建作业的详细信息。
- 监控作业并排查问题:创建作业完成后,系统会自动将作业排入队列,并安排在指定资源上执行。您可以查看已创建作业或其任何任务的详细信息,以了解当前状态。如果需要,您可以取消作业以停止或阻止其运行。作业运行或完成后,您还可以使用日志监控和分析作业。如果作业失败,您可以使用任何错误消息、状态事件或日志来排查问题,然后再重新创建作业。
- 删除或导出作业:Batch 中的作业信息会一直保留,直到您或 Google Cloud 将其删除为止。Google Cloud 会在作业完成后 60 天自动删除作业。在此之前,您可以自行选择删除作业;如果您需要保留相关信息,可以在作业被删除之前,以批处理方式导出作业信息。存储在其他 Google Cloud 服务中的任何作业相关信息在作业被删除时都不会受到影响,并且有单独的保留政策。例如,作业的日志会根据 Cloud Logging 保留政策自动保留和删除。
创建作业后,作业会经历以下状态:
- 已加入队列 (
QUEUED):作业请求已被接受,正在队列中等待。作业会一直保留在项目的队列中,直到可以安排作业为止。当所需资源可用且前面的作业已评估完毕时,系统便会安排作业。不过,为防止作业过时,如果作业超出队列中的最长等待时间,Batch 会自动使作业失败,而不是安排作业。 - 已安排 (
SCHEDULED):作业已从队列中选择出来,即将开始运行,并且正在分配资源。 正在运行 (
RUNNING):作业的资源已成功创建,其任务可以开始运行。作业运行时,其每个任务都会经历以下状态:
- 待处理 (
PENDING):任务正在等待虚拟机运行。 - 已分配 (
ASSIGNED):任务已分配给虚拟机运行。 - 正在运行 (
RUNNING):任务正在虚拟机上运行。 任务完成时处于以下状态之一:
成功 (
SUCCEEDED):任务成功,因为其每个可运行对象都满足以下条件之一:- 可运行对象成功(返回的退出代码为零)。
- 可运行对象 失败(返回了非零退出代码),但属于非关键可运行对象(您已启用可运行对象的
ignoreExitStatus字段)。 - 可运行对象未完成,但属于后台可运行对象(您已启用可运行对象的
background字段)。
失败 (
FAILED):任务失败并停止运行,因为至少有一个可运行对象不满足上述条件。
作业的资源在作业完成之前被删除。
- 待处理 (
作业以以下状态之一完成:
- 成功 (
SUCCEEDED):作业成功完成,因为其所有任务都成功完成。 - 失败 (
FAILED):作业因至少一项任务失败而失败并停止运行。 - 已取消 (
CANCELLED):用户在作业成功或失败之前取消了该作业。
- 成功 (
作业排队和调度
一般来说,如果作业较小且仅需要少量常见资源,则更有可能更快地运行并完成。对于 Batch 文档中的示例作业(通常非常小且使用最少的资源),您可能会看到它们在短短几分钟内完成运行。
具体而言,作业完成排队和调度所需的时间因作业和时间而异,具体取决于以下因素:
用户指定作业前提条件:您要求在调度作业之前必须满足的任何前提条件。
默认情况下,作业没有任何前提条件。您可以选择指定作业在成功或失败之前无法安排一个或多个现有作业。如需了解详情,请参阅安排相关作业(预览版)。
作业优先级:作业相对于项目中其他作业的优先级。
您可以选择通过以下方式指定作业的优先级:为 gcloud CLI 添加
--priority标志或添加priorityJSON 字段。您可以将作业的优先级定义为介于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 和存储卷),主要通过使用虚拟机资源政策 (
instances[].policy) 字段或替代instances[].instanceTemplate字段来实现。(可选)如果您想允许作业使用多种机器类型,也可以使用instanceFlexibilityPolicy字段。如果您将这些字段保留为未定义状态(使用Google Cloud 控制台创建作业时无法实现此操作),Batch 会自动尝试选择兼容的虚拟机,并且不会添加任何其他资源。
对于不同的作业,虚拟机数量和每个虚拟机上可同时运行的任务数量因任务调度和您指定的硬件要求而异。如果您指定作业的任务以 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 虚拟机模板来定义作业的资源。这是一种替代方案,可用于直接使用
instances[].policy字段指定作业的资源。使用 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 虚拟机上运行的作业,请使用自动重试功能,因为 Spot 虚拟机虽然可大幅节省成本,但可能并非始终可用,并且可以随时被抢占。
使用超时限制运行时间介绍了如何限制任务或可运行对象允许的运行时间。通过防止运行时间过长,您可以减少意外费用和延迟。
提高资源可获取性:
提高资源可获取性介绍了什么是资源可获取性,并针对在创建和运行作业时如何提高可获取性提供了建议。
使用虚拟机预留确保资源可用性一文介绍了如何配置可在预留虚拟机上运行的作业。使用预留虚拟机有助于最大限度地缩短作业的调度时间、防止资源可用性错误,并优化费用。
使用实例灵活性提高可获取性一文介绍了如何允许作业在您指定并可进行排名的多种机器类型上运行。使用实例灵活性有助于提高并行性、延迟抢占 Spot 虚拟机,并防止出现资源可用性错误。
缩短延迟时间:
并置虚拟机以缩短延迟时间介绍了如何通过要求作业的虚拟机在物理上彼此靠近来缩短作业的虚拟机之间的网络延迟时间。对于需要在虚拟机之间频繁进行网络通信的作业(例如使用 MPI 库进行通信的任务),这种性能优势尤其有用。
使用映像流式传输介绍了如何通过从 Artifact Registry 流式传输容器映像来缩短作业启动时间。
使用其他服务创建和运行作业:
使用 Workflows 编排作业介绍了如何使用 Workflows 按照您使用 Workflows 语法定义的顺序执行作业的任务。
使用 Nextflow 编排作业介绍了如何通过 Nextflow 流水线运行批量作业,您可以使用该流水线来编排生物信息学工作流。
使用 dsub 编排作业介绍了如何通过
dsub流水线运行批量作业,您可以使用该流水线在 Google Cloud 服务上编排批处理工作流。使用 Terraform 和 Cloud Scheduler 创建并运行 Batch 作业介绍了如何将 Batch 作业纳入 Terraform 中。 借助 Terraform,您可以在配置文件中指定所需状态,从而预配和管理基础架构。这些配置文件可以视为代码,并存储在 GitHub 等版本控制系统中。