本文档介绍如何创建和运行使用图形处理单元 (GPU) 的作业。
(可选)您可以创建一个批量作业,将一个或多个 GPU 添加到作业中运行的虚拟机。使用 GPU 的作业的常见使用场景包括密集型数据处理和机器学习 (ML) 工作负载。
准备工作
- 如果您之前未使用过 Batch,请查看开始使用 Batch,然后完成项目和用户需满足的前提条件以启用 Batch。
-
如需获取创建作业所需的权限,请让管理员授予您以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
服务帐号的服务帐号上的服务帐号用户 (
roles/iam.serviceAccountUser
),该帐号默认为默认 Compute Engine 服务帐号
如需详细了解如何授予角色,请参阅管理访问权限。
-
项目的 Batch Job Editor (
创建使用 GPU 的作业
或者,您可以创建一个作业,以向运行该作业的每个虚拟机添加一个或多个图形处理单元 (GPU)。如需创建使用 GPU 的作业,请执行以下操作:
- 查看作业使用 GPU 的要求部分,确定可用于创建作业的方法。
- 使用您选择的方法创建作业。有关如何使用推荐方法创建作业的示例,请参阅创建使用 GPU 的作业。
作业使用 GPU 的要求
如需使用任何 GPU,作业必须执行以下所有操作:
安装 GPU 驱动程序
如需安装所需的 GPU 驱动程序,请选择以下方法之一:
自动安装驱动程序(推荐):如示例中所示,如需让 Batch 从第三方位置提取所需的 GPU 驱动程序并代表您安装这些驱动程序,请将作业的
installGpuDrivers
字段设置为true
。手动安装驱动程序:如果出现以下任一情况,则必须使用此方法:
如需手动安装所需的 GPU 驱动程序,建议您采用以下方法:
-
如需安装 GPU 驱动程序,请根据您要使用的操作系统运行安装脚本:
如果您的作业有任何容器可运行且未使用 Container-Optimized OS,您还必须安装 NVIDIA Container Toolkit
使用 Compute Engine 实例模板通过自定义虚拟机映像创建和提交作业。将作业的
installGpuDrivers
字段设置为false
(默认值)。
-
定义虚拟机资源
如需使用 GPU,作业必须指定 GPU 的类型以及数量,并为作业的虚拟机指定兼容的机器类型。如需为作业的虚拟机定义资源,请选择以下方法之一:
- 直接定义资源(推荐):如示例中所示,如需直接为作业的虚拟机定义资源,请使用
policy
字段。 - 在模板中定义资源:通过指定 Compute Engine 实例模板来为作业的虚拟机定义资源。如果您在作业的定义中包含实例模板,则必须使用此方法。
将 GPU 装载到任何容器
如果作业包含您想要使用 GPU 的任何容器可运行对象,您还必须根据该作业的虚拟机映像将 GPU 装载到每个可运行容器:
- 如果作业使用默认虚拟机映像,并且只有容器可运行版本或者使用 Container-Optimized OS 的自定义映像,请执行以下操作:
- 对于
options
字段,请指定--privileged
标志。 - 对于
volumes
字段,请指定/var/lib/nvidia/lib64:/usr/local/nvidia/lib64
和/var/lib/n
vidia/bin:/usr/local/nvidia/bin
路径。
- 对于
- 否则,如果作业使用默认虚拟机映像并且具有容器和脚本可运行项,或者作业使用 Container-Optimized OS 以外的自定义虚拟机映像,请执行以下操作:
- 对于
options
字段,请指定--gpus all
标志。
- 对于
创建使用 GPU 的作业
本部分举例说明了如何使用推荐的方法创建使用 GPU 的作业:该作业会自动安装所需的驱动程序并直接定义它使用的资源。具有容器可运行作业的作业也会将 GPU 装载到容器中。您可以使用 gcloud CLI 或 Batch API 创建使用 GPU 的作业。
gcloud
如需向作业添加 GPU,请根据您要使用的 Runnable 类型查看以下示例之一:
为容器作业添加 GPU
如需使用 gcloud CLI 创建配有默认映像的 GPU 的容器作业,请使用 gcloud batch jobs submit
命令。
例如,如需创建配有 GPU 的容器作业,请运行以下命令:
在当前目录中创建一个名为
hello-world-container-job-gpu.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1", "volumes": [ "/var/lib/nvidia/lib64:/usr/local/nvidia/lib64", "/var/lib/nvidia/bin:/usr/local/nvidia/bin" ], "options": "--privileged" } } ], }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
请替换以下内容:
INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 代表您安装这些驱动程序。如果将此字段设置为false
(默认),则需要手动安装 GPU 驱动程序,才能为此作业使用任何 GPU。MACHINE_TYPE
:作业虚拟机的机器类型,可以是预定义或自定义的。机器类型限制了您可以使用的 GPU 类型。如需创建具有 GPU 的作业,必须填写此字段。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。如需创建具有 GPU 的作业,必须填写此字段。GPU_COUNT
:您在type
字段中指定的类型的 GPU 数量。如需创建具有 GPU 的作业,必须填写此字段。ALLOWED_LOCATIONS
:可选。允许运行作业虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定允许的位置,则必须选择区域以及(可选)一个或多个可用区。您选择的位置必须具有此作业所需的 GPU 类型。如需了解详情,请参阅allowedLocations
数组字段。
运行以下命令:
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-container-job-gpu.json
将 GPU 添加到脚本作业
如需创建使用 gcloud CLI 使用默认映像的 GPU 的脚本作业,请使用 gcloud batch jobs submit
命令。
例如,如需创建配有 GPU 的脚本作业,请运行以下命令:
在当前目录中创建一个名为
hello-world-script-job-gpu.json
且包含以下内容的 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": { "machineType": "MACHINE_TYPE", "accelerators": { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
请替换以下内容:
INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 代表您安装这些驱动程序。如果将此字段设置为false
(默认),则需要手动安装 GPU 驱动程序,才能为此作业使用任何 GPU。MACHINE_TYPE
:作业虚拟机的机器类型,可以是预定义或自定义的。机器类型限制了您可以使用的 GPU 类型。如需创建具有 GPU 的作业,必须填写此字段。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。如需创建具有 GPU 的作业,必须填写此字段。GPU_COUNT
:您在type
字段中指定的类型的 GPU 数量。如需创建具有 GPU 的作业,必须填写此字段。ALLOWED_LOCATIONS
:可选。允许运行作业虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定允许的位置,则必须选择区域以及(可选)一个或多个可用区。您选择的位置必须具有此作业所需的 GPU 类型。如需了解详情,请参阅allowedLocations
数组字段。
运行以下命令:
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-script-job-gpu.json
将 GPU 添加到容器和脚本作业
如需使用 gcloud CLI 创建使用默认映像的 GPU 的容器和脚本作业,请使用 gcloud batch jobs submit
命令。
例如,如需创建配有 GPU 的容器和脚本作业,请使用以下代码:
在当前目录中创建一个名为
hello-world-container-script-job-gpu.json
且包含以下内容的 JSON 文件:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1", "options": "--gpus all" } }, { "script": { "text": "echo Hello world from script task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
请替换以下内容:
INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 代表您安装这些驱动程序。如果将此字段设置为false
(默认),则需要手动安装 GPU 驱动程序,才能为此作业使用任何 GPU。MACHINE_TYPE
:作业虚拟机的机器类型,可以是预定义或自定义的。机器类型限制了您可以使用的 GPU 类型。如需创建具有 GPU 的作业,必须填写此字段。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。如需创建具有 GPU 的作业,必须填写此字段。GPU_COUNT
:您在type
字段中指定的类型的 GPU 数量。如需创建具有 GPU 的作业,必须填写此字段。ALLOWED_LOCATIONS
:可选。允许运行作业虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定允许的位置,则必须选择区域以及(可选)一个或多个可用区。您选择的位置必须具有此作业所需的 GPU 类型。如需了解详情,请参阅allowedLocations
数组字段。
运行以下命令:
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-container-script-job-gpu.json
API
如需向作业添加 GPU,请根据您要使用的 Runnable 类型查看以下示例之一:
为容器作业添加 GPU
如需使用 Batch API 创建 GPU 并使用默认映像的容器作业,请使用 jobs.create
方法。
例如,如需创建带有 GPU 的容器作业,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
"volumes": [
"/var/lib/nvidia/lib64:/usr/local/nvidia/lib64",
"/var/lib/nvidia/bin:/usr/local/nvidia/bin"
],
"options": "--privileged"
}
}
],
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
请替换以下内容:
PROJECT_ID
:项目的项目 ID。INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 代表您安装这些驱动程序。如果将此字段设置为false
(默认),则需要手动安装 GPU 驱动程序,才能为此作业使用任何 GPU。MACHINE_TYPE
:作业虚拟机的机器类型,可以是预定义或自定义的。机器类型限制了您可以使用的 GPU 类型。如需创建具有 GPU 的作业,必须填写此字段。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。如需创建具有 GPU 的作业,必须填写此字段。GPU_COUNT
:您在type
字段中指定的类型的 GPU 数量。如需创建具有 GPU 的作业,必须填写此字段。ALLOWED_LOCATIONS
:可选。允许运行作业的虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定允许的位置,则必须选择区域以及(可选)一个或多个可用区。您选择的位置必须具有此作业所需的 GPU 类型。如需了解详情,请参阅allowedLocations
数组字段。
将 GPU 添加到脚本作业
如需使用 Batch API 创建配有默认映像的 GPU 的脚本作业,请使用 jobs.create
方法。
例如,如需创建配有 GPU 的脚本作业,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
请替换以下内容:
PROJECT_ID
:项目的项目 ID。INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 代表您安装这些驱动程序。如果将此字段设置为false
(默认),则需要手动安装 GPU 驱动程序,才能为此作业使用任何 GPU。MACHINE_TYPE
:作业虚拟机的机器类型,可以是预定义或自定义的。机器类型限制了您可以使用的 GPU 类型。如需创建具有 GPU 的作业,必须填写此字段。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。如需创建具有 GPU 的作业,必须填写此字段。GPU_COUNT
:您在type
字段中指定的类型的 GPU 数量。如需创建具有 GPU 的作业,必须填写此字段。ALLOWED_LOCATIONS
:可选。允许运行作业的虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定允许的位置,则必须选择区域以及(可选)一个或多个可用区。您选择的位置必须具有此作业所需的 GPU 类型。如需了解详情,请参阅allowedLocations
数组字段。
将 GPU 添加到容器和脚本作业
如需使用 Batch API 创建具有默认映像的 GPU 的容器和脚本作业,请使用 jobs.create
方法。
例如,如需创建带有 GPU 的容器和脚本作业,请发出以下请求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
"options": "--gpus all"
}
},
{
"script": {
"text": "echo Hello world from script task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
请替换以下内容:
PROJECT_ID
:项目的项目 ID。INSTALL_GPU_DRIVERS
:可选。设置为true
时,Batch 会从第三方位置提取您在policy
字段中指定的 GPU 类型所需的驱动程序,然后 Batch 代表您安装这些驱动程序。如果将此字段设置为false
(默认),则需要手动安装 GPU 驱动程序,才能为此作业使用任何 GPU。MACHINE_TYPE
:作业虚拟机的机器类型,可以是预定义或自定义的。机器类型限制了您可以使用的 GPU 类型。如需创建具有 GPU 的作业,必须填写此字段。GPU_TYPE
:GPU 类型。您可以使用gcloud compute accelerator-types list
命令查看可用 GPU 类型的列表。如需创建具有 GPU 的作业,必须填写此字段。GPU_COUNT
:您在type
字段中指定的类型的 GPU 数量。如需创建具有 GPU 的作业,必须填写此字段。ALLOWED_LOCATIONS
:可选。允许运行作业的虚拟机实例的位置(例如,regions/us-central1, zones/us-central1-a
允许可用区us-central1-a
)。如果您指定允许的位置,则必须选择区域以及(可选)一个或多个可用区。您选择的位置必须具有此作业所需的 GPU 类型。如需了解详情,请参阅allowedLocations
数组字段。