本文說明如何建立及執行使用執行個體彈性的批次工作。執行個體彈性功能可讓您指定多個機器類型,並選擇性地為這些類型排序,允許作業在這些機器類型上執行。
為工作允許更多機型,即可運用執行個體彈性來提高資源取得性,也就是資源可用於執行工作的機率。如要進一步瞭解如何為工作負載選擇適用的可用性功能,請參閱「提升資源可用性」。舉例來說,使用執行個體彈性可協助您執行下列操作:
事前準備
- 如果您是第一次使用 Batch,請先參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
-
如要取得建立作業所需的權限,請要求管理員授予您下列 IAM 角色:
- 專案的「批次工作編輯者」 (
roles/batch.jobsEditor) - 服務帳戶使用者 (
roles/iam.serviceAccountUser) 在作業的服務帳戶上,預設為預設的 Compute Engine 服務帳戶
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
- 專案的「批次工作編輯者」 (
限制
如果工作使用執行個體彈性,則適用下列所有限制:
允許工作使用的機型越多,資源取得性就越高。
工作無法指定
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[]欄位)
- 最低 CPU 平台 (
- 位置 (如已指定,則為
您無法為 Batch 工作覆寫磁碟和最低 CPU 平台。所有機型都會使用您指定的值 (位於
policy子欄位或執行個體範本中),如果未指定,則會使用最高優先順序執行個體選取項目中的機型預設值。因此,建議您採取下列做法:確認開機磁碟類型與每個允許的機型相容。總而言之,第 4 代和更新的機型不支援永久磁碟,第 2 代和更舊的機型不支援 Hyperdisk,而第 3 代和更舊的機型預設使用永久開機磁碟。
除非您已確認每個允許的機型都支援最低 CPU 平台或選用磁碟,否則請勿指定。
建立可使用多個機型的工作
如要建立工作,並允許使用多種機型,請選取下列其中一種方法。
gcloud
如要使用 Google Cloud CLI 建立工作時設定多個機器類型,請完成下列步驟:
在 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_1、MACHINE_TYPE_2、MACHINE_TYPE_3分別替換為機型,例如e2-micro、e2-small和n1-standard-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_1、MACHINE_TYPE_2、MACHINE_TYPE_3分別替換為機型,例如e2-micro、e2-small和n1-standard-2。
詳情請參閱範例工作。
工作 JSON 設定檔範例
舉例來說,使用 gcloud CLI 或 Batch API 時,您可以透過下列 JSON 設定檔建立基本指令碼作業,其中包含兩個執行個體選取項目:
- 名為
first-choice的執行個體選取項目具有最高優先順序 ("rank": 0),以及三種機型 (e2-micro、e2-small和n1-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"]
}
}
}
}
}