创建灵活启动型虚拟机

本文档介绍了如何创建灵活启动的虚拟机 (VM) 实例。灵活启动虚拟机最多可运行 7 天,有助于您以折扣价获取 GPU 等高需求资源。这些功能使灵活启动型虚拟机成为运行短时工作负载(例如模型微调和批处理推理)的经济高效的解决方案。

如需详细了解灵活启动虚拟机的关键特征,包括创建此类虚拟机时需要满足的要求和限制,请参阅灵活启动虚拟机简介

准备工作

  • 根据您要使用的机器类型,查看以下配置要求之一:

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

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

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    REST

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

      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

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

所需的角色

如需获得创建灵活启动型虚拟机所需的权限,请让您的管理员为您授予项目的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建灵活启动型虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

创建灵活启动型虚拟机需要以下权限:

  • 针对项目的 compute.instances.create 权限
  • 使用自定义映像创建虚拟机:针对映像的 compute.images.useReadOnly 权限
  • 使用快照创建虚拟机:针对快照的 compute.snapshots.useReadOnly 权限
  • 使用实例模板创建虚拟机:针对实例模板的 compute.instanceTemplates.useReadOnly 权限
  • 为虚拟机指定子网:针对项目或所选子网的 compute.subnetworks.use 权限
  • 为虚拟机指定静态 IP 地址:针对项目的 compute.addresses.use 权限
  • 在使用 VPC 网络时为虚拟机分配外部 IP 地址:针对项目或所选子网的 compute.subnetworks.useExternalIp 权限
  • 为虚拟机分配旧版网络:针对项目的 compute.networks.use 权限
  • 使用旧版网络时为虚拟机分配外部 IP 地址:针对项目的 compute.networks.useExternalIp 权限
  • 为虚拟机设置虚拟机实例元数据:针对项目的 compute.instances.setMetadata 权限
  • 为虚拟机设置标记:针对虚拟机的 compute.instances.setTags 权限
  • 为虚拟机设置标签:针对虚拟机的 compute.instances.setLabels 权限
  • 为虚拟机设置要使用的服务账号:针对虚拟机的 compute.instances.setServiceAccount 权限
  • 为虚拟机创建新磁盘:针对项目的 compute.disks.create 权限
  • 以只读或读写模式挂接现有磁盘:针对磁盘的 compute.disks.use 权限
  • 以只读模式挂接现有磁盘:针对磁盘的 compute.disks.useReadOnly 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

创建灵活启动型虚拟机

如需创建 Flex-start 虚拟机,请选择以下选项之一:

gcloud

如需创建灵活启动型虚拟机,请将 gcloud compute instances create 命令与以下标志搭配使用:

  • --request-valid-for-duration 标志

  • --provisioning-model=FLEX_START 标志

  • --instance-termination-action 标志

  • --max-run-duration 标志

  • --maintenance-policy=TERMINATE 标志

  • --reservation-affinity=none 标志

如需创建灵活启动型虚拟机,请运行以下命令:

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --zone=ZONE \
    --request-valid-for-duration=VALID_FOR_DURATION \
    --provisioning-model=FLEX_START \
    --instance-termination-action=TERMINATION_ACTION \
    --max-run-duration=RUN_DURATION \
    --maintenance-policy=TERMINATE \
    --reservation-affinity=none

替换以下内容:

  • VM_NAME:新虚拟机的名称。

  • MACHINE_TYPE:要用于 Flex-start 虚拟机的机器类型。如果您指定了 G2 或 N1 机器类型,请考虑以下事项:

    • 对于 G2 机器类型,您可以选择指定要用于图形密集型工作负载的 NVIDIA RTX 虚拟工作站 (vWS)。为此,请在命令中添加 --accelerator 标志,如下所示:

      --accelerator=count=VWS_ACCELERATOR_COUNT,type=nvidia-l4-vws
      

      VWS_ACCELERATOR_COUNT 替换为工作负载所需的 NVIDIA RTX vWS 数量。

    • 对于 N1 机器类型,您必须指定要挂接到虚拟机的 GPU 的数量和类型。否则,创建虚拟机会失败。如需将 GPU 挂接到 N1 虚拟机,请在命令中添加 --accelerator 标志,如下所示:

      --accelerator=count=NUMBER_OF_ACCELERATORS,type=ACCELERATOR_TYPE
      

      替换以下内容:

  • ZONE:您要在其中创建虚拟机的可用区。 如需验证您指定的机器类型在您要创建虚拟机的可用区中是否可用,请参阅可用区域和可用区

  • VALID_FOR_DURATION:等待预配所请求资源的最长时间,格式为数字后跟单位(smhd)。例如,值 30m 表示 30 分钟的时间,值 1h2m3s 表示 1 小时 2 分 3 秒的时间。根据工作负载的可用区要求,我们建议您指定以下时长之一,以提高虚拟机创建请求的成功率:

    • 如果您的工作负载要求您在特定可用区中创建虚拟机,请指定 90 秒 (90s) 到 2 小时 (2h) 之间的时长。时长越长,您获得资源的机会就越大。

    • 如果虚拟机可以在区域内的任何可用区中运行,请指定零秒的时长 (0s)。此值表示 Compute Engine 仅在资源立即可用的情况下才分配资源。如果创建请求因资源不可用而失败,请在其他可用区中重试该请求。

  • TERMINATION_ACTION:指示在虚拟机运行时长结束时,是停止还是删除虚拟机。请指定以下某个值:

    • 如需停止虚拟机,请执行以下操作:STOP

    • 如需删除虚拟机,请执行以下操作:DELETE

  • RUN_DURATION:虚拟机在被 Compute Engine 删除之前运行的最长时间,格式为数字后跟单位(smhd)。该值必须介于 10 分钟和 7 天之间。

