查看 Spot 虚拟机的可用性

本文档介绍了如何查看 Spot 虚拟机的实时可用性和预期正常运行时间。

在创建 Spot 虚拟机之前,您可以使用 advice.capacity API 查看多种机器类型和位置的实时可用性和预期正常运行时间。这些信息可帮助您执行以下操作:

  • 减少资源可用性错误。当您了解哪些机器类型、区域或可用区有可用容量时,可以在创建 Spot 虚拟机时指定这些配置。此操作可降低遇到资源可用性错误的几率。

  • 针对抢占优化工作负载。通过比较不同机器配置和位置的预期正常运行时间,您可以选择最适合工作负载的配置。通过检查这些因素,您可以设计和整理 Spot 虚拟机,以免抢占中断工作负载。

如需了解如何比较不同机器类型和位置的稳定性和费用,请参阅查看 Spot 虚拟机的抢占率和价格

限制

advice.capacity API 发送请求时,您无法查看 TPU 的可用性。

了解如何查看 Spot 虚拟机的资源可用性

当您向 advice.capacity API 发送请求时,输出会显示以下推荐指标。这些指标取决于您希望 Spot 虚拟机使用的机器类型、您希望创建 Spot 虚拟机的可用区,以及您所请求资源的实时可用性和历史抢占率。

  • 可获得性得分:您创建竞价型虚拟机的请求(包含指定的虚拟机数量和机器配置)成功的可能性。如需了解详情,请参阅 Spot 虚拟机的可获取性得分

  • 预计正常运行时间:在 Compute Engine 抢占大多数 Spot 虚拟机之前,您预计这些虚拟机至少可以运行的时间。如需了解详情,请参阅 Spot 虚拟机的预计正常运行时间

Spot 虚拟机的可获取性得分

当您向 advice.capacity API 发送请求时,输出中的可获得性得分 (obtainability) 会指示您在一个或多个可用区中成功创建指定数量的竞价型虚拟机的可能性。Compute Engine 会根据您所请求资源的实时可用性和近期创建请求的成功率来计算此得分。

