批次工作工作量

IBM Cloud® Code Engine 是執行容器化工作負載 (包括批次工作或應用程式工作負載) 的完全受管理無伺服器平台。 了解如何在 Code Engine 中執行批次作業。

何謂批次工作工作量?

Code Engine 中的工作執行一個以上執行碼實例。 與處理 HTTP 請求的應用程式不同,作業被設計為執行一次並退出,以便釋放執行作業工作負載的資源。

您可以透過定義多個實例來調整批次工作。 工作量可以分割成平行作業,以減少計算時間。 您可以將工作設定為使用自動重試來執行,以處理工作實例內失敗的工作量。 您可以手動、以程式化方式及依事件 (例如 Object Storage 事件) 來觸發批次工作。

當您建立工作時,可以指定每次執行工作時所使用的工作量配置資訊。

典型的批次作業工作負載包括:

  • 機器模型訓練
  • 分析文件,例如語音分析或影像識別
  • 壓縮或解壓縮文件
  • 歸檔資訊

建立工作時,您可以指定每次執行工作時使用的工作量配置資訊。

批次工作的生命週期為何?

當您提交批次工作時,它會執行完成。 通常,批次工作會擷取輸入資料、執行計算工作,並將結果儲存在持續資料儲存庫中。 當批次工作完成時,會移除用來執行工作的資源,且不會為任何備用資源產生任何成本。

什麼是工作陣列和工作陣列狀態?

工作陣列規格是工作和工作執行組態的一部分。 工作陣列有兩個功能:

  • 它決定工作執行時啟動的並發實體數量。
  • 它允許使用者程式碼根據提供給它的個別陣列索引,決定每個實體應該執行哪部分的工作。

以陣列大小或陣列索引集指定工作陣列:

  • 如果指定陣列大小的值為 n,則工作執行時啟動的實體數就是 n。 每個實例都有一個陣列索引 (0、1、2,依此類推,直到 n-1 ),使用 JOB_INDEX 環境變數。 除非您指定特定值,否則 JOB_ARRAY_SIZE 環境變數會設定為 n

  • 如果您指定一組一個或多個陣列索引,那麼啟動的實體數量就是索引的數量。 每個實例透過 JOB_INDEX 環境變數提供一個指定的索引。 JOB_ARRAY_SIZE 環境變數會設定為指定索引的數量,除非您為其指定特定值。

JOB_ARRAY_SIZE 環境變數也可供使用者程式碼使用,預設值為索引數目。

如果一個實例以成功的回傳代碼結束,則相關陣列索引的狀態會變更為 completed。 否則,如果尚未超過設定的重試次數,Code Engine 會針對相同索引啟動新的實例。 如果實例失敗,且不允許重試,則相關的陣列索引會將其狀態變為失敗。

使用 Code Engine 批次工作的主要功能為何?

請檢閱下列主題,以進一步瞭解如何在 Code Engine中使用批次工作。

隔離

Code Engine 是租戶共用相同網路及計算基礎架構的多租戶地區服務。 特別是,網路及運算基礎架構是共用資源,且部分管理元件是所有租戶的共用元件。 不過,租戶及其工作量會使用 Code Engine 專案彼此隔離。Code Engine 可防止專案之間的通訊,從而為多租戶環境內的應用程式提供隔離。 此外,還有在資源層次上執行的存取控制,只容許授權使用者對專案資源執行特定作業,例如應用程式或其他 Code Engine 工作量。

如需工作量隔離的相關資訊,請參閱 Code Engine 工作量隔離

記載

當您在啟用了日誌記錄的控制台中使用Code EngineIBM Cloud Logs時,日誌將轉送至與您的Code Engine專案。 在IBM Cloud Logs服務實例中,日誌被索引,可以對所有產生的訊息進行全文搜索,並可以根據特定欄位方便地查詢。 請參閱 取得工作的日誌

系統事件資訊也有助於您在執行工作時對問題進行疑難排解。 您可以使用 CLI 來檢視系統事件資訊。 請參閱 取得工作的系統事件資訊

