工作建立和執行作業總覽

本文說明作業的執行程序和建立選項。您可以在Google Cloud上執行批次處理工作負載,如要瞭解工作元件和使用 Batch 的必要條件,請參閱「開始使用 Batch」。

工作建立和執行作業的運作方式

如要使用 Batch,請建立工作並指定工作負載及其需求,然後 Batch 就會自動執行。

以下各節說明工作建立和執行作業的運作方式:

工作生命週期

本節說明工作和工作的生命週期,從建立到刪除。

如要在 Batch 上執行工作負載,請完成下列基本程序:

  1. 建立工作:指定工作的可執行檔、工作和任何其他需求,定義要執行的工作負載。如要瞭解如何建立工作,請參閱本文的「工作建立選項」一節。
  2. 監控及排解工作問題:建立工作後,系統會自動將工作加入佇列、排定時間,並在指定資源上執行。您可以查看已建立的工作或任何工作的詳細資料,瞭解目前狀態。如有需要,您可以取消工作來停止或防止工作執行。工作執行或完成後,您也可以使用記錄檔監控及分析工作。如果工作失敗,您可以先使用任何錯誤訊息、狀態事件或記錄檔診斷問題,再重新建立工作。
  3. 刪除或匯出作業:作業資訊會保留在 Batch 中,直到您或 Google Cloud 刪除作業為止。Google Cloud 會在作業完成 60 天後自動刪除作業。在此之前,您可以選擇自行刪除工作,或是在工作刪除前,透過 Batch 匯出工作資訊 (如需保留資訊)。刪除工作後,儲存在其他 Google Cloud 服務中的工作相關資訊不會受到影響,且有各自的保留政策。舉例來說,系統會根據 Cloud Logging 保留政策,自動保留及刪除工作記錄。

建立工作後,工作會依序進入下列狀態:

  1. 已排入佇列 (QUEUED):工作要求已獲准,目前在佇列中等待。工作會留在專案的佇列中,直到系統排定工作時間為止。排定時間的條件是所需資源可用,且佇列中排在工作前面的工作都已評估完畢。不過,為避免工作過時,如果工作超過佇列中的等待時間上限,Batch 會自動讓工作失敗,而不是排定工作。
  2. 已排定 (SCHEDULED):系統已從佇列中選取工作,準備開始執行,並正在分配資源。
  3. 執行中 (RUNNING):工作資源已順利建立,工作可以開始執行。

    工作執行時,每個工作都會經歷下列狀態:

    1. 待處理 (PENDING):工作正在等待 VM 執行。
    2. 已指派 (ASSIGNED):工作已指派 VM 來執行。
    3. 執行中 (RUNNING):工作正在 VM 上執行。
    4. 工作會在下列其中一種狀態下完成:

      • 成功 (SUCCEEDED):工作成功,因為每個可執行檔都符合下列其中一項條件:

        • 可執行的項目成功 (傳回的結束代碼為零)。
        • 可執行的項目失敗 (傳回非零的結束代碼),但屬於非重要可執行的項目 (您已啟用可執行項目的 ignoreExitStatus 欄位)。
        • 可執行的項目未完成,但屬於背景可執行的項目 (您已啟用可執行項目的background欄位)。
      • 失敗 (FAILED):至少有一個可執行的項目不符合上述條件,因此工作失敗並停止執行。

    在工作完成前刪除工作資源。

  4. 工作會在下列其中一種狀態下完成:

    • 成功 (SUCCEEDED):工作成功,因為所有工作都成功。
    • 失敗 (FAILED):工作失敗並停止執行,因為至少有一項工作失敗。
    • 已取消 (CANCELLED):使用者在工作成功或失敗前取消工作

詳情請參閱參考文件中的工作狀態任務狀態

工作排隊和排程

一般來說,如果工作較小,且只需要少數常見資源,就越有可能執行並更快完成。以 Batch 說明文件中的範例工作為例,這些工作通常非常小,使用的資源也很少,因此可能在幾分鐘內就會完成。

