创建并运行使用 GPU 的作业

本文档介绍如何创建和运行使用图形处理单元 (GPU) 的作业。

(可选)您可以创建一个批量作业,将一个或多个 GPU 添加到作业中运行的虚拟机。使用 GPU 的作业的常见使用场景包括密集型数据处理和机器学习 (ML) 工作负载。

准备工作

创建使用 GPU 的作业

或者,您可以创建一个作业,以向运行该作业的每个虚拟机添加一个或多个图形处理单元 (GPU)。如需创建使用 GPU 的作业,请执行以下操作:

  1. 查看作业使用 GPU 的要求部分,确定可用于创建作业的方法。
  2. 使用您选择的方法创建作业。有关如何使用推荐方法创建作业的示例,请参阅创建使用 GPU 的作业

作业使用 GPU 的要求

如需使用任何 GPU,作业必须执行以下所有操作:

安装 GPU 驱动程序

如需安装所需的 GPU 驱动程序,请选择以下方法之一:

定义虚拟机资源

如需使用 GPU,作业必须指定 GPU 的类型以及数量,并为作业的虚拟机指定兼容的机器类型。如需为作业的虚拟机定义资源,请选择以下方法之一:

  • 直接定义资源(推荐):如示例中所示,如需直接为作业的虚拟机定义资源,请使用 policy 字段
  • 在模板中定义资源:通过指定 Compute Engine 实例模板来为作业的虚拟机定义资源。如果您在作业的定义中包含实例模板,则必须使用此方法。

将 GPU 装载到任何容器

如果作业包含您想要使用 GPU 的任何容器可运行对象,您还必须根据该作业的虚拟机映像将 GPU 装载到每个可运行容器:

创建使用 GPU 的作业

本部分举例说明了如何使用推荐的方法创建使用 GPU 的作业:该作业会自动安装所需的驱动程序并直接定义它使用的资源。具有容器可运行作业的作业也会将 GPU 装载到容器中。您可以使用 gcloud CLI 或 Batch API 创建使用 GPU 的作业。

gcloud

如需向作业添加 GPU,请根据您要使用的 Runnable 类型查看以下示例之一:

为容器作业添加 GPU

如需使用 gcloud CLI 创建配有默认映像的 GPU 的容器作业,请使用 gcloud batch jobs submit 命令

例如,如需创建配有 GPU 的容器作业,请运行以下命令:

  1. 在当前目录中创建一个名为 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_TYPEGPU 类型。您可以使用 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 数组字段
  2. 运行以下命令:

    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 的脚本作业,请运行以下命令:

  1. 在当前目录中创建一个名为 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_TYPEGPU 类型。您可以使用 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 数组字段
  2. 运行以下命令:

    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 的容器和脚本作业,请使用以下代码:

  1. 在当前目录中创建一个名为 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_TYPEGPU 类型。您可以使用 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 数组字段
  2. 运行以下命令:

    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_TYPEGPU 类型。您可以使用 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_TYPEGPU 类型。您可以使用 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_TYPEGPU 类型。您可以使用 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 数组字段

后续步骤