本文档介绍了作业的执行过程和创建选项。 借助批量作业,您可以在 Google Cloud 控制台上运行批处理工作负载 Google Cloud了解作业的组成部分和 使用 Batch 的前提条件,请参阅 Batch 使用入门。
作业创建和执行的工作原理
要使用 Batch,您需要创建一个作业,指定 您的工作负载及其要求 并自动运行
详细介绍了作业创建和执行的工作原理 :
作业生命周期
本部分介绍作业的生命周期及其从创建开始所执行的任务 删除。
对于您希望在批处理作业中运行的每个工作负载,您都需要完成以下基本流程:
- 创建作业:通过指定 作业的可运行对象、任务和任何其他要求有关 创建作业的步骤 本文档中的作业创建选项部分。
- 监控和排查作业问题:创建作业后,系统会自动将作业加入队列、安排时间并在指定资源上执行作业。您可以查看已创建作业或其任何任务的详细信息,以了解当前状态。如有需要,您可以取消作业(预览)以停止或阻止其运行。作业运行或完成后,您还可以使用日志监控和分析作业。如果作业失败,您可以进行问题排查 使用任何错误消息、状态事件或日志来诊断问题 然后再重新创建作业
- 删除或导出作业:Batch 中的作业信息 在您或 Google Cloud 将其删除之前,它仍然可用。 Google Cloud 会在作业运行完成 60 天后自动删除作业。 在此之前,您可以根据需要自行删除作业,或者 即可导出作业信息 在删除作业之前的批处理任务。任何有关 并不会影响存储在其他 Google Cloud 服务中的作业, 具有单独的保留政策。例如,某个职位的 根据 Cloud Logging 保留政策。
创建作业后,作业会经历以下状态:
- 已加入队列 (
QUEUED
):作业请求已被接受并正在等待 在队列中。该作业会一直留在队列中,直到所需资源可用且排在其前面的作业均已评估完毕。 - 已安排 (
SCHEDULED
):已从队列中选择作业 系统即会开始运行,而且系统正在分配资源。 正在运行 (
RUNNING
):已为作业创建资源 其任务就可以开始运行了作业运行时,会逐步完成 以下状态:
- 待处理 (
PENDING
):任务正在等待在虚拟机上运行。 - 已分配 (
ASSIGNED
):已为任务分配一个虚拟机以在其上运行。 - 正在运行 (
RUNNING
):任务正在虚拟机上运行。 任务完成时处于以下状态之一:
成功 (
SUCCEEDED
):任务成功,因为 其可运行对象满足下列条件之一:- 可运行对象成功(返回一个 退出代码 值为零)。
- 可运行状态失败(返回非零退出代码),但属于非关键可运行状态(您已启用
可运行对象的
ignoreExitStatus
字段)。 - Runnable 没有完成,但属于后台 Runnable(您
启用了可运行对象的
background
字段)。
失败 (
FAILED
):由于至少有一个可运行项不满足上述条件,因此任务失败并停止运行。
- 待处理 (
作业会在以下状态之一完成:
作业队列和调度
通常,作业越小且只需要少量常用资源,就越有可能更快地运行和完成。对于示例作业 通常非常小 并使用最少的资源 几分钟。
具体而言,作业完成排队和调度所需的时间各有不同 在不同时间、不同工作岗位,具体取决于以下因素:
作业资源可用性: 在允许的 位置。
首先,如果您恰好指定了任何资源 那么作业将失败,并且 可用区可用性错误。
其次,如果作业的任何所需资源因资源可用性错误而相对于当前需求的容量较低,则作业更有可能延迟或失败。因此,如果您所需的资源较少,则您的作业可能会更快运行。 不会限制运行作业 同一区域的多个可用区中
有关作业资源的更多信息,请参阅 Job execution(作业执行): 本文档。如需详细了解 可以为 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}{parallelTasksPerVm}\]
此公式具有以下值:
- \({vmsPerJob}\):作业的虚拟机数量上限。实际的虚拟机数量 可能会小于该值 - 例如,如果 Batch 希望使用更少的资源更快地运行作业 而不必等待更多资源该值还受 每个作业的并发虚拟机数限制。
- \({taskCount}\):作业的任务总数,由您定义
使用任务计数 (
taskCount
) 字段。 \({parallelTasksPerVM}\):可以在虚拟机上运行的任务数上限 。
该值由以下所有条件决定 条件:
最小值为 1 个任务。
最大值为 20 个任务中的较小者,以及值(若已定义) 每个作业的并行任务数上限 (
parallelism
) 字段中填写的值。如果 每个虚拟机的并行任务数上限 (
taskCountPerNode
) 字段 系统就会使用该值否则,如果未定义
taskCountPerNode
,则批处理 会除以 计算资源(具体来说就是 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) 环境,包括作业的 虚拟机操作系统映像和启动磁盘。
优化作业的各个方面:
改善监控和分析:
写入任务日志介绍了如何 配置作业的可运行对象以写入任务日志。 通过写入任务日志,您可以发掘自定义信息 有助于简化作业 来分析和排查问题
配置自定义状态事件介绍了如何为作业的可运行项配置自定义状态事件。通过自定义状态事件,您可以 触发这些事件 查看作业的状态事件历史记录, 以便更轻松地分析作业和进行问题排查。
启用状态通知介绍了如何配置作业以发送有关其状态的 Pub/Sub 通知,您可以选择在 BigQuery 表中存储和查询这些通知。在阅读本文档之前,请将项目配置为 使用 Pub/Sub 通知和 BigQuery 监控作业状态 。
启用 Ops Agent 指标 说明了如何配置作业以自动安装 Ops Agent 。Ops Agent 会收集有关 作业资源的性能和利用率。 如需详细了解如何查看和使用资源指标,请参阅通过查看指标监控和优化作业资源。
自动重试任务 说明如何自动重试作业的任务, 指定的失败。自动重试有助于减少 问题排查和整体运行时间 (出现临时错误的作业)。 例如,针对在 Spot 虚拟机上运行的作业使用自动重试。Spot 虚拟机可提供大幅折扣,但可能并不总是可用,并且可随时被抢占。
共置虚拟机以缩短延迟时间 解释了如何通过 要求虚拟机物理上彼此靠近。 这种性能优势对于 会频繁地在虚拟机之间进行网络通信, 使用 MPI 库进行通信。
使用虚拟机预留确保资源可用性 解释了如何配置一个作业, 可以在预留的虚拟机上运行使用预留 虚拟机可以帮助您最大限度地缩短作业的调度时间, 防止资源可用性错误,以及 优化成本。
使用映像流式传输介绍了如何从 Artifact Registry 流式传输容器映像,以缩短作业启动时间。
使用其他服务创建和运行作业:
使用 Workflows 编排作业介绍了如何使用 Workflows 按照您使用 Workflows 语法定义的顺序执行作业的任务。
使用 Nextflow 编排作业介绍了如何 通过 Nextflow 流水线, 可用于编排生物信息学工作流。
使用 dsub 编排作业介绍了如何 通过
dsub
流水线,可用于编排批处理工作流 Google Cloud 服务使用 Terraform 和 Cloud Scheduler 创建和运行批处理作业 介绍了如何将 Batch 作业整合到 Terraform 中。 Terraform 你可以通过指定首选提供商来预配和管理 这些状态可被视为代码并存储在 GitHub 等版本控制系统