具體來說,工作完成佇列和排程所需的時間會因工作而異,也會因時間而異,取決於下列因素:

  • 使用者指定的工作先決條件:排定工作前必須符合的任何先決條件。

    根據預設,職缺沒有任何先決條件。您可以選擇指定工作必須等到一或多個現有工作成功或失敗後,才能排定時間。詳情請參閱「排定相依工作」(預覽版)。

  • 工作優先順序:工作相對於專案中其他工作的優先順序。

    您可以選擇加入 gcloud CLI 的 --priority 標記,或 priority JSON 欄位,指定工作優先順序。您可以將作業的優先順序定義為介於 0 (最低優先順序) 和 99 (最高優先順序) 之間的數字。設定較高的優先順序,可讓工作比專案中優先順序較低的工作更快執行。

    如果您未設定工作的優先順序,系統會預設使用最低優先順序 0。如果兩個佇列工作具有相同優先順序,則優先順序較高的是先建立的工作。

  • 工作資源可用性:允許位置內工作所需資源的可用性。

    首先,如果您指定該位置未提供的任何資源,工作就無法執行,且會因可用區可用性錯誤而失敗。

    其次,如果任何必要資源的容量相對於目前需求量偏低,就可能發生資源可用性錯誤,導致工作延遲或失敗。因此,如果您需要較少、較常見的資源,且未限制工作在區域中的任何可用區執行,工作可能會更快執行。

    如要進一步瞭解工作資源,請參閱本文的「工作執行」一節。如要進一步瞭解可為批次工作及其資源指定的位置,請參閱「位置」頁面。

  • 配額和限制:專案的 Google Cloud 資源和要求門檻。

    如果作業超過任何必要資源或要求的限制或專案配額,就無法執行。發生這種情況時,Batch 可能會延遲工作並稍後重試,或讓工作失敗並顯示相關錯誤。

    如要避免作業延遲和發生錯誤,請建立符合所有相關限制的作業,並確保專案有足夠的相關配額。詳情請參閱「批次配額與限制」。

工作執行作業

工作執行時間會因工作排程和工作資源而異。

工作排程

工作執行時,系統會根據排程政策 (schedulingPolicy) 欄位排定工作任務,您可以指定下列其中一個選項:

  • 盡快 (AS_SOON_AS_POSSIBLE) (預設): 只要有可用資源,工作就會立即執行,且可平行執行。 一次執行的工作數量取決於工作資源允許的每個 VM 平行工作,以及其他設定選項,如本文「工作資源」一節所述。
  • 依序 (IN_ORDER):工作會依遞增的索引順序逐一執行。

工作資源

每個批次工作都會在區域代管執行個體群組 (MIG) 上執行,這是一或多個相符的 Compute Engine 虛擬機器 (VM) 執行個體群組,每個執行個體都位於其中一個包含的可用區。每部 VM 都有專屬硬體,可供 CPU 核心 (具體來說是虛擬 CPU (vCPU)) 和記憶體使用,這會影響作業效能;此外,VM 也有開機磁碟,可儲存作業系統 (OS) 映像檔和作業執行指示。

工作執行期間,Batch 會自動建立及刪除符合您規格的資源。建立工作時,請指定下列項目來設定資源:

  • 每項工作使用的運算資源:除非預設值足夠,否則您必須指定每項工作執行時所需的運算資源,包括 vCPU、記憶體,以及 (如有需要) 額外的開機磁碟儲存空間。詳情請參閱 「每個工作使用的運算資源 (computeResource) 欄位」

  • VM 資源:您也可以視需要指定作業的 VM,例如機型和 OS,以及 GPU 和儲存空間磁碟區等額外資源,主要方法是使用 VM 資源政策 (instances[].policy) 欄位或替代的 instances[].instanceTemplate 欄位。(如要允許工作使用多種機器類型,也可以使用 instanceFlexibilityPolicy 欄位)。

    如果將這些欄位保留為未定義狀態 (使用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) 欄位的單位而得

