多節點 parallel 工作 - AWS Batch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

多節點 parallel 工作

您可以使用多節點 parallel 任務執行跨多個 Amazon EC2 執行個體的單一任務。透過 AWS Batch 多節點 parallel 任務,您可以執行大規模的高效能運算應用程式和分散式 GPU 模型訓練,無需直接啟動、設定和管理 Amazon EC2 資源。 AWS Batch 多節點 parallel 作業與任何支援 IP 型節點間通訊的架構相容。例子包括阿帕奇 MXNet TensorFlow,咖啡 2,或消息傳遞接口(MPI)。

多節點平行任務會以單一任務形式提交。不過,您的任務定義 (或任務提交節點覆寫) 會指定要為任務或哪些節點群組建立的節點數量。每個多節點平行任務皆包含會最先啟動的主要節點。在主要節點啟動後,就會啟動和開始子節點。只有在主節點結束時,工作才會完成。然後停止所有子節點。如需詳細資訊,請參閱 節點群組

多節點 parallel 作業節點是單租戶。這表示每個 Amazon EC2 執行個體上只會執行一個任務容器。

最終任務狀態 (SUCCEEDEDFAILED) 取決主要節點的最終任務狀態。若要取得多節點 parallel 工作的狀態,請使用提交工作時傳回的工作 ID 來描述工作。如果您需要子節點的詳細信息,請單獨描述每個子節點。您可以使用#N符號(從 0 開始)定址節點。例如,若要存取工作的第二個節點的詳細資料,請使用 API 作業描述 aws_batch_job_id #1。 AWS Batch DescribeJobsstartedstoppedAtstatusReasonexit 多節點平行任務的資訊,將從主要節點填入。

如果您指定工作重試,則主節點失敗會導致另一次嘗試發生。子節點故障不會導致更多的嘗試發生。每次新嘗試的多節點平行任務,皆會更新該嘗試所關聯的子節點。

若要在上執行多節點 parallel 作業 AWS Batch,您的應用程式程式碼必須包含分散式通訊所需的架構和程式庫。

環境變數

在執行階段,每個節點都會設定所有 AWS Batch 工作接收的標準環境變數。此外,節點也會設定下列特定於多節點 parallel 工作的環境變數:

AWS_BATCH_JOB_MAIN_NODE_INDEX

會將此變數設為任務主要節點的索引數量。您的應用程式程式碼可以AWS_BATCH_JOB_MAIN_NODE_INDEX將與個別節點AWS_BATCH_JOB_NODE_INDEX上的項目進行比較,以判斷它是否為主節點。

AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS

此變數僅在多節點 parallel 作業子節點中設定。此變數不存在於主節點上。會將此變數設為任務主要節點的私有 IPv4 地址。您的子節點應用程式程式碼可以使用此地址與主節點通訊。

AWS_BATCH_JOB_NODE_INDEX

會將此變數設為節點的節點索引數量。節點索引從 0 開始,而且每個節點皆會收到一個唯一的索引號碼。例如,含 10 個子系的多節點平行任務具有 0-9 的索引值。

AWS_BATCH_JOB_NUM_NODES

會將此變數設為您為多節點平行任務請求的節點數量。

節點群組

節點群組是共用相同容器屬性的相同工作節點群組。您最多可以 AWS Batch 為每個工作指定五個不同的節點群組。

每個群組可以有自己的容器映像、命令、環境變數,以此類推。例如,您可以提交要求主節點使用單一c5.xlarge執行個體的工作,以及五個c5.xlarge執行個體子節點。這些不同的節點群組中的每一個都可以指定不同的容器映像檔或每個工作要執行的命令。

或者,工作中的所有節點都可以使用單一節點群組。此外,您的應用程式程式碼可以區分節點角色,例如主節點和子節點。它會透過比較AWS_BATCH_JOB_MAIN_NODE_INDEX環境變數與其本身的值來執行此作業AWS_BATCH_JOB_NODE_INDEX。單一工作中最多可有 1,000 個節點。這是 Amazon ECS 叢集中執行個體的預設限制。您可以要求提高此限制

注意

目前,多節點平行任務中的所有節點群組皆必須使用相同的執行個體類型。