如需相關資訊,請參閱檢視日誌

正在進行佇列作業

已提交的批次工作會自動排入佇列,並處於擱置狀態,直到分派為止。 批次工作是根據 Code Engine 專案所定義的可用計算資源來執行。 可以從佇列中移除處於 pending 狀態的批次工作。 您可以使用 Code Engine 主控台或指令行介面來監視擱置中、執行中或已完成的批次工作。

重試次數

每一個工作實例都會執行至完成。 不過,工作量程式碼在工作執行期間可能會遇到錯誤。 當工作實例完成並傳回非零回覆碼時,Code Engine 會重新啟動工作實例。 使用 Code Engine,您可以指定限制重試次數,以避免重新啟動失敗的工作實例。

執行批次工作

無論您的程式碼是作為本端檔案或 Git 儲存庫中的來源存在,還是您的程式碼是存在於公用或專用登錄中的容器映像檔,Code Engine 都提供了一種簡化的方式,可讓您將程式碼作為工作來執行。

您可以使用下列方式在 Code Engine 中建立並執行批次工作:

如需相關資訊,請參閱 使用工作

調整

Code Engine 中的工作 (批次工作) 由一或多個工作實例組成。 當工作實例彼此獨立執行時,它們會執行相同的程式碼。 假設您的資料庫有 100 筆記錄要分析。 您可以執行工作,讓每一個工作實例各分析 10 筆記錄。 例如,第一個工作實例分析記錄 0-9,第二個工作實例可以分析記錄 10-19,依此類推。 在此範例中,每一個工作實例都會接收系統提供的工作輸入參數 JOB_INDEX 作為環境變數,可用來計算每一個工作實例要分析的資料庫記錄範圍。 提交批次工作時指定工作實例數。

當您執行批次工作時,在啟動期間,當實例啟動時,工作實例可能會徘徊在擱置狀態。 工作實例的擱置時間可能會因系統及網路基礎架構而有所不同,因為系統會調整以滿足與此工作執行相關的資源需求。 如果系統基礎架構正在回應高用量需求,則結果可能是工作啟動的數分鐘延遲,因為工作實例是即時佈建的。

狀態

當所有工作執行實例都已完成時,批次工作處於 Succeeded 狀態。

在一或多個工作執行實例達到重試限制之後,批次工作處於 Failed 狀態。 此外,如果工作花費時間太長而無法完成,則只要達到執行時間上限,工作就會處於 Failed 狀態。 如需相關資訊,請參閱 工作狀態

提交類似批次工作

建立工作時,您可以指定每次執行工作時使用的工作量配置資訊。 當您使用 Code Engine的批次工作共用配置資訊集時,您可以使用工作提交來指定其他參數,以改寫此特定工作提交的批次工作參數。

使用事件觸發批次工作

可以根據事件 (例如定期計時器、Object Storage 事件或 Kafka 主題) 自動提交批次工作。

假設您想要根據 IBM Cloud Object Storage 儲存區的訂閱自動觸發批次工作,每當檔案變更或新增至 Object Storage 儲存區時,即會產生事件。 如需如何建立 Object Storage 事件並使用事件來觸發批次工作的相關資訊,請檢閱 Code Engine cos-event-job 範例

如需搭配使用事件與 Code Engine 工作的相關資訊,請參閱下列主題: 使用定期計時器(cron)事件生產者使用 IBM Cloud Object Storage 事件生產者使用 Kafka 事件生產者

尋找更多程式碼範例? 請參閱 IBM Cloud Code Engine GitHub 儲存庫

如何開始使用批次工作?

若要使用 icr.io/codeengine/firstjob 範例映像檔來建立並執行簡式 Code Engine 批次工作應用程式,請參閱 執行第一個 Code Engine 工作

此外,您可以嘗試批次工作指導教學,請參閱 執行及更新工作

若要深入瞭解使用批次工作,請參閱 使用工作及工作執行