AWS Batch 功能

為什麼選擇 AWS Batch?

使用 AWS Batch,您可使用 AWS 管理主控台、CLI 或軟體開發套件封裝批次任務的程式碼、指定其相依性,然後提交批次任務。您指定執行參數和任務相依性後,AWS Batch 可促進各種熱門批次運算工作流程引擎和語言的整合 (Pegasus WMS、Luigi、Nextflow、Metaflow、Apache Airflow 和 AWS Step Functions)。AWS Batch 可高效且動態地佈建和擴展 Amazon Elastic Container Service (ECS)Amazon Elastic Kubernetes Service (EKS) 和 AWS Fargate 運算資源,並根據您的任務需求選擇使用隨需或 Spot 執行個體。AWS Batch 提供預設任務佇列和運算環境定義,以便您快速上手。

任務定義

多容器任務是一項功能,在測試複雜的系統 (例如自動駕駛汽車和機器人) 時,可以更輕鬆、快速地執行大規模模擬。憑藉在任務中執行多個容器的能力,您可從 AWS Batch 的進階擴展、排程和成本優化中獲益,而無需將系統重建為複雜的整合型容器。而是可以維持使用多個較小的模組化容器,每個容器代表不同的系統元件,例如 3D 虛擬環境、機器人感知感應器或資料記錄 Sidecar。多容器任務透過縮短任務準備步驟來加速開發時間,並消除建置額外內部工具的需要。使用多個容器執行模擬任務還可定義元件責任來簡化軟體開發 (Dev) 和 IT 作業 (Ops),以便不同的團隊可以找到和修復其團隊元件中的錯誤,而不會被其他團隊的元件分心。

AWS Batch 支援多節點平行任務,因此,您可以執行跨越多個 EC2 執行個體的單一工作。使用這項功能,您可以使用 AWS Batch 高效執行工作負載,例如較大規模、緊密搭配的高效能運算 (HPC) 應用程式或分散式 GPU 模型訓練。AWS Batch 還支援 Elastic Fabric Adapter,這是您可在 AWS 上大規模執行需要大量節點間通訊的應用程式的網路介面。

使用 AWS Batch,您可以指定資源需求 (如 vCPU 和記憶體)、AWS Identity and Access Management (IAM) 角色、磁碟區掛載點、容器屬性及環境變數,以定義任務的執行方式。AWS Batch 在 Amazon ECS 上以容器化應用程式執行您的任務。  您還可以定義不同任務之間的相依性。例如,根據不同的資源需要,批次任務可包含三個處理階段。對於相依性,您可以建立三個具有不同資源需求的任務,每個接續的任務都取決於前一個任務。

整合

AWS Batch 可與商用和開放原始碼工作流程引擎 (如 Pegasus WMS、Luigi、Nextflow、Metaflow、Apache Airflow 和 AWS Step Functions) 整合,因此您可以使用熟悉的工作流程語言來建立批次運算管道的模型。

AWS Batch 現在支援 EC2 啟動範本,因此您可為運算資源建置自訂範本,同時 Batch 會擴展執行個體以滿足您的需求。您可在 EC2 啟動範本指定新增儲存磁碟區、選取網路介面或設定許可等功能。EC2 啟動範本透過在一個資源內擷取啟動參數,來減少設定 Batch 環境所需的步驟。

 

AWS Batch 會在 AWS 管理主控台顯示批次任務的關鍵操作指標。您可查看與運算容量相關的指標,以及執行中、待處理和已完成任務的指標。您可以在主控台中找到任務的日誌 (例如 STDERR 和 STDOUT),這些日誌也會寫入 Amazon CloudWatch Logs。

AWS Batch 使用 IAM 來控制和監控任務可以存取的 AWS 資源,例如 Amazon DynamoDB 表。您也可以使用 IAM 為組織中的不同使用者定義政策。例如,授予管理員所有 AWS Batch API 操作的完整存取許可、開發人員能夠擁有與設定運算環境和註冊任務相關的有限許可,而最終使用者則限制為只能擁有提交和刪除任務所需的許可。

運算環境

AWS Batch 可在現有的 Amazon EKS 叢集上執行批次任務。您可以指定容器所需的 vCPU、記憶體和 GPU 需求,然後將其提交至附接至啟用 EKS 叢集的運算環境的佇列。AWS Batch 會管理 Kubernetes 節點的擴展和節點內 Pod 的置放。此外,AWS Batch 還可管理佇列、相依性追蹤、任務重試、優先順序和 Pod 提交,以及提供 Amazon Elastic Compute Cloud (EC2) 隨需執行個體和 Spot 執行個體的支援。AWS Batch 還會在不同的命名空間與您的 EKS 叢集整合,因此您無需擔心批次任務會干擾您現有的程序。最後,AWS Batch 會為您管理容量,包括維護暖節點集區、限制特定數量 vCPU 的容量、擴展節點,以及在單一叢集或跨多個叢集執行任務。

