查看 Spot VM 的可用性

本文說明如何查看 Spot VM 的即時可用性和預期正常運作時間。

建立Spot VM 前,您可以使用 advice.capacity API,查看多種機型和位置的即時可用性和預期正常運作時間。這項資訊有助於您執行下列操作:

  • 減少資源可用性錯誤。查看哪些機器類型、地區或區域有可用容量後,您可以在建立 Spot VM 時指定這些設定。這麼做可降低發生資源可用性錯誤的機率。

  • 針對搶占最佳化工作負載。比較不同機器設定和位置的預期正常運作時間,即可選擇最適合工作負載的設定。檢查這些因素可協助您設計及整理 Spot VM,避免搶占作業中斷工作負載。

如要瞭解如何比較不同機器類型和位置的穩定性和成本,請參閱「查看 Spot VM 的搶占率和價格」。

限制

傳送要求至 advice.capacity API 時,您無法查看 TPU 的可用性。

瞭解如何查看 Spot VM 的資源可用性

當您傳送要求至 advice.capacity API 時,輸出內容會顯示下列建議指標。這些指標的依據包括:您想讓 Spot VM 使用的機型、您想建立 Spot VM 的區域,以及所要求資源的即時供應情形和歷來先占率。

  • 可取得分數:您建立點 VM 的要求成功機率,取決於您指定的 VM 數量和機器設定。詳情請參閱「Spot VM 的可取得性分數」。

  • 預估正常運作時間:在 Compute Engine 先占 Spot VM 之前,大多數 Spot VM 預計可運作的最短時間。詳情請參閱「Spot VM 的預估正常運作時間」。

Spot VM 的可取得性分數

當您向 advice.capacity API 傳送要求時,輸出內容中的可取得性分數 (obtainability) 會指出您在一個或多個區域中,成功建立指定數量 Spot VM 的可能性。Compute Engine 會根據您要求資源的即時可用性,以及近期建立要求的成功率,計算這項分數。

可取得性分數範圍為 0.01.0,表示下列其中一種成功機率:

  • 成功機率高 (0.71.0):您很可能可以建立要求的 Spot VM。

  • 中等成功機率 (0.40.6):您有中等機率可以建立要求的 Spot VM。如果您在 MIG 中大量建立 Spot VM 或建立目標大小的 Spot VM,則可能只會取得部分要求的 VM。

  • 成功機率低 (0.00.3):您不太可能建立要求的 Spot VM。建議您檢查其他位置或機型是否有可用資源,或是使用其他佈建模式建立 VM。

Spot VM 的預估正常運作時間

當您傳送要求至 advice.capacity API 時,輸出內容中的預估正常運作時間 (estimatedUptime) 會指出,您指定數量的 Spot VM 預計在遭到搶占前,可運作的最短時間。Compute Engine 會根據指定機型和位置的過往和目前用量模式,計算這項正常運作時間。

Compute Engine 可將預估正常運作時間設為下列其中一個值:

  • 60 分鐘 (3,600 秒):在 Compute Engine 先占 Spot VM 之前,大部分的 Spot VM 可能都會執行一小時。建立 VM,處理可容許中斷的長時間工作負載,例如批次工作負載。

  • 10 分鐘 (600 秒):Compute Engine 先占 Spot VM 前,大部分的 Spot VM 可能會執行 10 分鐘。只為短期執行的工作或容錯工作負載建立 VM,並以短間隔儲存進度。

  • 1 分鐘 (60 秒):在 Compute Engine 先占 Spot VM 之前,大部分的 Spot VM 可能都會執行一分鐘。建議您採取下列其中一項做法:

    • 僅為非常短暫的作業、測試或非重要工作負載建立 VM。

    • 在其他位置或使用不同機型檢查資源可用性。

    • 使用其他佈建模型建立 VM。

最佳做法

為盡量確保使用 advice.capacity API 後能取得容量,建議您採取下列最佳做法:

  • 比較不同機型的輸出內容:如果工作負載很彈性,請比較不同數量的 Spot VM 或機型選項。舉例來說,您可以比較 100 個 n1-standard-2 機型 VM 的輸出內容,以及 50 個 n1-standard-4 機型 VM 的輸出內容。接著,您可以使用最能平衡可用性和預估正常運作時間的設定,建立 Spot VM,滿足工作負載需求。

  • 比較多個位置的輸出內容:如果工作負載可在多個區域或地帶執行,請檢查每個位置的可用性。舉例來說,如果兩個區域的預估正常運作時間相同,請在可取得性分數較高的區域中建立 Spot VM。

  • 將 VM 分散至多個可用區:如果您指定 ANYBALANCED目標分配型態advice.capacity API 可能會建議您在多個可用區建立 Spot VM。舉例來說,為了盡可能建立 100 個 Spot VM,輸出內容可能會建議您在一個可用區中建立 90 個 VM,在另一個可用區中建立 10 個 VM。

事前準備

  • 根據預設,advice.capacity API 的可用性和預期正常運作時間建議會包含 AI 區域。如要確保 API 建議您在 AI 可用區建立 VM 時,您可以在這些可用區建立 Spot VM,請 確認專案已啟用 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 進行驗證」。

必要的角色

如要取得查看 Spot VM 可用情形所需的權限,請要求管理員授予您專案的「Compute 檢視者 」(roles/compute.viewer) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備查看 Spot VM 可用性所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要查看 Spot VM 的可用性,必須具備下列權限:

  • 如要查看 Spot VM 的可用性: compute.advice.capacity 在專案中

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

查看 Spot VM 的可用性

如要查看 Spot VM 的可用性,您必須指定位置、機器設定和要建立的 VM 數量。根據結果,您可以建立 Spot VM,或查看其他位置或機器設定的資源可用性。

視工作負載需求而定,請考慮下列事項:

如要查看 Spot VM 的可用性,請選取下列其中一個選項:

控制台

  1. 前往 Google Cloud 控制台的「容量建議」頁面。

    前往「容量建議」頁面

  2. 在「篩選器」窗格中,完成下列步驟:

    1. 在「Location」(位置) 部分的「Region」(區域) 清單中,選取要查看 Spot VM 可用性的區域。

    2. 在「機器規格」部分,指定機器設定和要查看可用性的 Spot VM 數量:

      1. 在「機器家族」清單中,選取機器家族

      2. 在「系列」清單中,選取最多三個機器系列。

      3. 在「機型」清單中,選取最多五種機型。

      4. 在「Number of VMs」(VM 數量) 欄位中,輸入 Spot VM 的數量。

      5. 選用:預設會隱藏資源有限的區域。如要查看這些區域,請取消勾選「隱藏可用性受限的區域」核取方塊。

    3. 按一下「搜尋」

gcloud

如要查看 Spot VM 的可用性,請使用 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。最多可指定五種機器類型。

  • TARGET_DISTRIBUTION_SHAPE:您要求資源的發布情形。根據要執行的工作負載類型和要建立 VM 的可用區,指定下列其中一個值:

    • ANY:您想根據可用性,在一或多個區域中建立 Spot VM。為批次工作負載指定這個值。

    • ANY_SINGLE_ZONE:您只想根據可用性,在單一區域中建立 Spot VM。如果工作負載需要 VM 之間進行大量通訊,例如 AI 或高效能運算 (HPC) 工作負載,請指定這個值。

    • BALANCED:您想根據可用性,在一或多個區域中建立 Spot VM,並讓 Compute Engine 盡可能在各區域平均分配 VM。指定這個值,盡量減少可用區故障對高可用性服務或批次工作負載的影響。

  • SIZE:要建立的 Spot VM 數量。

  • REGION:要查看 Spot VM 可用性的區域。如要指定以半形逗號分隔的區域清單,而非地區,請將 --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 VM 的可用性,請對 beta advice.capacity 方法發出 POST 要求。

舉例來說,如要查看某個區域中兩種機型的可用性,請提出下列要求。每個要求最多可查看五種機器類型的可用性。

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 VM 可用性的區域。如要查看指定區域內特定區域的供應情形,請在要求內容中加入 distributionPolicy.zones 陣列欄位。舉例來說,如要查看兩個區域中閒置 VM 的可用性,請將 zones 陣列新增至 distributionPolicy 欄位,如下所示:

    "zones": [
      {
        "zone": "zones/ZONE_1"
      },
      {
        "zone": "zones/ZONE_2"
      }
    ]
    

    ZONE_1ZONE_2 替換為您要查看 Spot VM 可用性的兩個區域。

  • MACHINE_SELECTION_1MACHINE_SELECTION_2:機型選取項目的名稱。舉例來說,請分別指定 selection-1selection-2

  • MACHINE_TYPE_1MACHINE_TYPE_2:您要查看可用性的機器類型。請根據機器類型,記下下列事項:

    • N1 機器類型:如要將 GPU 附加至 N1 Spot VM,請在 MACHINE_SELECTION_1MACHINE_SELECTION_2 欄位中加入 guestAccelerators 欄位,如下所示:

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

      更改下列內容:

    • 沒有預設本機 SSD 磁碟的機器類型:如要將本機 SSD 磁碟連接至 Spot VM,請在 MACHINE_SELECTION_1MACHINE_SELECTION_2 欄位中加入 disks 欄位。針對要附加的每個本機 SSD 磁碟,重複 type 欄位並設為 SCRATCH。舉例來說,如要附加兩個本機 SSD 磁碟,請加入下列內容:

      "disks": [
        {
          "type": "SCRATCH"
        },
        {
          "type": "SCRATCH"
        }
      ]
      
  • TARGET_DISTRIBUTION_SHAPE:您要求資源的發布情形。根據要執行的工作負載類型和要建立 VM 的可用區,指定下列其中一個值:

    • ANY:您想根據可用性,在一或多個區域中建立 Spot VM。為批次工作負載指定這個值。

    • ANY_SINGLE_ZONE:您只想根據可用性,在單一區域中建立 Spot VM。如果工作負載需要 VM 之間進行大量通訊,例如 AI 或 HPC 工作負載,請指定這個值。

    • BALANCED:您想根據可用性,在一或多個區域中建立 Spot VM,而 Compute Engine 會盡可能在各區域平均分配 VM。指定這個值,盡量減少可用區故障對高可用性服務或批次工作負載的影響。

  • SIZE:要建立的 Spot VM 數量。

輸出結果會與下列內容相似:

{
  "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"
        }
      ]
    }
  ]
}

後續步驟