查看 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。如果您大量建立 Spot VM,或在目標大小為 MIG 的情況下建立 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 的數量。

    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 可用性的區域。

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

如要查看特定區域內特定可用區的 Spot VM 供應情形,請在要求內容中加入 zones 欄位

後續步驟