本文档介绍如何创建在预留资源上运行的作业。
预留是 Compute Engine 的一项功能。预留提供 能够确保为一个或多个具有 指定的硬件配置。 为虚拟机预留会产生 从创建预留开始,直至删除预留为止。不过,在您使用该虚拟机期间,总费用与未预留的虚拟机相当。
通常,当容量可用性至关重要或需要防止获取资源时,预留非常有用。对于 Batch,请考虑使用专用预留 帮助最大限度地缩短作业调度时间,或尝试使用现有的 预留资源。 如果您有未充分利用的预留(例如承诺使用折扣所需的预留),可以配置作业,以便在预留未被使用时尝试消耗它们,从而帮助优化您所产生的费用。
如需详细了解预留,请参阅 Compute Engine 预留文档。
准备工作
- 如果您以前没有使用过 Batch,请参阅 Batch 使用入门 并通过填写 针对项目和用户的前提条件。
- 请确保您有权执行以下操作: 创建预留或 查看现有预留 您希望作业的虚拟机根据需要使用的资源。
-
如需获取创建作业所需的权限, 请让管理员授予您 以下 IAM 角色:
-
Batch Job Editor (
roles/batch.jobsEditor
) 针对项目 -
作业的服务账号(默认为默认的 Compute Engine 服务账号)上的 Service Account User (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
Batch Job Editor (
限制
除了预订的一般限制之外,批量预订还具有以下限制:
- 作业的虚拟机无法使用共享预留。
- 如果作业的虚拟机指定了 紧凑布置政策。
使用要求
本部分总结了作业的虚拟机使用 预留。 如需详细了解所有要求,请参阅 Compute Engine 文档中的预留的一般要求,以及本文档后面的配置规划流程。
为了让作业的虚拟机通常能够使用预留, 必须满足以下条件:
作业和预留必须指定完全匹配的虚拟机属性。
您必须遵守本文档中的所有限制以及预订的所有其他一般要求。
为了让作业的每个虚拟机成功使用预留, 预留必须有未使用的可用容量 虚拟机的运行时间
预留的未用容量是其虚拟机数量与当前使用该预留的虚拟机数量之间的差值。无论何时,虚拟机都会尝试使用预留 您有未使用的预留容量。这样,虚拟机就可以 预留资源。虚拟机在停止运行或预留被删除之前,不会停止使用预留。
根据未使用的预留总容量, 作业的虚拟机可能会使用预留, 会在作业的整个运行时间内发生变化。
创建并运行可以使用预留虚拟机的作业
规划配置。 如需确保您的作业和预留兼容,请先完成 执行下列步骤。
如果要使用已存在的预留, 具有相应配置的作业。否则,如果您打算创建新的预订,请选择您偏好的配置选项。
确定预留属性。受限制条件的约束,共享类型必须为单项目,这是预留的默认选项。确定要用于 以下预留属性:
- 消耗类型*
- 虚拟机数量†
确定作业和预留的虚拟机属性。 由于存在限制,作业和预留都不能 指定紧凑布置政策,这是默认选项 同时适用于预留和作业 确定要用于以下各项的值 虚拟机属性(必须与此属性完全一致) 针对预留和作业:
- 项目
- 可用区*
- 机器类型†
- 满足最低要求的 CPU 平台†(如果有‡)
- GPU 类型和数量†(如果有‡)
- 本地 SSD 类型和数量†(如果有‡)
- 预留相似性†#
*作业虚拟机必须与预留的虚拟机位于同一可用区。必须在作业的
allowedLocations[]
字段或如果省略allowedLocations[]
字段,请设置职位的位置 此可用区所属的区域。†该作业必须使用
policy
子字段或 虚拟机实例模板。 作业不能同时指定policy
子字段和模板。‡ 无法为一项资源定义可选字段, 。为预订和作业定义或省略可选字段。如果作业指定虚拟机实例模板 这也适用于指定模板中的字段。
#预留的 消费类型 确定作业虚拟机所需的预留亲和性, 您必须在作业中指定以下内容:
- 如果作业使用的是虚拟机实例模板,该模板需要 按照预留文档中的说明配置预留亲和性。
- 如果作业未使用模板,但预留
请在
招聘信息的
reservation
字段。 - 否则,如果作业未使用模板,且预留为
忽略作业的
reservation
字段。
准备预留。如果您还没有这样做过, 创建预留 您希望作业的虚拟机使用的特定资源确保预订包含您计划的房源。
创建并运行作业。您可以创建并运行使用虚拟机的作业 使用 gcloud CLI 或 Batch API:
gcloud
创建一个 JSON 文件,用于指定作业的配置详细信息 用于设置 虚拟机实例资源 (
instances[]
) 子字段 与预留的虚拟机属性完全匹配。例如,若要创建一个从预订中消耗虚拟机的基本脚本作业,请创建一个包含以下内容的 JSON 文件:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
将
VM_RESOURCES
替换为虚拟机资源 该预留与您希望作业使用的预留匹配 指定您计划在instances[]
先前的步骤。例如,从
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
如需使用此值,请进行以下所有更改:
是否要使用实例模板?
是:替换
policy
字段替换为instanceTemplate
字段,并指定现有的 与预留匹配的虚拟机实例模板。例如: 请参阅 使用虚拟机实例模板 如果预留使用 GPU 或本地 SSD,那么您还需要 配置作业的installGpuDrivers
字段volumes[]
字段。否则,请跳过其余的 更改。否:将
MACHINE_TYPE
替换为 与预留相同的机器类型
预订是否包含满足最低要求的 CPU 平台?
是:将
MIN_CPU_PLATFORM
替换为 相同的最低要求 CPU 平台。否:移除
minCpuPlatform
字段。
预留是否包含 GPU?
是:替换
INSTALL_GPU_DRIVERS
、GPU_TYPE
和GPU_COUNT
,以匹配预订。例如,请参阅 使用 GPU。否:移除
installGpuDrivers
字段和accelerators[]
字段。
预留是否包含本地 SSD?
是:替换
LOCAL_SSD_SIZE
并LOCAL_SSD_NAME
来匹配预留, 并通过添加 YAML 文件volumes[]
字段 任务。例如,请参阅 使用本地 SSD。否:移除
disks[]
字段。
预留是否使用了特定的使用类型?
是:替换
SPECIFIC_RESERVATION_NAME
替换为预留的名称。否:移除
reservation
字段。
例如,假设您使用的是自动消费的 为
n2-standard-32
个虚拟机预留(未指定任何资源) 满足最低要求的 CPU 平台、GPU 或本地 SSD。此外,您不想指定虚拟机实例模板。在这种情况下,您必须替换VM_RESOURCES
替换成以下值:"policy": { "machineType": "n2-standard-32" }
如需创建并运行作业,请使用
gcloud batch jobs submit
命令:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:位置 作业的组成部分。除非作业指定allowedLocations[]
字段,此字段必须是区域 这个文件包含预留的可用区JSON_CONFIGURATION_FILE
:JSON 路径 该文件包含作业的配置详情。
API
请发送
POST
请求至jobs.create
方法 用于设置 虚拟机实例资源 (instances[]
) 子字段 与预留的虚拟机属性完全匹配。例如,如需创建一个基本脚本作业,该作业使用 请发出以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
替换以下内容:
PROJECT_ID
: 项目 ID 项目名称LOCATION
:作业的位置。除非作业指定allowedLocations[]
字段,此字段必须是区域 这个文件包含预留的可用区JOB_NAME
:作业的名称。VM_RESOURCES
:虚拟机资源 该预留与您希望作业使用的预留匹配 指定您计划在instances[]
先前的步骤。例如,从
VM_RESOURCES
:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
如需使用此值,请进行以下所有更改:
是否要使用实例模板?
是:替换
policy
字段替换为instanceTemplate
字段,并指定现有的 与预留匹配的虚拟机实例模板。例如,请参阅使用虚拟机实例模板的代码示例。如果预留使用 GPU 或本地 SSD,那么您还需要 配置作业的installGpuDrivers
字段volumes[]
字段。否则,请跳过其余的 更改。否:将
MACHINE_TYPE
替换为 与预留相同的机器类型
预订是否包含满足最低要求的 CPU 平台?
是:将
MIN_CPU_PLATFORM
替换为 相同的最低要求 CPU 平台。否:移除
minCpuPlatform
字段。
预留是否包含 GPU?
是:替换
INSTALL_GPU_DRIVERS
。GPU_TYPE
和GPU_COUNT
以匹配预留。 例如,请参阅 使用 GPU。否:移除
installGpuDrivers
字段和accelerators[]
字段。
预留是否包含本地 SSD?
是:替换
LOCAL_SSD_SIZE
并LOCAL_SSD_NAME
来匹配预留, 并通过添加 YAML 文件volumes[]
字段 任务。例如,请参阅使用本地 SSD 的代码示例。否:移除
disks[]
字段。
预留是否使用了特定的使用类型?
是:替换
SPECIFIC_RESERVATION_NAME
替换为预留的名称。否:移除
reservation
字段。
例如,假设您使用的是自动消费的 为
n2-standard-32
个虚拟机预留(未指定任何资源) 满足最低要求的 CPU 平台、GPU 或本地 SSD。此外,您还可以 不想指定虚拟机实例模板 在这种情况下,您必须将VM_RESOURCES
替换为以下值:"policy": { "machineType": "n2-standard-32" }