批量创建 GPU 虚拟机


您可以使用批量创建过程创建一组挂接了图形处理单元 (GPU) 的虚拟机 (VM)。通过批量创建流程,您可以获得预先验证,以便在请求不可行时使其快速失败。此外,如果您使用区域标志,则批量创建 API 会自动选择具有容量来完成请求的可用区。

如需详细了解批量创建,请参阅虚拟机批量创建简介。如需详细了解如何创建挂接 GPU 的虚拟机,请参阅创建挂接 GPU 的实例概览

准备工作

  • 如需查看创建挂接 GPU 的实例的限制和其他前提步骤(例如选择操作系统映像和检查 GPU 配额),请参阅创建挂接 GPU 的实例概览
  • 如需查看批量创建的限制,请参阅虚拟机批量创建简介
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色

如需获得创建虚拟机所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色可提供创建虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

创建虚拟机需要以下权限:

  • 针对项目的 compute.instances.create 权限
  • 使用自定义映像创建虚拟机:针对映像的 compute.images.useReadOnly 权限
  • 使用快照创建虚拟机:针对快照的 compute.snapshots.useReadOnly 权限
  • 使用实例模板创建虚拟机:针对实例模板的 compute.instanceTemplates.useReadOnly 权限
  • 为虚拟机分配旧版网络:针对项目的 compute.networks.use 权限
  • 为虚拟机指定静态 IP 地址:针对项目的 compute.addresses.use 权限
  • 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的 compute.networks.useExternalIp 权限
  • 为虚拟机指定子网:针对项目或所选子网的 compute.subnetworks.use 权限
  • 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的 compute.subnetworks.useExternalIp 权限
  • 为虚拟机设置虚拟机实例元数据:针对项目的 compute.instances.setMetadata 权限
  • 为虚拟机设置标记:针对虚拟机的 compute.instances.setTags 权限
  • 为虚拟机设置标签:针对虚拟机的 compute.instances.setLabels 权限
  • 为虚拟机设置要使用的服务账号:针对虚拟机的 compute.instances.setServiceAccount 权限
  • 为虚拟机创建新磁盘:针对项目的 compute.disks.create 权限
  • 以只读或读写模式挂接现有磁盘:针对磁盘的 compute.disks.use 权限
  • 以只读模式挂接现有磁盘:针对磁盘的 compute.disks.useReadOnly 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

概览

使用批量创建方法创建挂接 GPU 的虚拟机时,您可以选择在区域(如 us-central1)或特定可用区(如 us-central1-a)中创建虚拟机。

如果您选择指定区域,Compute Engine 会将虚拟机放置在该区域内支持 GPU 的任何地区中。

机器类型

加速器优化机器家族包含多种机器类型。

每种加速器优化机器类型都挂接了特定型号的 NVIDIA GPU。

  • 对于 A4X 机器类型,挂接了 NVIDIA GB200 超级芯片。
  • 对于 A4 机器类型,挂接了 NVIDIA B200 GPU。
  • 对于 A3 机器类型,挂接了 NVIDIA H100 80GB GPU 或 NVIDIA H200 141GB GPU。以下是可用选项:
    • A3 Ultra:这些机器类型挂接了 H200 141GB GPU
    • A3 Mega:此机器类型挂接了 H100 80GB GPU
    • A3 High:此机器类型挂接了 H100 80GB GPU
    • A3 Edge:此机器类型挂接了 H100 80GB GPU
  • 对于 A2 机器类型,挂接了 NVIDIA A100 GPU。以下是可用选项:
    • A2 Ultra:此机器类型挂接了 A100 80GB GPU
    • A2 Standard:此机器类型挂接了 A100 40GB GPU
  • 对于 G2 机器类型,挂接了 NVIDIA L4 GPU。

创建 A3、A2 和 G2 虚拟机组

本部分介绍了如何使用 Google Cloud CLIREST 为 A3 High、A3 Mega、A3 Edge、A2 和 G2 机器系列批量创建实例。

gcloud

如需创建虚拟机组,请使用 gcloud compute instances bulk create 命令。如需详细了解相关参数以及如何使用此命令,请参阅批量创建虚拟机

示例命令中显示了以下可选标志:

  • --provisioning-model=SPOT 是一个可选标志,用于将虚拟机配置为 Spot 虚拟机。如果您的工作负载具有容错能力,并且可以承受可能的虚拟机抢占,请考虑使用 Spot 虚拟机来降低虚拟机和挂接的 GPU 的费用。如需了解详情,请参阅 Spot 虚拟机上的 GPU。对于 Spot 虚拟机,自动重启和主机维护选项标志处于停用状态。

  • --accelerator 标志,用于指定虚拟工作站。只有 G2 虚拟机支持 NVIDIA RTX 虚拟工作站 (vWS)。

示例

此示例使用以下规范创建两个挂接 GPU 的虚拟机:

  • 虚拟机名称:my-test-vm-1my-test-vm-2
  • 每个虚拟机都挂接了两个 GPU,使用相应的加速器优化机器类型指定
gcloud compute instances bulk create \
    --name-pattern="my-test-vm-#" \
    --region=REGION \
    --count=2 \
    --machine-type=MACHINE_TYPE \
    --boot-disk-size=200 \
    --image=IMAGE \
    --image-project=IMAGE_PROJECT \
    --on-host-maintenance=TERMINATE \
    [--provisioning-model=SPOT] \
    [--accelerator=type=nvidia-l4-vws,count=VWS_ACCELERATOR_COUNT]

替换以下内容:

  • REGION:虚拟机所在的区域。此区域必须支持您选择的 GPU 型号
  • MACHINE_TYPE:您选择的机器类型。从下列选项中选择一项:

    • A3 机器类型
    • A2 机器类型
    • G2 机器类型。G2 机器类型还支持自定义内存。内存必须是 1024 MB 的倍数且在支持的内存范围内。例如,如需创建具有 4 个 vCPU 和 19 GB 内存的虚拟机,请指定 --machine-type=g2-custom-4-19456
  • IMAGE支持 GPU 的操作系统映像。

    如果要使用映像系列中的最新映像,请将 --image 标志替换为 --image-family 标志,并将其值设置为支持 GPU 的映像系列。例如:--image-family=rocky-linux-8-optimized-gcp

    您也可以指定自定义映像或 Deep Learning VM Image 映像

  • IMAGE_PROJECT:操作系统映像所属的 Compute Engine 映像项目。如果使用自定义映像或 Deep Learning VM Image 映像,请指定这些映像所属的项目。

  • VWS_ACCELERATOR_COUNT:您需要的虚拟 GPU 数量。

如果操作成功,则输出类似如下内容:

NAME          ZONE
my-test-vm-1  us-central1-b
my-test-vm-2  us-central1-b
Bulk create request finished with status message: [VM instances created: 2, failed: 0.]

REST

使用带有必需参数的 instances.bulkInsert 方法可在一个可用区中创建多个虚拟机。 如需详细了解相关参数以及如何使用此命令,请参阅批量创建虚拟机

示例

此示例使用以下规范创建两个挂接 GPU 的虚拟机:

  • 虚拟机名称:my-test-vm-1my-test-vm-2
  • 每个虚拟机都挂接了两个 GPU,使用相应的加速器优化机器类型指定

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
    {
    "namePattern":"my-test-vm-#",
    "count":"2",
    "instanceProperties": {
      "machineType":MACHINE_TYPE,
      "disks":[
        {
          "type":"PERSISTENT",
          "initializeParams":{
            "diskSizeGb":"200",
            "sourceImage":SOURCE_IMAGE_URI
          },
          "boot":true
        }
      ],
      "name": "default",
      "networkInterfaces":
      [
        {
          "network": "projects/PROJECT_ID/global/networks/default"
        }
      ],
      "scheduling":{
        "onHostMaintenance":"TERMINATE",
        ["automaticRestart":true]
      }
    }
    }
    

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:虚拟机所在的区域。此区域必须支持您选择的 GPU 型号
  • MACHINE_TYPE:您选择的机器类型。从下列选项中选择一项:

    • A2 机器类型
    • G2 机器类型。G2 机器类型还支持自定义内存。内存必须是 1024 MB 的倍数且在支持的内存范围内。例如,如需创建具有 4 个 vCPU 和 19 GB 内存的虚拟机,请指定 --machine-type=g2-custom-4-19456
  • SOURCE_IMAGE_URI:您要使用的特定映像或映像系列的 URI。

    例如:

    • 特定映像:"sourceImage": "projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20220719"
    • 映像系列:"sourceImage": "projects/rocky-linux-cloud/global/images/family/rocky-linux-8-optimized-gcp"

    指定映像系列时,Compute Engine 会根据该系列中最新的未弃用操作系统映像创建虚拟机。如需详细了解何时使用映像系列,请参阅映像系列最佳实践

其他设置:

  • 如果您的工作负载具有容错能力,并且可以承受可能的虚拟机抢占,请考虑使用 Spot 虚拟机来降低虚拟机和挂接的 GPU 的费用。如需了解详情,请参阅 Spot 虚拟机上的 GPU。如需使用 Spot 虚拟机,请在请求中添加 "provisioningModel": "SPOT 选项。对于 Spot 虚拟机,自动重启和主机维护选项标志处于停用状态。

    "scheduling":
      {
        "provisioningModel": "SPOT"
      }
    
  • 对于 G2 虚拟机,支持 NVIDIA RTX 虚拟工作站 (vWS)。如需指定虚拟工作站,请在请求中添加 guestAccelerators 选项。将 VWS_ACCELERATOR_COUNT 替换为您需要的虚拟 GPU 数量。

    "guestAccelerators":
     [
       {
         "acceleratorCount": VWS_ACCELERATOR_COUNT,
         "acceleratorType": "projects/PROJECT_ID/zones/ZONEacceleratorTypes/nvidia-l4-vws"
       }
     ]
    