Job 週期

當您提交多節點 parallel 工作時,工作會進入該SUBMITTED狀態。然後,工作會等待任何工作相依性完成。工作也會移至狀RUNNABLE態。最後, AWS Batch 佈建執行工作並啟動這些執行個體所需的執行個體容量。

每個多節點平行任務皆包含主要節點。主節點是單一子工作,可 AWS Batch 監視以判斷提交的多節點工作結果。主要節點最先啟動,然後會移至 STARTING 狀態。在attemptDurationSeconds參數中指定的逾時值會套用至整個工作,而非節點。

當主節點在節點的容器執行之後到達RUNNING狀態時,子節點會啟動,而且它們也會移至STARTING狀態。子節點會以隨機順序出現。子節點的啟動時間或順序並不固定。為了確保節點的容器運行後,作業的所有節點都處於RUNNING狀態,您的應用程序代碼可以查詢 AWS Batch API 以獲取主節點和子節點信息。或者,應用程式程式碼可以等到所有節點上線後,才能開始任何分散式處理工作。主要節點的私有 IP 地址,在每個子節點中可做為 AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS 環境變數使用。您的應用程式程式碼可以使用此資訊,對各任務之間的資料進行協調和通訊。

隨著個別節點結束,它們將移至 SUCCEEDEDFAILED,這取決於它們的結束程式碼。如果主要節點結束,則任務會視為完成,而所有子節點也會停止。如果子節點死亡,則 AWS Batch 不會對作業中的其他節點採取任何操作。如果您不希望工作繼續減少數量的節點,則必須將其納入應用程式程式碼中。這樣做會終止或取消工作。

運算環境考量

在設定使用 AWS Batch執行多節點平行任務的運算環境時,有幾點需要考慮。

  • UNMANAGED運算環境不支援多節點 parallel 作業。

  • 如果要將多節點 parallel 工作提交至計算環境,請在單一可用區域中建立叢集置放群組,並將其與您的計算資源建立關聯。如此可讓執行個體邏輯群組上的多節點 parallel 工作保持緊密接近,同時具有高網路流量潛力。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的置放群組

  • 使用 Spot 執行個體的運算環境不支援多節點 parallel 作業。

  • AWS Batch 多節點 parallel 任務使用 Amazon ECS awsvpc 網路模式,為您的多節點 parallel 任務容器提供與 Amazon EC2 執行個體相同的聯網屬性。每個多節點平行任務容器皆會取得自己的彈性網路界面、主要私有 IP 地址及內部 DNS 主機名稱。網路界面是在與託管運算資源相同的 VPC 子網路中所建立。任何套用到您運算資源的安全群組,也會套用在它身上。如需詳細資訊,請參閱 Amazon 彈性容器服務開發人員指南中的使用 awsvpc 網路模式進行任務聯網。

  • 您的運算環境可能不超過五個與其相關聯的安全群組。

  • awsvpc網路模式不會為具有公用 IP 位址的多節點 parallel 作業提供彈性網路介面。若要存取網際網路,您的運算資源必須必須在設定為使用 NAT 閘道的私有子網路中啟動。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的 NAT 閘道。節點間通訊必須使用私有 IP 地址或節點的 DNS 主機名稱。在公用子網路內的運算資源上執行的多節點 parallel 作業沒有輸出網路存取權。若要建立含私有子網路和 NAT 閘道的 VPC,請參閱建立虛擬私有雲

  • 您的帳戶無法手動卸離或修改建立並連接到運算資源的彈性網路介面。這是為了防止意外刪除與執行中工作相關聯的 elastic network interface。若要釋出任務的彈性網路界面,請終止任務。

  • 您的運算環境必須具有足夠的最大 vCPU,以支援您的多節點平行任務。

  • Amazon EC2 執行個體配額包括執行任務所需的執行個體數量。例如,假設您的工作需要 30 個執行個體,但您的帳戶只能在一個區域中執行 20 個執行個體。然後,您的工作將陷入RUNNABLE狀態。

  • 如果您在多節點 parallel 工作中指定節點群組的執行個體類型,您的計算環境必須啟動該執行個體類型。