本文說明如何建立在預留資源上執行的工作,以及如何禁止工作使用預留項目。
預留項目是 Compute Engine 的一項功能。預留項目可確保您取得一或多個 VM 的容量,並使用指定的硬體設定。VM 的預留資源會從您建立預留資源開始計費,直到您刪除預留資源為止。不過,使用該 VM 時,總費用與沒有預留項目的 VM 相同。
一般來說,如果容量可用性至關重要,或想避免取得資源時發生錯誤,預留資源就非常實用。如果是 Batch,建議使用專屬預留項目,盡量縮短工作排程時間,或嘗試在現有預留項目未使用時加以運用。如果您有未充分使用的預訂項目 (例如承諾使用折扣所需的預訂項目),可以設定作業,在預訂項目未使用時嘗試消耗這些項目,盡量減少產生的費用。或者,如要優先為專案中的其他工作負載提供資源,可以明確禁止工作消耗保留項目。
如要進一步瞭解預留項目,請參閱 Compute Engine 預留項目說明文件。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
- 請確認您有權建立預留項目或查看現有預留項目,以便工作視需要使用 VM。
-
如要取得建立作業所需的權限,請要求管理員授予下列 IAM 角色:
-
專案的批次工作編輯者 (
roles/batch.jobsEditor) -
服務帳戶使用者 (
roles/iam.serviceAccountUser) 在作業的服務帳戶上,預設為預設 Compute Engine 服務帳戶
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
-
專案的批次工作編輯者 (
限制
除了預留的一般限制,Batch 還有下列限制:
- 作業的 VM 無法使用共用預留項目。
- 如果作業或預留項目指定密集配置政策,作業的 VM 就無法使用預留項目。
- 如果您使用 Google Cloud 控制台建立工作,VM 會自動使用相符的預留項目。如要使用特定預留項目或禁止 VM 使用預留項目,您必須使用 gcloud CLI 或 Batch API 建立工作時,定義
reservation欄位。
需求條件
本節將概述作業 VM 使用預留資源的規定。如要進一步瞭解所有需求,請參閱 Compute Engine 說明文件中的預留資源一般需求,以及本文件稍後的規劃設定程序。
如要讓作業的 VM 一般都能使用預留項目,必須符合下列所有條件:
工作和預留項目必須指定完全相符的 VM 屬性。
你必須遵守本文件中的所有限制,以及預訂的其他一般規定。
如要讓作業的每個 VM 順利使用預留項目,預留項目必須在 VM 的執行時間內有可用的未使用容量。
預留容量的未使用容量是 VM 數量與目前使用該容量的 VM 數量之間的差異。只要有未使用的預留容量,VM 就會嘗試使用預留項目。因此,VM 可以在建立時或稍後在執行階段開始使用預留資源。VM 停止運作或預留項目遭刪除前,VM 會持續使用預留項目。
視未使用的預留容量總量而定,作業的部分或所有 VM 可能會耗用預留容量,且預留 VM 數量可能會在作業執行期間有所不同。
建立及執行可使用預留 VM 的工作
規劃設定。 如要確保工作和預約時間相容,請完成下列步驟。
如要使用現有的保留項目,請建立具有對應設定的作業。否則,如要建立新的預訂,請選取偏好的設定選項。
判斷預訂屬性。由於限制,共用類型必須為「單一專案」,這是預訂的預設選項。決定要用於下列預訂屬性的值:
- 消費類型*
- VM 數量†
判斷工作和預訂的 VM 屬性。 由於這項限制,工作和預留項目都無法指定密集配置政策,而這也是預留項目和工作的預設選項。判斷要用於下列 VM 屬性的值,這些值必須與預留項目和工作完全相符:
- 專案
- 區域*
- 機器類型†
- 最低 CPU 平台† (如有‡)
- GPU 類型和數量† (如有‡)
- 本機 SSD 類型和數量† (如有‡)
- 預留項目相依性†#
*工作 VM 必須與預留 VM 位於相同區域。您必須在工作的
allowedLocations[]欄位中加入這個區域,或者如果省略allowedLocations[]欄位,則將工作地點設為包含這個區域的地區。†工作必須使用
policy子欄位或VM 執行個體範本定義所有這些屬性。工作無法同時指定policy子欄位和範本。‡ 您無法為一個資源定義選用欄位,但從另一個資源省略。定義或省略預訂和工作的選用欄位。如果作業指定 VM 執行個體範本,這也適用於指定範本的欄位。
#預留項目的消耗類型會決定工作 VM 需要的預留項目相依性,您必須在工作中指定,如下所示:
- 如果作業使用 VM 執行個體範本,範本需要設定保留項目親和性,如保留項目說明文件所述。
- 如果工作未使用範本,且明確指定保留項目,請在工作的
reservation欄位中指定保留項目名稱。 - 否則,如果工作未使用範本,且預訂方案會自動耗用,請省略工作的
reservation欄位。
準備預訂。如果尚未建立預留項目,請建立預留項目,供作業的 VM 使用。確認預訂項目是否具有您規劃的屬性。
建立及執行工作。您可以使用 gcloud CLI 或 Batch API 建立及執行工作,從準備好的預留項目取用 VM:
gcloud
建立 JSON 檔案,指定作業的設定詳細資料,將 VM 執行個體資源 (
instances[]) 子欄位設為與預留項目的 VM 屬性完全相符。舉例來說,如要建立基本指令碼工作,從預訂項目取用 VM,請建立內容如下的 JSON 檔案。
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }將
VM_RESOURCES替換為與您要作業使用的預留項目相符的 VM 資源,方法是指定您在先前步驟中規劃的instances[]子欄位。舉例來說,從
VM_RESOURCES的下列值開始:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "provisioningModel": "PROVISIONING_MODEL", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }使用這個值之前,請根據下列所有問題更新:
要使用執行個體範本嗎?
是:將
policy欄位替換為instanceTemplate欄位,並指定符合預訂項目的現有 VM 執行個體範本。舉例來說,請參閱使用 VM 執行個體範本的操作說明,並查看本文件中其餘問題,確認執行個體範本的properties欄位。如果保留項目使用 GPU 或本機 SSD,則您也需要設定installGpuDrivers欄位,並分別為本機 SSD 設定volumes[]欄位。然後提交工作。否:將
MACHINE_TYPE替換為與預留項目相同的機器類型。
保留項目是否包含最低 CPU 平台?
是:將
MIN_CPU_PLATFORM替換為相同的最低 CPU 平台。否:移除
minCpuPlatform欄位。
預訂項目是否包含 GPU?
是:完成下列步驟。
- 取代
INSTALL_GPU_DRIVERS,並指定安裝這項工作 GPU 驅動程式所需的任何其他欄位。如需操作說明,請參閱「安裝 GPU 驅動程式」。 - 根據使用選項替換
PROVISIONING_MODEL:預訂使用STANDARD(預設),或預訂日曆模式使用RESERVATION_BOUND(預覽版)。 根據 GPU 機器類型更新
accelerators[]欄位:- 如果您使用加速器最佳化機型,請移除
accelerators[]欄位。 - 否則,如果您使用 N1 加速器最佳化機器類型,請將
GPU_TYPE和GPU_COUNT替換為相符的預留項目。
- 如果您使用加速器最佳化機型,請移除
- 取代
否:移除
installGpuDrivers欄位、provisioningModel欄位和accelerators[]欄位。
保留項目是否包含本機 SSD?
是:取代
LOCAL_SSD_SIZE和LOCAL_SSD_NAME以符合預訂項目,並透過將volumes[]欄位新增至工作,掛接本機 SSD。舉例來說,請參閱使用本機 SSD 的程式碼範例。否:移除
disks[]欄位。
預留項目是否使用明確指定的消耗類型?
是:將
SPECIFIC_RESERVATION_NAME替換為預留項目名稱。否:移除
reservation欄位。
舉例來說,假設您使用自動耗用的
n2-standard-32VM 保留項目,但未指定任何最低 CPU 平台、GPU 或本機 SSD。此外,您也不想指定 VM 執行個體範本。在這種情況下,您必須將VM_RESOURCES替換為下列值:"policy": { "machineType": "n2-standard-32" }如要建立及執行工作,請使用
gcloud batch jobs submit指令。gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE更改下列內容:
JOB_NAME:作業名稱。LOCATION:工作地點。除非作業指定allowedLocations[]欄位,否則這必須是包含預訂方案區域的地區。JSON_CONFIGURATION_FILE:JSON 檔案的路徑,內含作業的設定詳細資料。
API
向
jobs.create方法發出POST要求,將VM 執行個體資源 (instances[]) 子欄位設為與預留項目的 VM 屬性完全相符。舉例來說,如要建立基本指令碼工作,從預留項目取用 VM,請發出下列要求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { VM_RESOURCES } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
PROJECT_ID:專案的專案 ID。LOCATION:工作地點。除非作業指定allowedLocations[]欄位,否則這必須是包含預訂方案區域的地區。JOB_NAME:作業名稱。VM_RESOURCES:符合您要作業使用的預留項目,並指定您在先前步驟中規劃的instances[]子欄位。舉例來說,從
VM_RESOURCES的下列值開始:"installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "minCpuPlatform": "MIN_CPU_PLATFORM", "provisioningModel": "PROVISIONING_MODEL", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ], "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ], "reservation": "SPECIFIC_RESERVATION_NAME" }
使用這個值之前,請根據下列所有問題更新:
要使用執行個體範本嗎?
是:將
policy欄位替換為instanceTemplate欄位,並指定符合預訂項目的現有 VM 執行個體範本。舉例來說,請參閱使用 VM 執行個體範本的操作說明,並查看本文件中其餘問題,確認執行個體範本的properties欄位。如果保留項目使用 GPU 或本機 SSD,則您也需要設定installGpuDrivers欄位,並分別為本機 SSD 設定volumes[]欄位。然後提交工作。否:將
MACHINE_TYPE替換為與預留項目相同的機器類型。
保留項目是否包含最低 CPU 平台?
是:將
MIN_CPU_PLATFORM替換為相同的最低 CPU 平台。否:移除
minCpuPlatform欄位。
預訂項目是否包含 GPU?
是:完成下列步驟。
- 取代
INSTALL_GPU_DRIVERS,並指定安裝這項工作 GPU 驅動程式所需的任何其他欄位。如需操作說明,請參閱「安裝 GPU 驅動程式」。 - 根據使用選項替換
PROVISIONING_MODEL:預訂使用STANDARD(預設),或預訂日曆模式使用RESERVATION_BOUND(預覽版)。 根據 GPU 機器類型更新
accelerators[]欄位:- 如果您使用加速器最佳化機型,請移除
accelerators[]欄位。 - 否則,如果您使用 N1 加速器最佳化機器類型,請將
GPU_TYPE和GPU_COUNT替換為相符的預留項目。
- 如果您使用加速器最佳化機型,請移除
- 取代
否:移除
installGpuDrivers欄位、provisioningModel欄位和accelerators[]欄位。
保留項目是否包含本機 SSD?
是:取代
LOCAL_SSD_SIZE和LOCAL_SSD_NAME以符合預訂項目,並將volumes[]欄位新增至工作,藉此掛接本機 SSD。舉例來說,請參閱使用本機 SSD 的程式碼範例。否:移除
disks[]欄位。
預留項目是否使用明確指定的消耗類型?
是:將
SPECIFIC_RESERVATION_NAME替換為預留項目名稱。否:移除
reservation欄位。
舉例來說,假設您使用自動耗用的
n2-standard-32VM 保留項目,但未指定任何最低 CPU 平台、GPU 或本機 SSD。此外,您也不想指定 VM 執行個體範本。在這種情況下,您必須將VM_RESOURCES替換為下列值:"policy": { "machineType": "n2-standard-32" }
建立及執行無法使用預留 VM 的工作
如要禁止工作使用任何預留項目,請將 reservation 欄位設為 NO_RESERVATION。如要進一步瞭解如何避免預留資源遭到耗用,請參閱 Compute Engine 說明文件中的「避免運算執行個體耗用預留資源」。
您可以使用 gcloud CLI 或 Batch API 建立及執行工作,但工作無法使用任何預留 VM。
gcloud
建立 JSON 檔案,指定工作的設定詳細資料,並將
reservation欄位設為NO_RESERVATION。舉例來說,如要建立無法使用預訂資源的基本指令碼工作,請建立含有下列內容的 JSON 檔案:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ] }, "taskCount": 3 } ], "allocationPolicy": { "instances": [ { "policy": { "reservation": "NO_RESERVATION" } } ], }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }如要建立及執行作業,請使用
gcloud batch jobs submit指令:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE更改下列內容:
JOB_NAME:作業名稱。LOCATION:工作地點。JSON_CONFIGURATION_FILE:JSON 檔案的路徑,內含作業的設定詳細資料。
API
對 jobs.create 方法發出 POST 要求,將 reservation 欄位設為 NO_RESERVATION。
舉例來說,如要建立無法使用預留項目的基本指令碼工作,請提出下列要求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"reservation": "NO_RESERVATION"
}
}
],
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
更改下列內容: