创建具有 GPU 虚拟机的 MIG


本文档介绍如何创建具有挂接 GPU 的虚拟机 (VM) 实例的托管式实例组 (MIG)。介绍了如何在可用区级 MIG 中使用调整大小请求弹性启动配置模型一次性添加所有 GPU 虚拟机。如需创建可使用 Cluster Director 提供的功能和服务的 MIG 调整大小请求,请参阅 AI Hypercomputer 文档中的创建 MIG 和调整大小请求

将 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. 预配模型部分中,执行以下操作:

        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 天)之间。

      创建 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_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 \
           --zone=ZONE
        

      替换以下内容:

      • INSTANCE_GROUP_NAME:MIG 的名称。
      • INSTANCE_TEMPLATE_NAME:GPU 虚拟机的实例模板的名称。
      • 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": "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
        }
        

      替换以下内容:

      • PROJECT_ID:您要在其中创建 MIG 的项目的 ID。
      • INSTANCE_GROUP_NAME:MIG 的名称。
      • INSTANCE_TEMPLATE_NAME:GPU 虚拟机的实例模板的名称。
      • ZONE:提供 Compute Engine 服务的一个可用区
      • RESIZE_REQUEST_NAME:调整大小请求的名称。
      • COUNT:要在实例组中一次性添加的所有虚拟机的数量。

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

      后续步骤