本文档介绍如何通过在创建作业时指定 Compute Engine 虚拟机实例模板,来为批量作业定义虚拟机资源。
Batch 会自动定义运行作业的虚拟机资源类型(instances[]
子字段),除非您使用以下方法之一定义它们:
- 如创建基本作业中所举例所示,使用
policy
字段直接定义作业的虚拟机资源。 - 如本文档中所述,使用
instanceTemplate
字段可以通过指定虚拟机实例模板来定义作业的虚拟机资源。创建使用非默认虚拟机映像的作业需要使用此方法。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并在满足项目和用户的前提条件以启用 Batch。
-
如需获取创建作业所需的权限,请让管理员授予您以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
对作业的服务帐号拥有的 Service Account User (
roles/iam.serviceAccountUser
),默认为默认的 Compute Engine 服务帐号 -
通过 Compute Engine 虚拟机实例模板创建作业:
对虚拟机实例模板使用 Compute Viewer (
roles/compute.viewer
)
如需详细了解如何授予角色,请参阅管理访问权限。
-
项目的 Batch Job Editor (
使用 Compute Engine 虚拟机实例模板创建作业
本部分提供有关如何根据现有虚拟机实例模板创建基本脚本作业的示例。您可以使用 gcloud CLI、Batch API、Go、Java、Node.js、Python 或 C++ 基于虚拟机实例模板创建作业。
gcloud
如需使用 gcloud CLI 基于虚拟机实例模板创建作业,请使用 gcloud batch jobs submit
命令,并在作业的 JSON 配置文件中指定虚拟机实例模板。
例如,如需根据虚拟机实例模板创建基本脚本作业,请使用以下代码:
在当前目录中创建一个名为
hello-world-instance-template.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks." } } ], "computeResource": { "cpuMilli": 2000, "memoryMib": 16 }, "maxRetryCount": 2, "maxRunDuration": "3600s" }, "taskCount": 4, "parallelism": 2 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ] }, "labels": { "department": "finance", "env": "testing" }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
替换以下内容:
INSTALL_GPU_DRIVERS
:可选。如果设置为true
,Batch 会提取您在 Compute Engine 虚拟机实例模板中指定的 GPU 类型所需的驱动程序,然后 Batch 会代表您安装这些驱动程序。如需了解详情,请参阅如何创建使用 GPU 的作业。INSTANCE_TEMPLATE_NAME
:现有 Compute Engine 虚拟机实例模板的名称。了解如何创建和列出实例模板。
运行以下命令:
gcloud batch jobs submit example-template-job \ --location us-central1 \ --config hello-world-instance-template.json
API
如需使用 Batch API 创建基本作业,请使用 jobs.create
方法,并在 allocationPolicy
字段中指定虚拟机实例模板。
例如,如需根据虚拟机实例模板创建基本脚本作业,请使用以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-script-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"computeResource": {
"cpuMilli": 2000,
"memoryMib": 16
},
"maxRetryCount": 2,
"maxRunDuration": "3600s"
},
"taskCount": 4,
"parallelism": 2
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"instanceTemplate": "INSTANCE_TEMPLATE_NAME"
}
]
},
"labels": {
"department": "finance",
"env": "testing"
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
替换以下内容:
PROJECT_ID
:您的项目 ID。INSTALL_GPU_DRIVERS
:可选。如果设置为true
,Batch 会提取您在 Compute Engine 虚拟机实例模板中指定的 GPU 类型所需的驱动程序,然后 Batch 会代表您安装这些驱动程序。如需了解详情,请参阅如何创建使用 GPU 的作业。INSTANCE_TEMPLATE_NAME
:现有 Compute Engine 虚拟机实例模板的名称。了解如何创建和列出实例模板。
Go
Go
如需了解详情,请参阅 Batch Go API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 Batch Java API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 Batch Node.js API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
如需了解详情,请参阅 Batch Python API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
C++
C++
如需了解详情,请参阅 Batch C++ API 参考文档。
要向 Batch 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。