创建具有 GPU 虚拟机的 MIG


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

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

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

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

准备工作

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

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

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

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

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

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

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

        gcloud init

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

限制

查看在 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

后续步骤