创建 N1 通用虚拟机组

您可以使用 Google Cloud CLIREST 创建挂接 GPU 的虚拟机组。

本部分介绍如何使用以下 GPU 类型创建多个虚拟机:

NVIDIA GPU:

  • NVIDIA T4:nvidia-tesla-t4
  • NVIDIA P4:nvidia-tesla-p4
  • NVIDIA P100:nvidia-tesla-p100
  • NVIDIA V100:nvidia-tesla-v100

NVIDIA RTX 虚拟工作站 (vWS)(以前称为 NVIDIA GRID):

  • NVIDIA T4 虚拟工作站:nvidia-tesla-t4-vws
  • NVIDIA P4 虚拟工作站:nvidia-tesla-p4-vws
  • NVIDIA P100 虚拟工作站:nvidia-tesla-p100-vws

    对于这些虚拟工作站,系统会自动将 NVIDIA RTX 虚拟工作站 (vWS) 许可添加到虚拟机。

gcloud

如需创建虚拟机组,请使用 gcloud compute instances bulk create 命令。如需详细了解相关参数以及如何使用此命令,请参阅批量创建虚拟机

示例

以下示例会使用以下规范创建两个挂接 GPU 的虚拟机:

  • 虚拟机名称:my-test-vm-1my-test-vm-2
  • us-central1 内支持 GPU 的任何地区中创建的虚拟机
  • 每个虚拟机都挂接了两个 T4 GPU,并指定了相应的加速器类型和加速器数量标志
  • 每个虚拟机都安装了 GPU 驱动程序
  • 每个虚拟机都使用 Deep Learning VM Image 映像 pytorch-latest-gpu-v20211028-debian-10
gcloud compute instances bulk create \
    --name-pattern="my-test-vm-#" \
    --count=2 \
    --region=us-central1 \
    --machine-type=n1-standard-2 \
    --accelerator type=nvidia-tesla-t4,count=2 \
    --boot-disk-size=200 \
    --metadata="install-nvidia-driver=True" \
    --scopes="https://www.googleapis.com/auth/cloud-platform" \
    --image=pytorch-latest-gpu-v20211028-debian-10 \
    --image-project=deeplearning-platform-release \
    --on-host-maintenance=TERMINATE --restart-on-failure

如果操作成功,则输出类似如下内容:

NAME          ZONE
my-test-vm-1  us-central1-b
my-test-vm-2  us-central1-b
Bulk create request finished with status message: [VM instances created: 2, failed: 0.]

REST

使用带有必需参数的 instances.bulkInsert 方法可在一个可用区中创建多个虚拟机。 如需详细了解相关参数以及如何使用此命令,请参阅批量创建虚拟机

示例

以下示例会使用以下规范创建两个挂接 GPU 的虚拟机:

  • 虚拟机名称:my-test-vm-1my-test-vm-2
  • us-central1 内支持 GPU 的任何地区中创建的虚拟机
  • 每个虚拟机都挂接了两个 T4 GPU,并指定了相应的加速器类型和加速器数量标志
  • 每个虚拟机都安装了 GPU 驱动程序
  • 每个虚拟机都使用 Deep Learning VM Image 映像 pytorch-latest-gpu-v20211028-debian-10

PROJECT_ID 替换为您的项目 ID。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-central1/instances/bulkInsert

{
    "namePattern":"my-test-vm-#",
    "count":"2",
    "instanceProperties": {
      "machineType":"n1-standard-2",
      "disks":[
        {
          "type":"PERSISTENT",
          "initializeParams":{
            "diskSizeGb":"200",
            "sourceImage":"projects/deeplearning-platform-release/global/images/pytorch-latest-gpu-v20211028-debian-10"
          },
          "boot":true
        }
      ],
      "name": "default",
      "networkInterfaces":
      [
        {
          "network": "projects/PROJECT_ID/global/networks/default"
        }
      ],
      "guestAccelerators":
      [
        {
          "acceleratorCount": 2,
          "acceleratorType": "nvidia-tesla-t4"
        }
      ],
      "scheduling":{
        "onHostMaintenance":"TERMINATE",
        "automaticRestart":true
      },
      "metadata":{
        "items":[
          {
            "key":"install-nvidia-driver",
            "value":"True"
          }
        ]
      }
  }
 }

后续步骤