AWS Batch with Fargate 可讓您為批次任務建立完全無伺服器的架構。藉助 Fargate,每個任務都會收到其請求的確切 CPU 和記憶體量 (在 Fargate SKU 允許的範圍內),因此不會浪費資源,也不必等待 EC2 執行個體啟動。

如果您目前是 AWS Batch 使用者,Fargate 可提供與 EC2 執行個體分離的額外一層隔離。無需管理或修補 Amazon Machine Image (AMI)。將與 Fargate 相容的任務提交至 Batch 時,如果您不僅有在 Amazon EC2 上執行的某些工作負載,還有在 Fargate 上執行的其他工作負載,則不必擔心維護兩種不同的服務。

AWS 提供帶有受管佇列的雲端排程器,同時可讓您指定優先級、任務重試次數、相依項、逾時等。AWS Batch 管理提交至 Fargate 的內容以及任務的生命週期,因此您無需為此煩神。

Fargate 還提供無需額外付出的安全優勢 (例如 SOX 和 PCI 合規),並且可以為每個任務隔離運算資源。

排程

使用 AWS Batch,您可以設定具有不同優先順序的多個佇列。批次任務會存放在佇列中,直到有可用的運算資源執行任務。AWS Batch 排程器會按照提交到佇列的每個任務的資源需求,評估執行任務的時間、位置及方式。排程器會評估每個佇列的優先順序,只要這些任務沒有待決的相依性,它就會依優先順序在最佳的運算資源 (例如,記憶體優化與 CPU 優化相比) 上執行任務。

GPU 排程可讓您將任務所需的加速器數量和類型指定為 AWS Batch 中的任務定義輸入變數。AWS Batch 則會根據所需的 GPU 數量縱向擴展適合任務的執行個體,並根據每個任務的需要隔離加速器,僅讓適當的容器存取這些加速器。

擴展

將 Fargate 或 AWS Fargate Spot 與 AWS Batch 搭配使用時,您僅需在 Batch 中設定一些概念 (運算環境、任務佇列和任務定義),即可擁有完整的佇列、排程器和運算架構,而不需要管理某一部分的運算架構。

對於需要 EC2 執行個體的人員,AWS Batch 提供受管運算環境,可根據提交任務的數量和資源需求,動態地佈建和擴展運算資源。您可以依照下列需求設定受管運算環境:EC2 執行個體類別、VPC 子網路設定、所有執行個體最低/最高/所需的 vCPU 數量,以及您願意為 Spot 執行個體支付的金額,佔隨需執行個體價格的 %。

或者,如果 EC2 執行個體要使用的組態與 AWS Batch 受管運算環境所提供的組態不同 (例如,較大的 EBS 磁碟區或其他作業系統),可在受管運算環境內佈建和管理自己的運算資源。您只需佈建包含 Amazon ECS 代理器的 EC2 執行個體並執行支援的 Linux 和 Docker 版本。然後 AWS Batch 會在您佈建的 EC2 執行個體上執行批次任務。

使用 AWS Batch,您可以選擇三種方法來配置運算資源。這些策略可讓您在決定 AWS Batch 應如何代表您擴展執行個體時,考慮輸送量和價格。

最適合:AWS Batch 可選取一種最適合任務需求的執行個體類型,並優先考慮成本最低的執行個體類型。如果所選執行個體類型的其他執行個體不可用,AWS Batch 將等待其他執行個體變得可用。如果可用的執行個體不足,或者如果您達到 Amazon EC2 服務限制,則在目前執行的任務完成之前,將無法執行其他任務。此分配策略可確保較低成本,但是會限制擴展。

最適合漸進式:AWS Batch 將選取足夠大可滿足佇列中任務需求的其他執行個體類型,並優先考慮每單位 vCPU 成本更低的執行個體類型。如果之前選取的執行個體類型的其他執行個體不可用,AWS Batch 將選取新的執行個體類型。

Spot 容量優化:AWS Batch 將選取足夠大可滿足佇列中任務需求的一個或多個執行個體類型,並優先考慮不會被中斷的執行個體類型。此分配策略僅可用於 Spot 執行個體運算資源。