運用執行個體彈性功能,提高取得執行個體的機率

本文說明如何建立及執行使用執行個體彈性的批次工作。執行個體彈性功能可讓您指定多個機器類型,並選擇性地為這些類型排序,允許作業在這些機器類型上執行。

為工作允許更多機型,即可運用執行個體彈性來提高資源取得性,也就是資源可用於執行工作的機率。如要進一步瞭解如何為工作負載選擇適用的可用性功能,請參閱「提升資源可用性」。舉例來說,使用執行個體彈性可協助您執行下列操作:

  • 降低資源可用性錯誤的機率,以及相關的排程延遲。
  • 選取可取得性較高的資源,有助於更快完成工作,例如:
    • 提高取得更多例項的機率,以利支援平行處理的工作。
    • 取得較不容易遭到先占的 Spot VM

事前準備

  1. 如果您是第一次使用 Batch,請先參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
  2. 如要取得建立作業所需的權限,請要求管理員授予您下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

限制

如果工作使用執行個體彈性,則適用下列所有限制:

  • 允許工作使用的機型越多,資源取得性就越高。

  • 工作無法指定 FLEX_START 佈建模式或 RESERVATION_BOUND 佈建模式。

  • 工作無法使用明確指定的預留項目。(reservation 欄位必須為未定義或設為 NO_RESERVATION)。

    明確指定的預留項目包含 RESERVATION_BOUND 佈建模式的所有預留項目,以及 STANDARD 佈建模式的部分預留項目。這些功能本質上不相容,因為只有預留項目的機型才能成功建立執行個體。

  • 每個工作最多可選取 50 個執行個體。

  • 工作中的每個執行個體選取項目都必須有不重複的名稱、不重複的等級,以及一或多個不重複的機器類型。

  • 機型不得重複;每個作業的執行個體選取項目只能包含一種機型。

  • 每個工作最多可從執行個體選取項目中,選取 200 個不重複的機器類型。

  • 在同一個執行個體選取項目中指定多個機器類型是選用功能,但如果您想要取得更多資源,就必須這麼做。

    • 只有在某個等級的執行個體選取項目有多個機型時,Batch 才會嘗試選取一或多個可取得性最高的機型。舉例來說,如果您希望工作使用較不容易遭到先占的 Spot VM,或是希望工作有更多執行個體可平行執行工作,就必須選取這個選項。
    • 否則,如果某個等級的執行個體選取項目只有一種機型,執行個體彈性只會協助避免資源可用性錯誤。
  • 工作不得包含 machineType 欄位,且系統會忽略工作指定的任何執行個體範本機型。

  • 您必須確認為作業指定的每個屬性,都與每個允許的機型相容。否則,工作可能會在提交後因無法建立例項而失敗。舉例來說,建議您確認職缺的下列屬性至少與所有機器類型相容:

    • 位置 (如已指定,則為 allowedLocations[] 欄位;否則為 location)
    • 每個工作使用的運算資源 (computeResource 欄位)
    • 磁碟和映像檔 (volumes[] 欄位、disk[] 欄位和 bootDisk 欄位)
    • 網路 (network 欄位)
    • 所有其他執行個體屬性 (instances[] 子欄位):

      • 最低 CPU 平台 (minCpuPlatform 欄位)
      • 佈建模型 (provisioningModel 欄位)
      • GPU (accelerators[] 欄位)
  • 您無法為 Batch 工作覆寫磁碟和最低 CPU 平台。所有機型都會使用您指定的值 (位於 policy 子欄位或執行個體範本中),如果未指定,則會使用最高優先順序執行個體選取項目中的機型預設值。因此,建議您採取下列做法:

    • 確認開機磁碟類型與每個允許的機型相容。總而言之,第 4 代和更新的機型不支援永久磁碟,第 2 代和更舊的機型不支援 Hyperdisk,而第 3 代和更舊的機型預設使用永久開機磁碟。

    • 除非您已確認每個允許的機型都支援最低 CPU 平台或選用磁碟,否則請勿指定。

建立可使用多個機型的工作

如要建立工作,並允許使用多種機型,請選取下列其中一種方法。

gcloud

