批量创建 GPU 虚拟机组


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

准备工作

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

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

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

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

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 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 的任何地区中。

创建加速器优化虚拟机组

加速器优化机器家族适用于 A3 High 和 A3 Mega、A2 标准和 A2 Ultra 以及 G2 机器类型。

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

  • 对于 A3 加速器优化机器类型,挂接了 NVIDIA H100 80GB GPU。以下是可用选项:
    • A3 High (a3-highgpu-8g):此机器类型挂接了 H100 80GB GPU
    • A3 Mega (a3-megagpu-8g):此机器类型挂接了 H100 80GB Mega GPU
  • 对于 A2 加速器优化机器类型,挂接了 NVIDIA A100 GPU。以下是可用选项:
    • A2 标准a2-highgpu-*a2-megagpu-*):这些机器类型挂接了 A100 40GB GPU
    • A2 Ultra (a2-ultragpu-*):这些机器类型挂接了 A100 80GB GPU
  • 对于 G2 加速器优化机器类型 (g2-standard-*),挂接了 NVIDIA L4 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 High 和 A3 Mega 机器类型的虚拟机:

  • 使用 A3 机器类型的虚拟机不会获得持续使用折扣和灵活承诺使用折扣。
  • 只能在部分区域和可用区中使用 A3 机器类型。
  • 不能在使用 A3 机器类型的虚拟机上使用区域级永久性磁盘
  • A3 机器类型仅在 Sapphire Rapids 平台上提供。
  • 如果虚拟机使用 A3 机器类型,则不能更改机器类型。如果需要更改机器类型,必须创建新的虚拟机。
  • 不能将虚拟机的机器类型更改为 A3 机器类型。如果需要使用 A3 机器类型的虚拟机,必须创建新的虚拟机。
  • A3 机器类型不支持单租户。
  • 不能在 A3 机器类型上运行 Windows 操作系统。
  • 您只能通过特定预留来预留 A3 机器类型。
  • .

A2 标准虚拟机

  • 使用 A2 标准机器类型的虚拟机不会获得持续使用折扣和灵活承诺使用折扣。
  • 只能在某些区域和可用区中使用 A2 标准机器类型。
  • 不能在使用 A2 标准机器类型的虚拟机上使用区域级永久性磁盘
  • A2 标准机器类型仅在 Cascade Lake 平台上提供。
  • 如果您的虚拟机使用 A2 标准机器类型,您只能从一种 A2 标准机器类型切换到另一种 A2 标准机器类型。您无法切换到任何其他机器类型。如需了解详情,请参阅修改加速器优化虚拟机
  • 不能将 Windows 操作系统与 <codea2-megagpu-16g< code="" dir="ltr" translate="no"> A2 标准机器类型搭配使用。 使用 Windows 操作系统时,请选择其他 A2 标准机器类型。</codea2-megagpu-16g<>
  • 不能在使用 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 的格式,您必须使用 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"
          }
        ]
      }
  }
 }

后续步骤