本文將說明執行程序和工作建立選項。您可以透過批次工作在Google Cloud上執行批次處理工作負載。如要瞭解工作元件和使用 Batch 的必要條件,請參閱「開始使用 Batch」。
工作建立和執行作業的運作方式
如要使用 Batch,您必須建立工作,指定工作負載及其需求,然後由 Batch 自動執行。
如要進一步瞭解工作建立和執行作業的運作方式,請參閱以下各節:
工作生命週期
本節說明工作及其工作從建立到刪除的生命週期。
針對您要在 Batch 上執行的每個工作負載,您都必須完成下列基本程序:
- 建立工作:您可以指定工作的可執行項目、工作和其他任何需求,定義要執行的工作負載。本文件的「建立工作選項」一節將介紹建立工作相關詳細資訊。
- 監控及排解工作:建立工作後,系統會自動將工作排入佇列、排程,並在指定資源上執行。您可以查看已建立的工作或任何工作詳細資料,瞭解目前狀態。如有需要,您可以取消工作來停止或防止工作執行。工作執行或完成後,您也可以使用記錄監控及分析工作。如果工作失敗,您可以使用任何錯誤訊息、狀態事件或記錄來診斷問題,然後再重新建立工作。
- 刪除或匯出工作:工作在 Batch 中仍可供使用,直到您或 Google Cloud 刪除為止。Google Cloud 會在工作完成後 60 天自動刪除。在此之前,您可以自行刪除工作,如果需要保留資訊,也可以在工作刪除前,將工作資訊匯出至批次。刪除工作並套用不同的保留政策後,儲存在其他 Google Cloud 服務中的任何工作相關資訊都不會受到影響。舉例來說,工作記錄會根據 Cloud Logging 保留政策自動保留及刪除。
建立工作後,工作會依序經歷下列狀態:
- 已排入佇列 (
QUEUED
):工作要求已獲准,並在佇列中等候處理。工作會保留在專案佇列中,直到可排程為止。當所需資源可用,且先前的工作已完成評估,系統就會排程。不過,為避免工作過時,如果工作超過佇列中的最大等待時間,Batch 會自動讓工作失敗,而非排程。 - 已排程 (
SCHEDULED
):系統已從佇列中選取工作並開始執行,並正在分配資源。 執行中 (
RUNNING
):工作相關資源已成功建立,其工作可開始執行。工作執行時,每項工作都會經歷下列狀態:
- 待處理 (
PENDING
):工作正在等待 VM 執行。 - 已指派 (
ASSIGNED
):工作已指派至執行的 VM。 - Running (
RUNNING
):任務在 VM 上執行。 任務會在下列其中一種狀態下完成:
Succeeded (
SUCCEEDED
):工作已成功完成,因為其每個可執行項目都符合下列任一條件:- 可執行項目成功 (傳回零的結束代碼)。
- 可執行項目失敗 (傳回非零的結束代碼),但屬於非關鍵可執行項目 (您已啟用可執行項目的
ignoreExitStatus
欄位)。 - 可執行項目未完成,但屬於背景可執行項目 (您已啟用可執行項目的
background
欄位)。
失敗 (
FAILED
):至少有一個可執行項目不符合上述條件,因此任務失敗並停止執行。
工作資源會在工作完成前刪除。
- 待處理 (
工作會在下列其中一種狀態下完成:
- Succeeded (
SUCCEEDED
):工作成功,因為所有工作都已完成。 - 失敗 (
FAILED
):工作失敗並停止執行,因為至少有一項工作失敗。 - 已取消 (
CANCELLED
):使用者在工作成功或失敗前已取消工作。
- Succeeded (
工作排隊和排程
一般來說,如果工作較小,且只需要少數常見資源,就比較有可能執行並提早完成。在批次作業說明文件中,工作通常都很小,且使用極少的資源,因此可能只需幾分鐘就能完成。
具體來說,工作完成排入佇列和排程所需的時間會因工作和時間而異,具體取決於下列因素:
使用者指定的工作先決條件:您要求在排定工作前必須滿足的所有先決條件。
根據預設,工作沒有任何前置條件。您可以選擇指定,在某項或多項現有工作成功或失敗之前,系統不得排定工作。詳情請參閱「排定依附工作」(預先發布)。
工作優先順序:相對於專案中其他工作的優先順序,工作優先順序為何。
您可以選擇納入
--priority
標記 (適用於 gcloud CLI) 或priority
JSON 欄位,藉此指定工作的優先順序。您可以將工作優先順序定義為介於0
(最低優先順序) 和99
(最高優先順序) 之間的數字。設定較高的優先順序,有助於讓工作在專案中優先於低優先順序的工作執行。如果您未設定工作的優先順序,系統預設會使用最低優先順序
0
。如果兩個佇列工作具有相同的優先順序,則優先順序較高的為先建立的工作。工作資源供應情形:工作所需資源在允許的地區是否供應。
首先,如果您指定的資源並未在該位置提供,工作就無法執行。在這種情況下,工作會失敗,並顯示區域可用性錯誤。
其次,如果工作所需的任何資源因資源可用性錯誤而導致容量低於目前需求,則工作更有可能延遲或失敗。因此,如果您需要的資源較少且較常見,且不限制工作只能在某個區域的任何區域中執行,工作可能會更快執行。
如要進一步瞭解工作所需的資源,請參閱本文件中的「工作執行」一節。如要進一步瞭解可為 Batch 作業及其資源指定的位置,請參閱「位置」頁面。
配額和限制:專案針對 Google Cloud 資源和要求設定的門檻。
如果工作超過任何必要資源或要求的限制或專案配額,就無法執行。發生這種情況時,Batch 可能會延遲工作並在稍後重新執行,或是讓工作失敗並顯示相關錯誤。
您可以建立符合所有相關限制的作業,並確保專案有足夠的相關配額,以免工作發生延遲和錯誤。詳情請參閱「批次配額與限制」。
工作執行作業
工作執行所需的時間可能會因工作排程和工作資源而異。
工作排程
工作執行時,系統會根據排程政策 (schedulingPolicy
) 欄位指定的下列任一選項,為工作排定工作時間:
- 盡快 (
AS_SOON_AS_POSSIBLE
) (預設):工作會在資源可用時立即執行,且可平行執行。一次執行的工作數量取決於工作資源允許的每個 VM 並行工作數量和其他設定選項,如本文件的「工作資源」一節所述。 - 依序 (
IN_ORDER
):工作會依遞增索引號順序依序執行。
工作資源
每個 Batch 作業都會在區域代管執行個體群組 (MIG) 中執行,這類群組包含一或多個相符的 Compute Engine 虛擬機器 (VM) 執行個體,每個執行個體都位於所包含區域的其中一個。每個 VM 都有專屬的 CPU 核心硬體 (特別是虛擬 CPU (vCPU)) 和記憶體,這些硬體和記憶體會影響工作效能;此外,每個 VM 都有一個啟動磁碟,用於儲存作業系統 (OS) 映像檔和執行工作時的相關指示。
在工作執行期間,Batch 會自動建立及刪除符合您規格的資源。建立工作時,您可以指定下列項目來設定資源:
每項工作所需的運算資源:除非預設值已足夠,否則您必須指定每項工作所需的運算資源,包括 vCPU、記憶體和 (如有必要) 額外的啟動磁碟儲存空間。詳情請參閱「每個工作單元 (
computeResource
) 的運算資源」欄位。VM 資源:您也可以視需要使用 VM 資源政策 (
instances[].policy
) 欄位或替代instances[].instanceTemplate
欄位,指定工作 VM (例如機器類型和作業系統) 和其他資源 (例如 GPU 和儲存空間)。如果您將這些欄位留空 (使用Google Cloud 控制台建立工作時無法留空),Batch 會自動嘗試選取相容的 VM,且不會新增任何額外資源。
每個 VM 可同時執行的 VM 數量和工作數量,會因工作而異,這取決於工作排程和您指定的硬體需求。如果您指定要執行 IN_ORDER
的工作任務,該工作就會有一個 VM,且一次只執行一個工作。否則,如果工作任務執行 AS_SOON_AS_POSSIBLE
,您可以使用下列公式估算 VM 數量和同時執行的任務數量:
\[{vmsPerJob}=\frac{taskCount}{parallelTasksPerVm}\]
這個公式包含以下值:
- \({vmsPerJob}\):工作 VM 數量上限。為工作建立的實際 VM 數量可能會少於這個數量,例如,如果 Batch 預期使用較少資源執行工作比等待更多資源更快,這個值也會受到每個工作限制的並行 VM 數量限制。
- \({taskCount}\):工作任務的總數,您可以使用「任務數量 (
taskCount
)」欄位來定義。 \({parallelTasksPerVM}\):可在 VM 上同時執行的工作數量上限。
這個值會根據下列所有標準決定:
最小值為 1 個工作。
最大值為 20 個工作,如果已定義,則為 每個工作的平行工作數量上限 (
parallelism
) 欄位的值。如果已定義每個 VM 的並行任務上限 (
taskCountPerNode
) 欄位,系統會使用該值。否則,如果
taskCountPerNode
未定義,Batch 會將每個 VM 的運算資源總數 (具體來說是 vCPU) 除以每個工作所需的數量,藉此決定值:\[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]
這個公式包含以下值:
\({vcpusPerVm}\):每個 VM 的 vCPU 總數,由工作 VM 的機器類型決定。
\({vcpusPerTask}\):每個工作負載的 vCPU 數量,可透過轉換 每個工作負載的 vCPU 數量 (
cpuMilli
) 欄位的單位來決定。
工作建立選項
「建立並執行基本工作」一文會說明基本概念,包括如何使用指令碼或容器映像檔定義可執行項目,以及如何設定預先定義和自訂環境變數。
瞭解建立工作的基礎知識後,建議您建立使用下列一或多個額外設定選項的工作:
控管工作存取權:
「使用自訂服務帳戶控管工作存取權」一文說明如何指定工作的服務帳戶,這會影響工作 VM 可存取的資源和應用程式。如果您未指定自訂服務帳戶,工作預設會使用 Compute Engine 預設服務帳戶。
網路總覽提供工作網路設定的總覽資訊,包括何時及如何自訂工作網路設定、指定工作網路、封鎖外部連線,以及使用 VPC Service Controls 保護資料和資源。
使用 Secret Manager 保護機密資料一文說明如何在建立工作時,使用 Secret Manager 密鑰指定經過加密的資訊,以安全的方式定義機密資料,例如自訂環境變數和登入憑證。
設定工作其他選項:
「使用 MPI 程式庫設定工作通訊」一文說明如何使用訊息傳遞介面 (MPI) 程式庫,設定具有互相依賴工作的工作,讓這些工作可在不同 VM 之間相互通訊。MPI 的常見用途是緊密結合的高效能運算 (HPC) 工作負載。
自訂工作執行的資源:
「使用 VM 執行個體範本定義工作資源」一文說明如何在建立工作時指定 Compute Engine VM 範本,以便定義工作資源。這是使用
instances[].policy
欄位直接指定工作資源的替代方案。「在工作中使用 GPU」一文說明如何定義使用一或多個圖形處理器 (GPU) 的工作。使用 GPU 的工作常見用途包括資料密集型處理或機器學習 (ML) 工作負載。
「為工作使用儲存空間磁碟區」一文說明如何定義可存取一或多個外部儲存空間磁碟區的工作。儲存空間選項包括新的或現有的永久磁碟、新的本機 SSD、現有的 Cloud Storage 值區,以及現有的網路檔案系統 (NFS),例如 Filestore 檔案共用。
VM OS 環境總覽提供工作 VM 作業系統 (OS) 環境的時間和自訂方式總覽,包括工作 VM OS 映像檔和開機磁碟。
改善工作中的各個層面:
改善監控和分析功能:
「寫入工作記錄」一文說明如何設定工作的可執行項目,以便寫入工作記錄。您可以透過記錄工作記錄,在 Cloud Logging 中顯示自訂資訊,方便分析及排解工作問題。
設定自訂狀態事件一文說明如何為工作項目的可執行項目設定自訂狀態事件。您可以使用自訂狀態事件說明發生在可執行項目上的重要事件,並在查看工作狀態事件記錄時顯示這些事件,這有助於您更輕鬆地分析及排除工作相關問題。
啟用狀態通知說明如何設定工作,以便傳送 Pub/Sub 通知,說明工作狀態。您可以選擇在 BigQuery 資料表中儲存及查詢這類通知。閱讀本文前,請先設定專案,使用 Pub/Sub 通知和 BigQuery 監控工作狀態。
啟用作業套件代理程式指標說明如何設定工作,以便自動安裝作業套件代理程式。作業套件代理程式會收集工作資源的效能和使用率相關的其他指標。如要進一步瞭解如何查看及使用資源指標,請參閱「查看指標,監控及最佳化工作資源」。
「排程依附工作」(預覽) 說明如何指定工作,在執行前必須等待一或多個現有依附工作成功或失敗。如果工作負載的資源需求不同,您可以將用於低需求作業 (例如資料準備) 和需要大量運算的作業 (例如資料處理) 的 VM 類型分開,藉此降低成本和配額使用量。
自動重試工作一文說明如何在所有或指定的失敗後,自動重試工作的工作。自動重試功能有助於減少疑難排解的阻礙,並縮短發生暫時性錯誤的工作所需的整體執行時間。舉例來說,如果工作在 Spot VM 上執行,則可使用自動重試功能,因為 Spot VM 提供大幅折扣,但可能不一定隨時可用,且隨時可能會被先占。
「使用逾時限制限制執行時間」一文說明如何限制允許執行工作或可執行項目的時間長度。避免執行時間過長,或許可以減少意外的成本和延遲。
使用 VM 保留項目確保資源可用性說明如何設定可在保留 VM 上執行的工作。使用預留 VM 可協助您盡可能縮短工作排程時間、避免資源可用性錯誤,並降低成本。
減少延遲時間:
「將 VM 置於同一處以減少延遲」一文說明如何要求 VM 彼此相近,以減少工作 VM 之間的網路延遲時間。對於經常在 VM 之間進行網路通訊的工作而言,這項效能優勢特別實用,例如使用 MPI 程式庫進行通訊的工作。
「使用映像檔串流」一文說明如何透過從 Artifact Registry 串流容器映像檔來縮短工作啟動時間。
使用其他服務建立及執行工作:
「使用 Workflows 調度工作」一文說明如何使用 Workflows,按照您使用 Workflows 語法定義的順序執行工作任務。
「使用 Nextflow 調度工作」一文說明如何透過 Nextflow 管道執行 Batch 工作,以便調度生物資訊學工作流程。
使用 dsub 調度工作說明如何透過
dsub
管道執行 Batch 工作,您可以使用該管道在 Google Cloud 服務上調度批次處理工作流程。使用 Terraform 和 Cloud Scheduler 建立及執行批次工作說明如何將批次工作納入 Terraform。Terraform 可讓您在設定檔中指定偏好的狀態,以便佈建及管理基礎架構,這些設定檔可視為程式碼,並儲存在 GitHub 等版本控制系統中。