如要使用 Google Cloud CLI 建立工作時設定多個機器類型,請完成下列步驟:

  1. 在 JSON 檔案中指定工作設定詳細資料時,請在 allocationPolicy 欄位中加入 instanceFlexibilityPolicy 欄位子欄位instanceFlexibilityPolicy 欄位支援選取一或多個執行個體,每個執行個體都有專屬名稱、專屬等級,以及一或多個機器類型清單。

    "allocationPolicy":{
      "instanceFlexibilityPolicy":{
        "instanceSelections":{
          "INSTANCE_SELECTION_NAME":{
            "rank": RANK,
            "machineTypes": [MACHINE_TYPES]
          }
        }
      }
    }
    

    更改下列內容:

    • INSTANCE_SELECTION_NAME:執行個體選取作業的名稱。如果工作有多個例項選項,請確保這項工作中的每個名稱都是專屬的。

    • RANK:選用:代表這個執行個體選取優先順序的整數,值為零或大於零,其中最低值代表最高優先順序。如未指定,預設值為 0 (最高優先順序)。如果工作有多個執行個體選項,請確保這項工作中的每個等級都是專屬的。

    • MACHINE_TYPES:以半形逗號分隔的一或多個機器類型清單,以字串形式表示,用於選取這個執行個體。每個作業的執行個體選取項目只能包含一個機型。舉例來說,三個機器類型的清單可以寫成如下:

      "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
      

      MACHINE_TYPE_1MACHINE_TYPE_2MACHINE_TYPE_3 分別替換為機型,例如 e2-microe2-smalln1-standard-2

    詳情請參閱範例工作

  2. 這項功能目前處於預先發布階段,因此您必須使用 gcloud alpha batch jobs submit 指令建立及提交工作。

    gcloud alpha batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    更改下列內容:

    • JOB_NAME:工作名稱。
    • LOCATION:工作地點
    • JSON_CONFIGURATION_FILE:JSON 檔案的路徑,內含作業的設定詳細資料。

REST

如要使用 Batch API 建立工作,並使用多種機器類型,請在預先發布期間使用 v1alpha jobs.create 方法

如要為工作指定多個機器類型,請在 JSON 檔案主體中的 allocationPolicy 欄位中,加入 instanceFlexibilityPolicy 欄位子欄位instanceFlexibilityPolicy 欄位支援選取一或多個例項,每個例項都有專屬名稱、專屬等級,以及一或多個機器類型清單。

"allocationPolicy":{
  "instanceFlexibilityPolicy":{
    "instanceSelections":{
      "INSTANCE_SELECTION_NAME":{
        "rank": RANK,
        "machineTypes": [MACHINE_TYPES]
      }
    }
  }
}

更改下列內容:

  • INSTANCE_SELECTION_NAME:執行個體選取項目的名稱。如果工作有多個執行個體選項,請確保這項工作中的每個名稱都不重複。

  • RANK:選用:代表這個執行個體選取優先順序的整數,值越小優先順序越高。如未指定,預設值為 0 (最高優先順序)。如果這項工作有多個執行個體選項,請確保這項工作中的每個等級都是唯一的。

  • MACHINE_TYPES:以半形逗號分隔的一或多個機器類型清單,這些類型會以字串形式寫入,供這個執行個體選取。每個作業的執行個體選取項目只能包含一個機型。舉例來說,三個機器類型的清單可以寫成如下:

    "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
    

    MACHINE_TYPE_1MACHINE_TYPE_2MACHINE_TYPE_3 分別替換為機型,例如 e2-microe2-smalln1-standard-2

詳情請參閱範例工作

工作 JSON 設定檔範例

舉例來說,使用 gcloud CLI 或 Batch API 時,您可以透過下列 JSON 設定檔建立基本指令碼作業,其中包含兩個執行個體選取項目:

  • 名為 first-choice 的執行個體選取項目具有最高優先順序 ("rank": 0),以及三種機型 (e2-microe2-smalln1-standard-2)。
  • 名為 second-choice 的執行個體選取項目具有第二優先順序 ("rank": 1) 和一個機型 (e2-medium)。
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy":{
    "instanceFlexibilityPolicy":{
      "instanceSelections":{
        "first-choice":{
          "rank": 0,
          "machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
        },
        "second-choice":{
          "rank": 1,
          "machineTypes": ["e2-medium"]
        }
      }
    }
  }
}

後續步驟