本文档介绍了如何创建和运行使用图形处理器 (GPU) 的作业。
创建 Batch 作业时,您可以选择向运行作业的虚拟机添加一个或多个 GPU。使用 GPU 的作业的常见用例包括密集型数据处理和机器学习 (ML) 工作负载。
须知事项
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并完成项目和用户前提条件以启用 Batch。
-
如需获取创建作业所需的权限,请让管理员向您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务帐号的 Service Account User (
roles/iam.serviceAccountUser
),默认为默认 Compute Engine 服务帐号
如需详细了解如何授予角色,请参阅管理访问权限。
-
项目的 Batch Job Editor (
创建使用 GPU 的作业
如需创建使用 GPU 的作业,请执行以下操作:
- 查看使用 GPU 的作业的要求部分,以确定可用于创建作业的方法。
- 使用您选择的方法创建作业。如需查看如何使用推荐方法创建作业的示例,请参阅创建使用 GPU 的示例作业部分。
使用 GPU 的作业需满足的要求
如需使用 GPU,作业必须执行以下所有操作:
- 根据作业的要求自动或手动安装所需的 GPU 驱动程序。
- 如果作业为其虚拟机指定了任何其他资源(直接指定或使用虚拟机实例模板),则该作业必须定义兼容的虚拟机资源。
确定如何满足作业的这些要求后,您还需要定义作业的 GPU 和位置。一个作业的虚拟机可以使用一个或多个您指定的类型的 GPU。作业的虚拟机允许的位置(如果未定义,则作业位置)必须具有指定类型的 GPU。如需详细了解如何定义 GPU 类型、GPU 数量和作业的有效位置,请参阅示例。
安装 GPU 驱动程序
如需安装所需的 GPU 驱动程序,请选择以下方法之一:
自动安装驱动程序(建议如有可能):如示例中所示,如需让 Batch 能够从第三方位置提取所需的 GPU 驱动程序并代表您安装,请将作业的
installGpuDrivers
字段设置为true
。如果您的作业不需要手动安装驱动程序,建议您使用此方法。手动安装驱动程序:如果满足以下任一条件,则必须使用此方法:
- 作业同时使用脚本和容器可运行对象,且没有互联网访问权限。 如需详细了解作业的访问权限,请参阅批量网络概览。
- 作业使用自定义虚拟机映像。如需详细了解虚拟机操作系统映像以及您可以使用的虚拟机操作系统映像,请参阅虚拟机操作系统环境概览。
如需手动安装所需的 GPU 驱动程序,建议采用以下方法:
创建包含 GPU 驱动程序的自定义虚拟机映像。
如需安装 GPU 驱动程序,请根据要使用的操作系统运行安装脚本:
如果您的作业具有任何容器可运行对象,并且不使用 Container-Optimized OS,您还必须安装 NVIDIA Container Toolkit
使用 Compute Engine 实例模板创建和提交使用自定义虚拟机映像的作业。将作业的
installGpuDrivers
字段设置为false
(默认)。
定义兼容的虚拟机资源
如果您的作业定义了 GPU 以外的任何虚拟机资源(任何 instances[]
子字段),您必须以兼容的方式定义这些虚拟机资源。
如需为作业的虚拟机定义资源(包括任何 GPU),您只能使用以下方法:
- 直接定义资源(推荐):如示例中所示,如需直接为作业的虚拟机定义资源,请使用
policy
字段。 - 在模板中定义资源:通过指定 Compute Engine 实例模板,为作业的虚拟机定义资源。
此外,您定义的所有资源都必须与作业的 GPU 类型和数量兼容。如需详细了解可与 GPU 搭配使用的虚拟机资源,请参阅 Compute Engine 文档中的 GPU 平台。
创建使用 GPU 的示例作业
您可以使用 gcloud CLI 或 Batch API 创建使用 GPU 的作业。
gcloud
创建一个 JSON 文件,用于指定作业的配置详细信息、
accelerators[]
字段的type
和count
子字段以及具有这些类型 GPU 的位置。例如,如需创建一个使用 GPU 的基本脚本作业、自动安装所需的 GPU 驱动程序并指定作业的虚拟机允许的位置,请创建一个包含以下内容的 JSON 文件:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
请替换以下内容:
INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 会代表您安装这些驱动程序。如果您将此字段设置为false
(默认值),则需要手动安装 GPU 驱动程序才能为此作业使用任意 GPU。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。GPU_COUNT
:指定类型的 GPU 数量。ALLOWED_LOCATIONS
:可选。允许运行作业的虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定了允许的位置,则必须选择区域以及一个或多个可用区(可选)。您选择的位置必须具有此作业所需的 GPU 类型。否则,如果省略此字段,则作业的位置必须具有 GPU 类型。如需了解详情,请参阅allowedLocations[]
字段。
如需创建并运行作业,请使用
gcloud batch jobs submit
命令:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
请替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:作业的位置。JSON_CONFIGURATION_FILE
:包含作业配置详情的 JSON 文件的路径。
API
向 jobs.create
方法发出 POST
请求,以指定作业的配置详细信息、accelerators[]
字段的 type
和 count
子字段,以及具有这些类型 GPU 的位置。
例如,如需创建一个使用 GPU 的基本脚本作业、自动安装所需的 GPU 驱动程序并指定作业的虚拟机允许的位置,请创建一个包含以下内容的 JSON 文件:
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,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
请替换以下内容:
PROJECT_ID
:您的项目 ID。LOCATION
:作业的位置。JOB_NAME
:作业的名称。INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 会代表您安装这些驱动程序。如果您将此字段设置为false
(默认值),则需要手动安装 GPU 驱动程序才能为此作业使用任意 GPU。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。GPU_COUNT
:指定类型的 GPU 数量。ALLOWED_LOCATIONS
:可选。允许运行作业的虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定了允许的位置,则必须选择区域以及一个或多个可用区(可选)。您选择的位置必须具有此作业所需的 GPU 类型。否则,如果省略此字段,则作业的位置必须具有 GPU 类型。如需了解详情,请参阅allowedLocations[]
字段。