本文說明如何建立及執行批次工作,並使用具備 Tensor Processing Unit (TPU) 的虛擬機器 (VM) 執行個體。TPU 是 Google 開發的客製化特殊應用積體電路 (ASIC),專門用來加速機器學習 (ML) 和人工智慧 (AI) 工作負載。建立批次工作時,您可以視需要指定 TPU 機型,加速容器化或指令碼型 AI 和機器學習推論、評估、微調和訓練工作負載。
如要進一步瞭解 TPU,請參閱 Compute Engine 說明文件中的「關於 Google Cloud上的 TPU」和「TPU 機型」。或者,您也可以改用 GPU,加快資料處理、AI 和機器學習工作負載。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
-
如要取得建立工作所需的權限,請要求管理員授予您下列 IAM 角色:
- 專案的批次工作編輯者 (
roles/batch.jobsEditor) - 工作服務帳戶的服務帳戶使用者 (
roles/iam.serviceAccountUser),預設為預設 Compute Engine 服務帳戶
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
- 專案的批次工作編輯者 (
限制
如果工作使用 TPU,除了 Compute Engine 的 TPU 限制外,還須遵守下列所有限制。
僅限單主機 TPU 配量:Batch 僅支援獨立 TPU VM,稱為單主機 TPU 配量。不支援多主機 TPU 配量,每個配量都由多個互連的 VM 組成。
工作可以在一或多個單主機 TPU 配量上執行。舉例來說,如果工作將
taskCount設為4,並將taskCountPerNode設為1,則執行工作的 VM 數量為 4 個以下。與多主機 TPU slice 不同,單一主機 TPU slice 各自做為獨立 VM 運作,不提供晶片間互連 (ICI) 網路,無法進行高頻寬、低延遲的通訊。如要進一步瞭解單一主機和多主機 TPU 切片,請參閱 Compute Engine 說明文件。
支援的 TPU 版本和機型:Batch 僅支援下列 TPU 版本和機型的單一主機 TPU 配量 (獨立 TPU VM):
- TPU7x (Ironwood):
tpu7x-standard-4t v6e (Trillium):
ct6e-standard-1t、ct6e-standard-4t和ct6e-standard-8tv5p:
ct5p-hightpu-4t支援的消耗選項:Batch 不支援使用 TPU 的工作採用彈性啟動型 VM (
FLEX_START佈建模式)。除了彈性啟動型 VM 之外,您也可以根據 Compute Engine 說明文件中的「依 TPU 版本區分的用量選項可用性」,指定工作 TPU 版本支援的任何用量選項。必須指定單一可用區位置:建立使用 TPU 的工作時,必須將工作限制在特定可用區,方法是將工作的允許位置 (
allowedLocations[]欄位) 設為包含 TPU 版本或預留項目 (如適用) 的可用區。不支援的功能:使用 TPU 的工作不支援下列功能:
如要進一步瞭解各 TPU 機型 (例如支援的磁碟),請參閱 Compute Engine 說明文件中的「TPU 機型」。
建立使用 TPU 的工作
如要建立使用 TPU 的工作,請按照下列步驟操作:
- 規劃使用 TPU 的工作設定。
- 使用您指定的設定建立工作。如需建立使用 TPU 的工作範例,請參閱本文的「建立使用 TPU 的工作」一節。
規劃使用 TPU 的工作設定
建立使用 TPU 的工作前,請務必完成下列事項:
選擇 TPU 版本:選取適合工作負載的 TPU 版本。如需依工作負載類型列出的 TPU 版本清單,請參閱「依工作負載類型推薦的 TPU 版本」。
請務必選取其中一個支援的 TPU 版本。
選擇 TPU 使用模式:根據工作負載、時間長度和成本需求,選擇最合適的使用模式。請務必選取其中一個支援的用量方案。下表匯總了各項使用選項的用途和工作需求。
用量方案和工作需求 預留項目繫結 (日曆模式的未來預留項目或容量區塊的未來預留項目)
用途:如果工作需要高度確保特定時間範圍內的 TPU 資源可用性,建議使用取決於預留項目的用量方案。在 Compute Engine 中,這些功能稱為日曆模式的未來預留項目 (1 到 90 天) 和容量區塊的未來預留項目 (1 年以上)。
詳細資料:建立工作前,您必須先取得或找出所選 TPU 版本和
RESERVATION_BOUND佈建模式的預留項目。預留項目建立後,就會產生指定 VM 的費用,價格與執行 VM 相同,直到您刪除預留項目為止。使用預留項目的 VM 不會產生額外費用,但無論是否使用預留項目,都會產生費用。詳情請參閱 Compute Engine 說明文件中的「選擇預留項目類型」。
如果工作符合下列所有條件,Batch 會使用預留項目繫結的預留項目:
- 將
provisioningModel欄位設為RESERVATION_BOUND。 - 明確指定相容的預留項目。將
reservation欄位設為簡稱 (如果預留項目位於相同專案和可用區),或預留項目、預留項目區塊或預留項目子區塊的完整資源路徑。
以量計價
根據預設,Batch 會使用隨選資源執行大部分工作。如要確保工作使用隨選資源,請完成下列所有操作:
- 將
provisioningModel欄位設為STANDARD。 - 避免使用預留項目。如要防止工作自動使用相容的預留項目,請將
reservation欄位設為NO_RESERVATION。詳情請參閱「建立及執行無法使用預留 VM 的工作」。
Spot VM
用途:建議您使用 Spot VM 降低容錯工作負載的成本。
詳細資料:如果建立使用 Spot VM 的工作要求獲得滿足,VM 會按照 Spot VM 定價收費,這類價格可能經常變動,且可能提供最大折扣,最多可享隨選價格 91% 的折扣。不過,Spot VM 不一定隨時可用,且可能隨時遭到先占。
進一步瞭解 Spot VM 和使用 Spot VM 的工作建議。
Batch 會將 Spot VM 用於符合下列所有條件的工作:
- 將
provisioningModel欄位設為SPOT。 - (選用) 防止預留項目用量。Spot VM 無法與預留項目搭配使用。具體來說,工作可以選擇將
reservation欄位設為NO_RESERVATION。詳情請參閱「建立及執行無法使用預留 VM 的工作」。
選取所選 TPU 可用的可用區:如要使用 TPU 版本,工作的
allowedLocations[]欄位必須設為包含所選 TPU 的可用區,如下所示:- 如果您選擇使用預留項目的消耗選項,則必須使用預留項目所在的可用區。
- 否則,請根據 TPU 供應情形,選取包含 TPU 版本的可用區。
無論是哪一種情況,可用區都必須位於 Batch 支援的區域。
確認專案有足夠的 TPU 配額:如果建立的工作會使用 TPU 搭配隨選或 Spot VM,您必須在要使用的區域有足夠的 TPU 配額。建立工作時,如果使用會耗用 TPU 預留項目的 TPU,則不需要任何 TPU 配額,因為配額會在建立預留項目時使用。如需 TPU 配額名稱清單,請參閱「TPU 配額」;如需查看配額的操作說明,請參閱「查看及管理配額」。
選擇 TPU 機型:為所選 TPU 版本選取 TPU 機型。如果選擇使用預留項目的用量模式,則必須使用預留項目的機型。如要查看各 TPU 版本適用的機型清單,請參閱「TPU 機型」。
建立使用 TPU 的工作
下列各節說明如何建立範例工作,並為每個用量選項使用 TPU。
| 計費方案 | 工作操作說明範例 |
|---|---|
| 預留項目繫結 (日曆模式的未來預留項目或容量區塊的未來預留項目) | |
| 隨選或 Spot VM |
搭配使用 TPU 與隨選或 Spot VM
您可以使用 gcloud CLI 或 Batch API,建立使用 TPU 搭配隨選或 Spot VM 的工作。
gcloud
建立 JSON 設定檔,指定支援的單一主機 TPU 機器類型、將佈建模式設為
STANDARD或SPOT,並在提供 TPU 機器類型的位置執行。舉例來說,如要建立基本指令碼工作,請建立包含下列內容的 JSON 檔案:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "policy": { "provisioningModel": "PROVISIONING_MODEL", "machineType": "MACHINE_TYPE" } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
PROVISIONING_MODEL:用量選項的佈建模式:STANDARD代表隨選,SPOT代表 Spot VM。MACHINE_TYPE:支援的單一主機 TPU 機型,例如ct5p-hightpu-4t。ALLOWED_LOCATIONS:工作允許的位置。如果工作使用 TPU,您必須將allowedLocations[]欄位設為提供 TPU 機型的可用區,例如zones/us-central1-a提供 TPU 機型ct5p-hightpu-4t。
如要建立及執行工作,請使用
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 要求,指定支援的單一主機 TPU 機型、將佈建模型設為 STANDARD 或 SPOT,並在提供 TPU 機型的位置執行。
舉例來說,如要建立基本指令碼工作,請提出下列要求:
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 TPU task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"provisioningModel": "PROVISIONING_MODEL",
"machineType": "MACHINE_TYPE"
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
更改下列內容:
使用 TPU 搭配受預留項目限制的用量方案
您可以使用 gcloud CLI 或 Batch API,建立採用 TPU 的工作,並為預留繫結 (RESERVATION_BOUND) 佈建模式選擇消耗選項,包括容量區塊的未來預留項目或日曆模式的未來預留項目。
gcloud
建立 JSON 設定檔,指定單一主機 TPU 機器類型的預留項目、將佈建模式設為
RESERVATION_BOUND,並在預留項目的可用區中執行。舉例來說,如要建立基本指令碼工作,請建立包含下列內容的 JSON 檔案:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from TPU task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "policy": { "provisioningModel": "RESERVATION_BOUND", "reservation": "RESERVATION", "machineType": "MACHINE_TYPE" } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
RESERVATION:替換為下列其中一個預留項目路徑:如要使用日曆模式的未來預留項目,或容量區塊未來預留項目的任何部分,請指定預留項目:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME如要使用未來預留項目中的特定容量區塊,請指定預留項目區塊:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME如要使用未來預留項目 (適用於容量區塊) 中的特定子區塊,請指定預留項目子區塊:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationSubBlocks/SUB_BLOCK_NAME
MACHINE_TYPE:預留項目的 TPU 機器類型,例如ct5p-hightpu-4t。ALLOWED_LOCATIONS:工作允許的位置。如果工作使用預留的 TPU,您必須將allowedLocations[]欄位設為預留項目的可用區,例如zones/us-central1-a提供 TPU 機型ct5p-hightpu-4t。
如要建立及執行工作,請使用
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 要求,指定單一主機 TPU 機型的預留項目、將佈建模式設為 RESERVATION_BOUND,並在預留項目的可用區中執行。
舉例來說,如要建立基本指令碼工作,請提出下列要求:
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 TPU task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"provisioningModel": "RESERVATION_BOUND",
"reservation": "RESERVATION",
"machineType": "MACHINE_TYPE"
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
更改下列內容:
PROJECT_ID:專案的專案 ID。LOCATION:工作的位置。JOB_NAME:工作名稱。RESERVATION:替換為下列其中一個預留項目路徑:如要使用日曆模式的未來預留項目,或容量區塊未來預留項目的任何部分,請指定預留項目:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME如要使用未來預留項目中的特定容量區塊,請指定預留項目區塊:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationBlocks/BLOCK_NAME如要使用未來預留項目 (適用於容量區塊) 中的特定子區塊,請指定預留項目子區塊:
projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME/reservationSubBlocks/SUB_BLOCK_NAME
MACHINE_TYPE:預留項目的 TPU 機器類型,例如ct5p-hightpu-4t。ALLOWED_LOCATIONS:工作允許的位置。如果工作使用預留的 TPU,您必須將allowedLocations[]欄位設為預留項目的可用區,例如zones/us-central1-a提供 TPU 機型ct5p-hightpu-4t。
如要進一步瞭解如何建立會耗用預留項目的工作,請參閱「使用 VM 預留項目確保資源可用性」。