创建具有 GPU 虚拟机的 MIG


本文档介绍如何创建具有 GPU 虚拟机的托管式实例组 (MIG)。其中介绍了如何使用调整大小请求在实例组中一次性添加所有 GPU 虚拟机。

使用调整大小请求可提高 MIG 中 GPU 虚拟机的可获取性。在请求中,指定 GPU 虚拟机的数量以及您希望运行这些虚拟机的时长。底层调度器机制会处理整个 Compute Engine 中的所有调整大小请求,并根据虚拟机的时长和可用性有效地调度请求。当资源可用时,MIG 会自动创建虚拟机。

如果在这些虚拟机上运行的作业的完成时间早于所请求的时长,您可以删除这些虚拟机。否则,MIG 会在相应时长结束时自动删除虚拟机。

您还可以阅读创建 MIG 的其他基本场景

准备工作

  • 为确保您有足够的 GPU 配额可以用于请求的资源,请检查您的 GPU 配额
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

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

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

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

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

    REST

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

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

      gcloud init

限制

查看在 MIG 中创建调整大小请求时的限制

创建 MIG 并一次性添加所有 GPU 虚拟机

如需创建 MIG 并在实例组中一次性添加所有 GPU 虚拟机,请执行以下操作:

  1. 创建实例模板,这是创建 MIG 所必需的。MIG 会根据实例模板创建实例组中的每个虚拟机。在模板中,指定 GPU 虚拟机的配置以及使用调整大小请求所需的其他配置。

    如需详细了解实例模板,请参阅实例模板简介

  2. 创建 MIG 和调整大小请求,以便一次性添加所有 GPU 虚拟机。

创建实例模板

按照本部分中的说明创建实例模板,然后使用该模板创建 MIG

控制台

  1. 转到实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板

  3. 名称字段中,输入实例模板的名称。

  4. 机器配置部分中,执行以下操作:

    1. 点击 GPU 标签页。
    2. GPU 类型列表中,选择 GPU 类型。
    3. GPU 数量列表中,选择 GPU 的数量。
    4. 机器类型列表中,选择一种机器类型。
  5. 展开高级选项部分,然后执行以下操作:

    1. 展开管理部分。
    2. 预留列表中,选择不使用
  6. 点击创建

gcloud

使用 instance-templates create 命令创建实例模板。

以下命令会创建一个全球级实例模板。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --reservation-affinity=none

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE支持 GPU 的机器类型。如果您指定 N1 机器类型,请添加 --accelerator 标志以指定要挂接到虚拟机的 GPU 数量和类型。

REST

instanceTemplates.insert 方法发出 POST 请求以创建实例模板。

以下请求会创建一个全球级实例模板。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "mode": "READ_WRITE",
        "type": "PERSISTENT",
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/family/debian-10"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "accessConfigs": [
          {
            "name": "external-IP",
            "type": "ONE_TO_ONE_NAT"
          }
        ],
        "network": "global/networks/default"
      }
    ],
    "reservationAffinity": {
      "consumeReservationType": "NO_RESERVATION"
    },
    "scheduling": {
      "onHostMaintenance": "TERMINATE"
    }
  }
}

替换以下内容:

  • PROJECT_ID:您要在其中创建 MIG 的项目的 ID。
  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE支持 GPU 的机器类型。如果您指定 N1 机器类型,请添加 guestAccelerators 字段以指定要挂接到虚拟机的 GPU 数量和类型。

创建 MIG 并一次性添加所有 GPU 虚拟机

按照本部分所述,创建一个停用了修复的 MIG。如需在 MIG 中使用调整大小请求,您不得在实例组中配置自动扩缩

gcloud

  1. 使用 Beta 版 instance-groups managed create 命令创建可用区级 MIG。

    gcloud beta compute instance-groups managed create INSTANCE_GROUP_NAME \
       --template=INSTANCE_TEMPLATE_NAME \
       --size=0 \
       --zone=ZONE \
       --default-action-on-vm-failure=do_nothing
    
  2. 在 MIG 中,使用 Beta 版 instance-groups managed resize-requests create 命令创建调整大小请求。指定所需的 GPU 虚拟机数量以及您希望运行这些虚拟机的时长。

    gcloud beta compute instance-groups managed resize-requests create INSTANCE_GROUP_NAME \
       --resize-request=RESIZE_REQUEST_NAME \
       --resize-by=COUNT \
       --requested-run-duration=RUN_DURATION\
       --zone=ZONE
    

替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称。
  • INSTANCE_TEMPLATE_NAME:GPU 虚拟机的实例模板的名称。
  • ZONE:提供 Compute Engine 服务的一个可用区
  • RESIZE_REQUEST_NAME:调整大小请求的名称。
  • COUNT:要在实例组中一次性添加的所有虚拟机的数量。
  • RUN_DURATION:您希望请求的虚拟机运行的时长。该值的格式必须为天数、小时数、分钟数或秒数,后面分别跟 dhms。例如,指定 30m 表示 30 分钟,或指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒。该值必须介于 10 分钟到 7 天之间。

REST

  1. Beta 版 instanceGroupManagers.insert 方法发出 POST 请求以创建可用区级 MIG。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    
    {
     "versions": [
       {
         "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME"
       }
     ],
     "name": "INSTANCE_GROUP_NAME",
     "targetSize": 0,
     "instanceLifecyclePolicy": {
       "defaultActionOnFailure": "DO_NOTHING"
     }
    }
    
  2. 在 MIG 中,向 Beta 版 instanceGroupManagerResizeRequests.insert 方法发出 POST 请求以创建调整大小请求。在请求正文中,指定要一次性创建的所有 GPU 虚拟机的数量以及您希望运行这些虚拟机的时长。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/INSTANCE_GROUP_NAME/resizeRequests
    
    {
     "name": "RESIZE_REQUEST_NAME",
     "resizeBy": COUNT,
     "requestedRunDuration": {
       "seconds": "RUN_DURATION"
     }
    }
    

替换以下内容:

  • PROJECT_ID:您要在其中创建 MIG 的项目的 ID。
  • INSTANCE_GROUP_NAME:MIG 的名称。
  • INSTANCE_TEMPLATE_NAME:GPU 虚拟机的实例模板的名称。
  • ZONE:提供 Compute Engine 服务的一个可用区
  • RESIZE_REQUEST_NAME:调整大小请求的名称。
  • COUNT:要在实例组中一次性添加的所有虚拟机的数量。
  • RUN_DURATION:您希望请求的虚拟机在 MIG 将其自动删除之前运行的时长(以秒为单位)。该值必须介于 600(600 秒,即 10 分钟)和 604800(604,800 秒,即 7 天)之间。

您创建的调整大小请求会保持 ACCEPTED 状态,直到 MIG 创建了所有请求的 GPU 虚拟机。在实例组中创建所有 GPU 虚拟机后,请求的状态会更改为 SUCCEEDED

后续步骤