可获得性得分介于 0.01.0 之间,表示以下成功几率之一:

  • 成功几率高(0.71.0:您很可能会成功创建所需的 Spot 虚拟机。

  • 中等成功几率(0.40.6:您有中等几率创建所需的 Spot 虚拟机。如果您批量创建抢占式虚拟机,或在具有目标大小的 MIG 中创建抢占式虚拟机,则可能只会获得部分请求的虚拟机。

  • 成功几率较低(0.00.3:您不太可能创建所请求的 Spot 虚拟机。建议您检查其他位置或不同机器类型的资源可用性,或者使用其他配置模型来创建虚拟机。

Spot 虚拟机的预计正常运行时间

当您向 advice.capacity API 发送请求时,输出中的预计正常运行时间 (estimatedUptime) 表示在被抢占之前,您指定数量的大部分 Spot 虚拟机预计至少可以运行的时间。Compute Engine 会根据您指定的机器类型和位置的历史使用模式和当前使用模式来计算此正常运行时间。

Compute Engine 可以将估计的正常运行时间设置为以下值之一:

  • 60 分钟(3,600 秒):大多数 Spot 虚拟机可能会运行一小时,然后被 Compute Engine 抢占。为可容忍中断的长时间运行的工作负载(例如批处理工作负载)创建虚拟机。

  • 10 分钟(600 秒):大多数 Spot 虚拟机在被 Compute Engine 抢占之前可能会运行 10 分钟。仅为短期运行的任务或以短时间间隔保存进度的容错工作负载创建虚拟机。

  • 1 分钟(60 秒):大多数 Spot 虚拟机在被 Compute Engine 抢占之前可能会运行一分钟。建议您执行以下操作之一:

    • 仅在需要执行非常短的任务、进行测试或处理非关键工作负载时创建虚拟机。

    • 检查其他位置或不同机器类型的资源可用性。

    • 使用其他预配模型创建虚拟机。

最佳做法

为最大限度地提高在使用 advice.capacity API 后获得容量的机会,我们建议您遵循以下最佳实践:

  • 比较不同机器类型的输出:如果您的工作负载比较灵活,则可以比较具有不同数量的抢占式虚拟机或机器类型的选项。例如,您可以比较 100 个 n1-standard-2 机器类型虚拟机和 50 个 n1-standard-4 机器类型虚拟机的输出。然后,您可以根据最能平衡可获取性和估计正常运行时间(以满足工作负载需求)的配置来创建抢占式虚拟机。

  • 比较多个位置的输出:如果您的工作负载可以在多个区域或可用区中运行,请检查每个位置的可用性。例如,如果两个区域提供的预计正常运行时间相同,请在可获得性得分较高的区域中创建竞价型虚拟机。

  • 跨多个可用区分布虚拟机:如果您指定目标分布形状ANYBALANCED,则 advice.capacity API 可能会建议您跨多个可用区创建 Spot 虚拟机。例如,为了最大限度地提高成功创建 100 个 Spot 虚拟机的几率,输出可能会建议您在一个可用区中创建 90 个虚拟机,在另一个可用区中创建 10 个虚拟机。

准备工作

  • advice.capacity API 默认在其可用性和预期正常运行时间建议中包含 AI 可用区。为了确保您可以在 AI 可用区中创建竞价型虚拟机(如果 API 建议您在其中一个可用区中创建虚拟机),请 验证是否已为您的项目启用 AI 可用区
  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

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

      gcloud init

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

  • 设置默认区域和可用区
  • REST

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

      安装 Google Cloud CLI。

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

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

所需的角色

如需获得查看抢占式虚拟机可用性所需的权限,请让管理员向您授予项目的 Compute Viewer (roles/compute.viewer) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含查看抢占式虚拟机可用性所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

您需要具备以下权限才能查看竞价型虚拟机的可用性:

  • 查看 Spot 虚拟机的可用性:针对项目的 compute.advice.capacity 权限

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

查看 Spot 虚拟机的可用性

如需查看 Spot 虚拟机的可用性,您必须指定位置、机器配置和要创建的虚拟机数量。根据结果,您可以创建 Spot 虚拟机,也可以查看其他位置或另一种机器配置的资源可用性。

根据工作负载要求,请考虑以下事项:

如需查看 Spot 虚拟机的可用性,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,前往容量建议页面。

    前往“容量顾问”

  2. 过滤条件窗格中,完成以下步骤:

    1. 位置部分,在区域列表中,选择您要查看 Spot 虚拟机可用性的区域。

    2. 机器规格部分中,指定您要查看可用性的机器配置和竞价型虚拟机的数量:

      1. 机器家族列表中,选择一个机器家族

      2. 系列列表中,最多选择三个机器系列。

      3. 机器类型列表中,最多选择五种机器类型。

      4. 虚拟机数量字段中,输入竞价型虚拟机的数量。

    3. 点击 搜索

gcloud

如需查看 Spot 虚拟机的可用性,请使用 gcloud beta compute advice capacity 命令

gcloud beta compute advice capacity \
    --provisioning-model=SPOT \
    --instance-selection-machine-types=MACHINE_TYPES \
    --target-distribution-shape=TARGET_DISTRIBUTION_SHAPE \
    --size=SIZE \
    --region=REGION

替换以下内容:

  • MACHINE_TYPES:以英文逗号分隔的机器类型列表,用于查看相应机器类型的可用性,例如 n2-standard-2,n2-standard-4。您最多可以指定 5 种机器类型。

  • TARGET_DISTRIBUTION_SHAPE:所请求资源的分布情况。根据您要运行的工作负载类型以及要创建虚拟机的可用区,指定以下值之一:

    • ANY:您希望根据可用性在一个或多个可用区中创建 Spot 虚拟机。请为批处理工作负载指定此值。

    • ANY_SINGLE_ZONE:您希望仅在单个可用区中创建 Spot 虚拟机。对于需要在虚拟机之间进行大量通信的工作负载(例如 AI 或高性能计算 (HPC) 工作负载),请指定此值。

    • BALANCED:您希望根据可用性在一个或多个可用区中创建 Spot 虚拟机,并希望 Compute Engine 尽可能均匀地在各可用区中分配虚拟机。指定此值可最大限度地减少可用区级故障对高可用性服务工作负载或批处理工作负载的影响。

  • SIZE:您要创建的 Spot 虚拟机的数量。

  • REGION:您要查看 Spot 虚拟机可用性的区域。如需指定以英文逗号分隔的可用区列表,而不是区域,请将 --region 标志替换为 --zones 标志

输出类似于以下内容:

recommendations:
- scores:
  obtainability: 0.9
  estimatedUptime: 600s
- shards:
  - instanceCount: 90
    machineType: n2-standard-2
    provisioningModel: SPOT
    zone: https://compute.googleapis.com/compute/beta/projects/example-project/zones/us-central1-a
  - instanceCount: 10
    machineType: n2-standard-4
    provisioningModel: SPOT
    zone: https://compute.googleapis.com/compute/beta/projects/example-project/zones/us-central1-c

REST

如需查看 Spot 虚拟机的可用性,请向 Beta 版 advice.capacity 方法发出 POST 请求。

例如,如需查看某个区域中两种机器类型的可用性,请发出如下请求。每个请求最多可以查看 5 种机器类型的可用性。

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

{
  "instanceProperties": {
    "scheduling": {
      "provisioningModel": "SPOT"
    }
  },
  "instanceFlexibilityPolicy": {
    "instanceSelections": {
      "MACHINE_SELECTION_1": {
        "machineTypes": [
          "MACHINE_TYPE_1"
        ]
      },
      "MACHINE_SELECTION_2": {
        "machineTypes": [
          "MACHINE_TYPE_2"
        ]
      }
    }
  },
  "distributionPolicy": {
    "targetShape": "TARGET_DISTRIBUTION_SHAPE"
  },
  "size": SIZE
}

替换以下内容:

  • PROJECT_ID:您的项目的 ID。

  • REGION:您要查看 Spot 虚拟机可用性的区域。

  • MACHINE_SELECTION_1MACHINE_SELECTION_2:机器类型选择的名称。例如,分别指定 selection-1selection-2

  • MACHINE_TYPE_1MACHINE_TYPE_2:您要查看可用性的机器类型。请注意,根据机器类型的不同,以下情况会有所不同:

    • N1 机器类型:如需将 GPU 挂接到 N1 抢占式虚拟机,请在 MACHINE_SELECTION_1MACHINE_SELECTION_2 字段中添加 guestAccelerators 字段,如下所示:

      "guestAccelerators": [
        {
          "acceleratorCount": ACCELERATOR_COUNT,
          "acceleratorType": "ACCELERATOR_TYPE"
        }
      ]
      

      替换以下内容:

    • 默认不含本地 SSD 磁盘的机器类型:如需将本地 SSD 磁盘挂接到抢占式虚拟机,请在 MACHINE_SELECTION_1MACHINE_SELECTION_2 字段中添加 disks 字段。对于要挂接的每个本地 SSD 磁盘,请重复添加 type 字段并将其设置为 SCRATCH。例如,如需挂接两个本地 SSD 磁盘,请添加以下内容:

      "disks": [
        {
          "type": "SCRATCH"
        },
        {
          "type": "SCRATCH"
        }
      ]
      
  • TARGET_DISTRIBUTION_SHAPE:所请求资源的分布情况。根据您要运行的工作负载类型以及要创建虚拟机的可用区,指定以下值之一:

    • ANY:您希望根据可用性在一个或多个可用区中创建 Spot 虚拟机。请为批处理工作负载指定此值。

    • ANY_SINGLE_ZONE:您希望仅在单个可用区中创建 Spot 虚拟机。对于需要在虚拟机之间进行大量通信的工作负载(例如 AI 或 HPC 工作负载),请指定此值。

    • BALANCED:您希望根据可用性在一个或多个可用区中创建 Spot 虚拟机,并且 Compute Engine 会尽可能均匀地在各可用区中分配虚拟机。指定此值可最大限度地减少可用区级故障对高可用性服务工作负载或批处理工作负载的影响。

  • SIZE:您要创建的 Spot 虚拟机的数量。

输出类似于以下内容:

{
  "recommendations": [
    {
      "scores": {
        "estimatedUptime": "600s",
        "obtainability": 0.9
      },
      "shards": [
        {
          "instanceCount": 90,
          "machineType": "n2-standard-2",
          "provisioningModel": "SPOT",
          "zone": "https://compute.googleapis.com/compute/beta/projects/example-project/zones/us-central1-a"
        },
        {
          "instanceCount": 10,
          "machineType": "n2-standard-4",
          "provisioningModel": "SPOT",
          "zone": "https://compute.googleapis.com/compute/beta/projects/example-project/zones/us-central1-c"
        }
      ]
    }
  ]
}

如果您想查看某个区域内特定可用区中 Spot 虚拟机的可用性,请在请求正文中添加 zones 字段

后续步骤