批量创建 GPU 虚拟机组


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

准备工作

  • 如需查看其他前提条件步骤(例如选择操作系统映像和检查 GPU 配额),请参阅概览文档。
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

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

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

所需的角色

如需获得创建虚拟机所需的权限,请让您的管理员为您授予项目的 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 的任何地区中。

创建加速器优化虚拟机组

加速器优化机器系列适用于 A3 标准、A2 标准和 Ultra 以及 G2 标准机器类型。

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

您可以使用 Google Cloud CLIREST 创建一组加速器优化虚拟机。

gcloud

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

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

  • --preemptible 标志,用于将虚拟机配置为抢占式虚拟机实例。这样可以降低虚拟机和挂接的 GPU 的费用。如需了解详情,请参阅抢占式实例上的 GPU

  • --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 --restart-on-failure \
    [--preemptible] \
    [--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 会根据该系列中最新的未弃用操作系统映像创建虚拟机。如需详细了解何时使用映像系列,请参阅映像系列最佳实践

其他设置:

  • 您可以使用抢占式虚拟机来降低虚拟机和挂接的 GPU 的费用。如需了解详情,请参阅抢占式虚拟机实例上的 GPU。如需将虚拟机设置为抢占式,请在请求中添加 "preemptible": true 选项。

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

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

限制

A3 标准

  • 使用 A3 标准机器类型的虚拟机不会获得持续使用折扣和灵活承诺使用折扣。
  • 您只能在某些区域和可用区中使用 A3 标准机器类型。
  • 您不能在使用 A3 标准机器类型的虚拟机上使用区域永久性磁盘
  • A3 标准机器类型仅在 Sapphire Rapids 平台上提供。
  • 如果您的虚拟机使用 A3 标准机器类型,则无法更改机器类型。如果您需要使用其他机器类型,则必须创建新的虚拟机。
  • 您不能将其他任何机器类型更改为 A3 标准机器类型。如果您需要创建使用 A3 标准机器类型的虚拟机,则必须创建新虚拟机。
  • A3 标准机器类型不支持单租户。
  • 您无法在 Windows 操作系统上运行 A3 标准机器类型。

A2 标准

  • 使用 A2 标准机器类型的虚拟机不会获得持续使用折扣和灵活承诺使用折扣。
  • 您只能在某些区域和可用区中使用 A2 标准机器类型。
  • 您不能在使用 A2 标准机器类型的虚拟机上使用区域永久性磁盘
  • A2 标准机器类型仅在 Cascade Lake 平台上提供。
  • 如果您的虚拟机使用 A2 标准机器类型,您只能从一个 A2 标准机器类型切换到另一个 A2 标准机器类型。您无法切换到任何其他机器类型。如需了解详情,请参阅修改加速器优化虚拟机
  • 您不能在 Windows 操作系统上使用 a2-megagpu-16g A2 标准机器类型。使用 Windows 操作系统时,请选择其他 A2 标准机器类型。
  • 您不能在使用 A2 标准机器类型的 Windows 虚拟机上快速格式化挂接的本地 SSD。如需设置这些本地 SSD 的格式,您必须使用 diskpart 实用程序并指定 format fs=ntfs label=tmpfs 设置,以进行完整格式化。
  • A2 标准机器类型不支持单租户。

A2 Ultra

  • 使用 A2 Ultra 机器类型的虚拟机不会获得持续使用折扣和灵活承诺使用折扣。
  • 您只能在某些区域和可用区中使用 A2 Ultra 机器类型。
  • 您不能在使用 A2 Ultra 机器类型的虚拟机上使用区域永久性磁盘
  • A2 Ultra 机器类型仅在 Cascade Lake 平台上提供。
  • 如果您的虚拟机使用 A2 Ultra 机器类型,您无法更改机器类型。如果您需要使用其他 A2 Ultra 机器类型或任何其他机器类型,则必须创建新虚拟机。
  • 您不能将其他任何机器类型更改为 A2 Ultra 机器类型。如果您需要创建使用 A2 Ultra 机器类型的虚拟机,则必须创建新虚拟机。
  • 您不能在使用 A2 Ultra 机器类型的 Windows 虚拟机上快速格式化挂接的本地 SSD。如需设置这些本地 SSD 的格式,您必须使用 diskpart 实用程序并指定 format fs=ntfs label=tmpfs 设置,以进行完整格式化。

G2 标准

  • 使用 G2 标准机器类型的虚拟机不会获得持续使用折扣和灵活承诺使用折扣。
  • 您只能在某些区域和可用区中使用 G2 标准机器类型。
  • 您不能在使用 G2 标准机器类型的虚拟机上使用区域永久性磁盘
  • G2 标准机器类型仅在 Cascade Lake 平台上提供。
  • 使用 G2 标准机器类型的虚拟机不支持标准永久性磁盘 (pd-standard)。如需了解支持的磁盘类型,请参阅 G2 支持的磁盘类型
  • 您不能在 G2 标准机器类型上创建多实例 GPU
  • 如果您需要更改 G2 虚拟机的机器类型,请查看修改加速器优化虚拟机
  • 您不能将 Deep Learning VM Image 映像用作使用 G2 标准机器类型的虚拟机的启动磁盘。
  • Container-Optimized OS 的当前默认驱动程序不支持在 G2 机器类型上运行的 L4 GPU。Container-Optimized OS 也仅支持一组特定的驱动程序。如需在 G2 机器类型上使用 Container-Optimized OS,请查看以下说明:
    • 使用支持推荐的最低 NVIDIA 驱动程序版本 525.60.13 或更高版本的 Container-Optimized OS 版本。如需了解详情,请查看 Container-Optimized OS 版本说明
    • 安装驱动程序时,请指定适用于 L4 GPU 的最新可用版本。 例如 sudo cos-extensions install gpu -- -version=525.60.13
  • 在以下情况下,您必须使用 Google Cloud CLI 或 REST 创建 G2 虚拟机
    • 您想要指定自定义内存值。
    • 您想要自定义可见 CPU 核心数。

创建 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/region/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"
          }
        ]
      }
  }
 }

后续步骤