创建具有 GPU 虚拟机的 MIG


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

使用调整大小请求可提高 MIG 中 GPU 虚拟机的可获取性。在请求中,指定 GPU 虚拟机的数量以及您希望运行这些虚拟机的时长。动态工作负载调度器 (DWS) 是底层调度器机制,可根据请求的时长和资源可用性来调度在 Compute Engine 中创建的调整大小请求。当资源可用时,MIG 会自动创建虚拟机。

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

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

准备工作

  • 为确保您有足够的 GPU 配额可以用于请求的资源,请检查您的 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. 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 时进行身份验证

限制

查看在 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. 可选:如需更改启动磁盘类型或映像的默认值,请在启动磁盘部分中,点击更改。然后,按照提示更改启动磁盘。

  6. 展开高级选项部分,然后执行以下操作:

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

gcloud

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

以下命令会基于 Deep Learning VM 映像创建一个全球级实例模板。

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --image-project=deeplearning-platform-release \
    --image-family=common-cu121 \
    --maintenance-policy=TERMINATE \
    --reservation-affinity=none

替换以下内容:

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

REST

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

以下请求会基于 Deep Learning VM 映像创建一个全球级实例模板。

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

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "machineType": "MACHINE_TYPE",
    "disks": [
      {
        "boot": true,
        "mode": "READ_WRITE",
        "type": "PERSISTENT",
        "initializeParams": {
          "sourceImage": "projects/deeplearning-platform-release/global/images/family/common-cu121"
        }
      }
    ],
    "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 中使用调整大小请求,您不得配置自动扩缩,并且必须关闭修复

控制台

  1. 前往实例组页面。

    进入“实例组”

  2. 点击创建实例组

  3. 在以下字段中输入相应信息:

    1. 名称:输入组的名称。
    2. 实例模板:选择您在上一部分中配置的实例模板。
    3. 位置部分中:
      1. 选择单个可用区
      2. 区域可用区列表中,选择要创建群组的位置。

    在后续步骤中删除自动扩缩配置并关闭修复后,系统会启用实例数字段,以便您进行修改。

  4. 按如下方式删除自动扩缩配置:

    1. 自动扩缩部分中,点击自动扩缩模式列表,然后点击删除自动扩缩配置
    2. 删除自动扩缩配置?对话框中,点击删除
  5. 按照以下步骤在 MIG 中关闭修复功能:

    虚拟机实例生命周期部分中,将失败时的默认操作字段设置为无操作

  6. 指定 GPU 虚拟机的数量以及创建调整大小请求的运行时长:

    1. 实例数字段中,输入您要一次性创建的所有 GPU 虚拟机的数量。

      “创建实例组”页面上的“实例数”字段。

    2. 选中使用调整大小请求,一次创建所有虚拟机复选框。系统会显示用于输入跑步时长的字段。

    3. 请求的运行时长字段和单位列表中,指定 GPU 虚拟机的运行时长。时长必须介于 1 小时到 7 天之间。

  7. 点击创建

gcloud

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

    gcloud 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 中,使用 instance-groups managed resize-requests create 命令创建调整大小请求。指定所需的 GPU 虚拟机数量以及您希望运行这些虚拟机的时长。

    gcloud 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. instanceGroupManagers.insert 方法发出 POST 请求以创建可用区级 MIG。

    POST https://compute.googleapis.com/compute/v1/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 中,向 instanceGroupManagerResizeRequests.insert 方法发出 POST 请求以创建调整大小请求。在请求正文中,指定要一次性创建的所有 GPU 虚拟机的数量以及您希望运行这些虚拟机的时长。

    POST https://compute.googleapis.com/compute/v1/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

后续步骤