工作建立選項

建立及執行基本工作一文說明瞭基本概念,包括如何使用指令碼或容器映像檔定義可執行的項目,以及如何設定預先定義和自訂的環境變數。

瞭解工作建立的基本概念後,請考慮建立使用下列一或多個額外設定選項的工作:

  • 控管工作的存取權:

  • 設定工作的其他選項:

    • 使用 MPI 程式庫設定工作通訊一文說明如何使用訊息傳遞介面 (MPI) 程式庫,設定具有相互依附工作的工作,讓這些工作在不同 VM 之間相互通訊。MPI 的常見用途是緊密耦合的高效能運算 (HPC) 工作負載。

    • 自訂作業執行的資源:

      • 使用 VM 執行個體範本定義工作資源一文說明如何指定 Compute Engine VM 範本,在建立工作時定義工作資源。這是指定工作資源的替代做法,可直接使用 instances[].policy 欄位

      • 將 GPU 用於工作一文說明如何定義使用一或多個圖形處理器 (GPU) 的工作。使用 GPU 的工作常見用途包括密集型資料處理或機器學習 (ML) 工作負載。

      • 為工作使用儲存空間磁碟區一文說明如何定義可存取一或多個外部儲存空間磁碟區的工作。儲存空間選項包括新的或現有的永久磁碟、新的本機 SSD、現有的 Cloud Storage bucket,以及現有的網路檔案系統 (NFS),例如 Filestore 檔案共用。

      • VM OS 環境總覽:簡要說明何時及如何為作業自訂 VM 作業系統 (OS) 環境,包括作業的 VM OS 映像檔和開機磁碟。

    • 最佳化工作的各個層面:

      • 提升監控和分析成效:

      • 排定依附項工作 (預覽版) 說明如何指定工作,讓工作在一個或多個現有依附項工作成功或失敗後才執行。如果工作負載的資源需求量不一,您可以將用於低需求作業 (例如資料準備) 和運算密集型作業 (例如資料處理) 的 VM 類型分開,藉此降低成本和配額用量。

      • 自動重試工作:說明如何在所有或特定工作失敗後,自動重試工作。自動重試功能可減少疑難排解的摩擦,並縮短發生暫時性錯誤的工作所需整體執行時間。舉例來說,如果工作是在 Spot VM 上執行,建議使用自動重試功能。Spot VM 提供大幅折扣,但可能不一定隨時可用,而且隨時可能遭到先占。

      • 使用逾時限制執行時間一文說明如何限制工作或可執行檔的執行時間。避免執行時間過長,或許有助於減少意外費用和延遲。

      • 提高資源取得率:

        • 提高資源取得能力:說明資源取得能力,並提供建議,協助您在建立及執行工作時提高取得能力。

        • 使用 VM 預留項目確保資源可用性一文說明如何設定可在預留 VM 上執行的工作。使用預留 VM 可縮短作業排程時間、避免資源可用性錯誤,並最佳化成本。

        • 使用執行個體彈性提高取得性:說明如何允許工作在您指定且可排序的多個機型上執行。使用執行個體彈性可能會有助於提高平行處理能力、延遲先占 VM 的先占作業,以及避免資源可用性錯誤。

      • 縮短延遲時間:

        • 將 VM 放在同一處以減少延遲:說明如何要求 VM 位於彼此相近的位置,以減少作業 VM 之間的網路延遲時間。如果作業需要在 VM 之間頻繁進行網路通訊 (例如使用 MPI 程式庫通訊的作業),這項效能優勢就特別實用。

        • 使用映像檔串流:說明如何從 Artifact Registry 串流容器映像檔,縮短作業啟動時間。

  • 使用其他服務建立及執行工作:

後續步驟