创建具有 GPU 虚拟机的 MIG


本文档介绍如何创建具有挂接 GPU 的虚拟机 (VM) 实例的托管式实例组 (MIG)。介绍了如何在可用区级 MIG 中使用规模调整请求灵活启动预配模型一次性添加所有 GPU 虚拟机。如果您想创建 MIG 规模调整请求来使用预留,请改为参阅以下内容:

将 MIG 规模调整请求与灵活启动预配模型结合使用,可提高您获得 GPU 虚拟机的几率。您必须在请求中指定 GPU 虚拟机的数量。动态工作负载调度器 (DWS) 是底层调度器机制,它会根据请求的时长和资源可用性来调度在 Compute Engine 中创建的调整大小请求。当资源可用时,MIG 会创建虚拟机。

如果作业的完成时间早于所请求的时长,您可以删除已创建的虚拟机。否则,MIG 会在虚拟机的运行时长结束时将其删除。

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

准备工作

  • 为确保您有足够的 GPU 配额可以用于请求的资源,请检查您的 GPU 配额
  • 如需了解配额用量,请参阅 GPU 虚拟机和抢占式分配配额
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

限制

查看创建 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. 如需为通过实例模板创建的虚拟机设置运行时长,请在输入小时数字段中输入小时数。该值必须介于 1 小时 (1) 到 7 天 (168) 之间。

  6. 可选:如需更改启动磁盘类型或映像的默认值,请在启动磁盘部分中,点击更改。然后,按照提示更改启动磁盘。

  7. 点击创建

gcloud

使用 beta instance-templates create 命令来创建实例模板:

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --instance-termination-action=DELETE \
    --instance-template-region=REGION \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --max-run-duration=RUN_DURATION \
    --provisioning-model=FLEX_START \
    --reservation-affinity=none

替换以下内容:

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。

  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud。如需详细了解支持的映像项目,请参阅公共映像

  • IMAGE_FAMILY映像系列。此项指定最新的未弃用操作系统映像。例如,如果您指定 debian-12,则系统会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用映像系列,请参阅映像系列最佳实践

  • REGION:要创建实例模板的区域。

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

  • RUN_DURATION:您希望请求的虚拟机运行的时长。您必须将该值格式化为天、小时、分钟或秒数,并分别添加对应的后缀 dhms。例如,指定 30m 表示 30 分钟,或指定 1d2h3m4s 表示 1 天 2 小时 3 分钟 4 秒。该值必须介于 10 分钟到 7 天之间。

REST

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

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceTemplates

{
  "name": "INSTANCE_TEMPLATE_NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ],
    "reservationAffinity": {
      "consumeReservationType": "NO_RESERVATION"
    },
    "scheduling": {
      "instanceTerminationAction": "DELETE",
      "maxRunDuration": {
        "seconds": RUN_DURATION
      },
      "onHostMaintenance": "TERMINATE",
      "provisioningModel": "FLEX_START"
    }
  }
}

替换以下内容:

  • PROJECT_ID:您希望创建实例模板的项目的 ID。

  • REGION:要创建实例模板的区域。

  • INSTANCE_TEMPLATE_NAME:实例模板的名称。

  • IMAGE_PROJECT:映像所属的映像项目;例如 debian-cloud。如需详细了解支持的映像项目,请参阅公共映像

  • IMAGE:指定以下其中一项:

    • 操作系统映像的特定版本,例如 debian-12-bookworm-v20240617

    • 映像系列,其格式必须为 family/IMAGE_FAMILY。此项指定最新的未弃用操作系统映像。例如,如果您指定 family/debian-12,则系统会使用 Debian 12 映像系列中的最新版本。如需详细了解如何使用映像系列,请参阅映像系列最佳实践

  • MACHINE_TYPE支持 GPU 的机器类型。如果您指定 N1 机器类型,请添加 guestAccelerators 字段以指定要挂接到虚拟机的 GPU 数量和类型。

  • RUN_DURATION:您希望请求的虚拟机在 MIG 将其自动删除之前运行的时长(以秒为单位)。该值必须介于 600(600 秒,即 10 分钟)到 604800(604,800 秒,即 7 天)之间。

创建实例模板后,您可以查看该模板以查看其 ID 并查看其实例属性。

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

按照本部分所述,创建一个 MIG。如需在 MIG 中创建调整大小请求,您不得配置自动扩缩,并且必须关闭修复

控制台

  1. 前往实例组页面。

    进入“实例组”

  2. 点击创建实例组。 此时会打开创建实例组页面。

  3. 名称字段中,输入 MIG 的名称。

  4. 在选择实例模板之前,您必须删除自动扩缩配置并关闭修复,如下所示:

    1. 如需删除自动扩缩配置,请执行以下操作:
      1. 自动扩缩部分中,点击自动扩缩模式列表,然后点击删除自动扩缩配置
      2. 在确认对话框中点击删除
    2. 如需关闭修复功能,请在虚拟机实例生命周期部分中,点击失败时的默认操作列表,然后选择无操作
  5. 返回到实例模板字段。在实例模板列表中,选择您在上一部分中创建的实例模板。

  6. 执行下列其中一项操作:

    • 如需使用 MIG 创建调整大小请求,请执行以下操作:
      1. 实例数字段中,输入您要一次性创建的所有虚拟机的数量。
      2. 选中使用规模调整请求,一次创建所有虚拟机复选框。
      3. 可选:如需为虚拟机指定与在实例模板中设置的运行时长不同的运行时长,请在请求的运行时长字段和单位列表中指定运行时长。时长必须介于 1 小时到 7 天之间。
    • 如需在创建 MIG 后创建调整大小请求,请在实例数量字段中输入 0
  7. 位置部分中,指定您是要创建可用区级 MIG 还是区域级 MIG,如下所示:

    1. 如需创建可用区级 MIG,请选择单个可用区。或者,如需创建区域 MIG,请选择多个可用区
    2. 选择 MIG 的区域可用区
    3. 如果您要创建区域级 MIG,请执行以下操作:
      1. 目标分布形状字段中,选择任意单个可用区
      2. 在显示的对话框中,点击停用实例重新分配
  8. 点击创建

gcloud

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

    gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
       --template=INSTANCE_TEMPLATE_URL \
       --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 \
       --zone=ZONE
    

替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建虚拟机的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID
  • ZONE:提供 Compute Engine 服务的一个可用区
  • RESIZE_REQUEST_NAME:调整大小请求的名称。
  • COUNT:要在实例组中一次性添加的所有虚拟机的数量。

REST

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

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
    
    {
     "versions": [
       {
         "instanceTemplate": "INSTANCE_TEMPLATE_URL"
       }
     ],
     "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
    }
    

替换以下内容:

  • PROJECT_ID:您要在其中创建 MIG 的项目的 ID。
  • INSTANCE_GROUP_NAME:MIG 的名称。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建虚拟机的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID
  • ZONE:提供 Compute Engine 服务的一个可用区
  • RESIZE_REQUEST_NAME:调整大小请求的名称。
  • COUNT:要在实例组中一次性添加的所有虚拟机的数量。

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

后续步骤