REST

如需创建灵活启动的虚拟机,请向 instances.insert 方法发出 POST 请求。在请求正文中,添加以下字段:

  • params.requestValidForDuration 字段。

  • 设置为 FLEX_STARTscheduling.provisioningModel 字段。

  • scheduling.instanceTerminationAction 字段。

  • scheduling.maxRunDuration 字段。

  • 设置为 TERMINATEscheduling.onHostMaintenance 字段。

  • reservationAffinity.consumeReservationType 设置为 NO_RESERVATION

如需创建灵活启动型虚拟机,请发出 POST 请求,如下所示:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ],
  "params": {
    "requestValidForDuration": {
      "seconds": VALID_FOR_DURATION
    }
  },
  "scheduling": {
    "provisioningModel": "FLEX_START",
    "instanceTerminationAction": "TERMINATION_ACTION",
    "maxRunDuration": {
      "seconds": RUN_DURATION
    },
    "onHostMaintenance": "TERMINATE"
  },
  "reservationAffinity": {
    "consumeReservationType": "NO_RESERVATION"
  }
}

替换以下内容:

  • PROJECT_ID:要在其中创建虚拟机的项目的 ID。

  • ZONE:您要在其中创建虚拟机的可用区。 如需验证某个机器类型在您要创建虚拟机的可用区中是否可用,请参阅可用区域和可用区

  • VM_NAME:新虚拟机的名称。

  • MACHINE_TYPE:要用于 Flex-start 虚拟机的机器类型。如果您指定了 G2 或 N1 机器类型,请考虑以下事项:

    • 对于 G2 机器类型,您可以选择指定要用于图形密集型工作负载的 NVIDIA RTX 虚拟工作站 (vWS)。为此,请在请求正文中添加 guestAccelerators 字段,如下所示:

      "guestAccelerators": [
        {
          "acceleratorCount": VWS_ACCELERATOR_COUNT,
          "acceleratorType": "projects/PROJECT_ID/zones/ZONE/acceleratorTypes/nvidia-l4-vws"
        }
      ]
      

      VWS_ACCELERATOR_COUNT 替换为工作负载所需的 NVIDIA RTX vWS 数量。

    • 对于 N1 机器类型,您必须指定要挂接到虚拟机的 GPU 的数量和类型。否则,创建虚拟机会失败。如需将 GPU 挂接到 N1 虚拟机,请在请求正文中添加 guestAccelerators 字段,如下所示:

      "guestAccelerators": [
        {
          "acceleratorCount": ACCELERATOR_COUNT,
          "acceleratorType": "projects/PROJECT_ID/zones/ZONE/acceleratorTypes/ACCELERATOR_TYPE"
        }
      ]
      

      替换以下内容:

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

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

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

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

  • VALID_FOR_DURATION:等待虚拟机完成预配的最长时间(以秒为单位)。根据工作负载的可用区要求,我们建议您指定以下时长之一,以提高虚拟机创建请求的成功率:

    • 如果您的工作负载要求您在特定可用区中创建虚拟机,请指定 90 秒 (90) 到 2 小时 (7200) 之间的时长。时长越长,您获得资源的机会就越大。

    • 如果虚拟机可以在区域内的任何可用区中运行,请指定零秒的时长 (0)。此值表示 Compute Engine 仅在资源立即可用的情况下才分配资源。如果创建请求因资源不可用而失败,请在其他可用区中重试该请求。

  • TERMINATION_ACTION:指示在虚拟机运行时长结束时,是停止还是删除虚拟机。请指定以下某个值:

    • 如需停止虚拟机,请执行以下操作:STOP

    • 如需删除虚拟机,请执行以下操作:DELETE

  • RUN_DURATION:虚拟机在被 Compute Engine 删除之前运行的最长时间(以秒为单位)。该值必须介于 600 秒(10 分钟)到 604,800 秒(7 天)之间。

后续步骤

自行试用

如果您是 Google Cloud 新手,请创建一个账号来评估 Compute Engine 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 Compute Engine