

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

# 任務
<a name="jobs"></a>

任務是由 啟動的工作單位 AWS Batch。任務可以調用為在 ECS 叢集中的 Amazon ECS 容器執行個體上執行的容器化應用程式。

容器化的任務可以參考容器映像、命令和參數。如需詳細資訊，請參閱 [JobDefinition](https://docs.aws.amazon.com/batch/latest/APIReference/API_JobDefinition.html)。

您可以提交大量獨立、簡單的任務

**Topics**
+ [教學課程：提交任務](submit_job.md)
+ [中的服務任務 AWS Batch](service-jobs.md)
+ [任務狀態](job_states.md)
+ [AWS Batch 任務環境變數](job_env_vars.md)
+ [自動化任務重試](job_retries.md)
+ [任務相依性](job_dependencies.md)
+ [任務逾時](job_timeouts.md)
+ [Amazon EKS 任務](eks-jobs.md)
+ [多節點平行任務](multi-node-parallel-jobs.md)
+ [Amazon EKS 上的多節點平行任務](mnp-eks-jobs.md)
+ [陣列任務](array_jobs.md)
+ [執行 GPU 任務](gpu-jobs.md)
+ [檢視 AWS Batch 任務佇列中的任務](view-jobs.md)
+ [AWS Batch 搜尋任務佇列中的任務](searching-filtering-jobs.md)
+ [AWS Batch 任務的網路模式](networking-modes-jobs.md)
+ [在 CloudWatch Logs 中檢視 AWS Batch 任務日誌](review-job-logs.md)
+ [檢閱 AWS Batch 任務資訊](review-job-info.md)

# 教學課程：提交任務
<a name="submit_job"></a>

註冊任務定義之後，您可以將其做為任務提交至 AWS Batch 任務佇列。您可以在執行時間覆寫任務定義中指定的許多參數。

**提交任務**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 從導覽列中，選取要 AWS 區域 使用的 。

1. 在導覽窗格中，選擇 **Jobs (任務)**。

1. 選擇**提交新任務**。

1. 在**名稱**中，輸入任務定義的唯一名稱。名稱長度最多可達 128 個字元。可以包含大小寫字母、數字、連字號 (-) 和底線 (\$1)。

1. 針對**任務定義**，為您的任務選擇現有的任務定義。如需詳細資訊，請參閱[建立單一節點任務定義](create-job-definition.md)。

1. 針對**任務佇列**，選擇現有的任務佇列。如需詳細資訊，請參閱[建立任務佇列](create-job-queue.md)。

1. 針對**任務相依性**，選擇**新增任務相依性**。

   1. 在**任務 ID **中，輸入任何相依性的任務 ID。然後選擇**新增任務相依性**。任務最多可以有 20 個相依性。如需詳細資訊，請參閱[任務相依性](job_dependencies.md)。

1. (僅適用於陣列任務) 在 **Array size** (陣列大小) 中，指定 2 至 10,000 之間的陣列大小。

1. （選用） 展開**標籤**，然後選擇**新增標籤**以將標籤新增至資源。輸入索引鍵和選用值，然後選擇**新增標籤**。

1. 選擇**下一頁**。

1. 在**任務覆寫**區段中：

   1. 

      （選用） 針對**排程優先順序**，輸入介於 0 到 100 之間的排程優先順序值。較高值的優先順序較高。

   1. （選用） 對於**任務嘗試**，輸入 AWS Batch 嘗試將任務移至`RUNNABLE`狀態的次數上限。您可以輸入介於 1 到 10 之間的數字。如需詳細資訊，請參閱[自動化任務重試](job_retries.md)。

   1. （選用） 針對**執行逾時**，輸入逾時值 （以秒為單位）。執行逾時是未完成任務終止之前的時間長度。如果嘗試超過逾時持續時間，則會停止並移至 `FAILED` 狀態。如需詳細資訊，請參閱[任務逾時](job_timeouts.md)。最小值為 60 秒。
**重要**  
請勿倚賴在 Fargate 資源上執行的任務執行超過 14 天。14 天後，Fargate 資源可能無法再用於可能終止的任務。

   1. （選用） 開啟**傳播標籤**，將標籤從任務和任務定義傳播到 Amazon ECS 任務。

1. 展開 **Additional configuration (其他組態)**。

1. （選用） 針對**重試策略條件**，選擇**退出時新增評估**。輸入至少一個參數值，然後選擇**動作**。對於每組條件，**動作**必須設定為**重試**或**結束**。這些動作表示下列項目：
   + **重試** – AWS Batch 重試，直到達到您指定的任務嘗試次數為止。
   + **結束** – AWS Batch 停止重試任務。
**重要**  
如果您選擇在**結束時新增評估**，請設定至少一個參數，然後選擇**動作**或選擇在**結束時移除評估**。

1. 針對**參數**，選擇**新增參數**以新增參數替換預留位置。然後，輸入**金鑰**和選用**值**。

1. 在**容器覆寫**區段中：

   1. 在**命令**中，將命令輸入 欄位做為其 **JSON** 字串陣列對等項。

      此參數會映射至 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Cmd` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `COMMAND` 參數。如需 Docker `CMD` 參數的詳細資訊，請參閱 [https://docs.docker.com/engine/reference/builder/\$1cmd](https://docs.docker.com/engine/reference/builder/#cmd)。
**注意**  
此參數不能包含空字串。

   1. 針對 **vCPUs**，輸入要預留給容器的 vCPUs 數量。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `CpuShares` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--cpu-shares` 選項。每個 vCPU 相當於 1,024 個 CPU 共用。您必須指定至少 1 個 vCPU。

   1. 針對**記憶體**，輸入容器可用的記憶體限制。如果容器嘗試使用超過此處指定的記憶體，容器便會終止。此參數會映射到 [Docker Remote API](https://docs.docker.com/engine/api/v1.38/) 的[建立容器](https://docs.docker.com/engine/api/v1.38/#operation/ContainerCreate)區段中的 `Memory` 以及 [https://docs.docker.com/engine/reference/commandline/run/](https://docs.docker.com/engine/reference/commandline/run/) 的 `--memory` 選項。您必須為單一工作指定至少 4 MiB 的記憶體。
**注意**  
若要最大化資源使用率，請為特定執行個體類型的任務排定記憶體優先順序。如需詳細資訊，請參閱[運算資源記憶體管理](memory-management.md)。

   1. （選用） 針對 ** GPUs 數量**，選擇要保留給容器的 GPUs 數量。

   1. （選用） 對於**環境變數**，選擇**新增環境變數**，將環境變數新增為名稱/值對。這些變數會傳遞至容器。

   1. 選擇**下一頁**。

   1. 針對**任務檢閱**，請檢閱組態步驟。如需變更，請選擇 **Edit** (編輯)。完成後，請選擇**建立任務定義**。

# 中的服務任務 AWS Batch
<a name="service-jobs"></a>

AWS Batch 服務任務可讓您透過 AWS Batch 任務佇列向 AWS 服務提交請求。目前， AWS Batch 支援 SageMaker Training 任務做為服務任務。與 AWS Batch 管理基礎容器執行的容器化任務不同，服務任務允許 在目標 AWS 服務 （例如 SageMaker AI) 處理實際任務執行時 AWS Batch 提供任務排程和佇列功能。

AWS Batch for SageMaker Training 任務可讓資料科學家以可設定佇列的優先順序提交訓練任務，確保工作負載在有資源可用時立即執行，無需介入。此功能可解決常見的挑戰，例如資源協調、防止意外超支、符合預算限制、使用預留執行個體最佳化成本，以及消除團隊成員之間手動協調的需求。

服務任務在幾個關鍵方面與容器化任務不同：
+ **任務提交**：必須使用 [SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API 提交服務任務。服務任務無法透過 AWS Batch 主控台提交。
+ **任務執行**： AWS Batch 排程和佇列服務任務，但目標 AWS 服務執行實際任務工作負載。
+ **資源識別符**：服務任務使用包含「service-job」而非「job」ARNs，以區分它們與容器化任務。

若要開始使用 SageMaker Training AWS Batch 的服務任務，請參閱 [SageMaker AI AWS Batch 入門](getting-started-sagemaker.md)。

**Topics**
+ [中的服務任務承載 AWS Batch](service-job-payload.md)
+ [在 中提交服務任務 AWS Batch](service-job-submit.md)
+ [將 AWS Batch 服務任務狀態映射至 SageMaker AI 狀態](service-job-status.md)
+ [中的服務任務重試策略 AWS Batch](service-job-retries.md)
+ [監控 AWS Batch 佇列中的服務任務](monitor-sagemaker-job-queue.md)
+ [終止服務任務](terminate-service-jobs.md)

# 中的服務任務承載 AWS Batch
<a name="service-job-payload"></a>

當您使用 [SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) 提交服務任務時，您會提供兩個定義任務的關鍵參數： `serviceJobType`和 `serviceRequestPayload`。
+ `serviceJobType` 指定要執行任務 AWS 的服務。對於 SageMaker Training 任務，此值為 `SAGEMAKER_TRAINING`。
+ `serviceRequestPayload` 是以 JSON 編碼的字串，其中包含通常直接傳送到目標服務的完整請求。對於 SageMaker Training 任務，此承載包含與 SageMaker AI [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API 相同的參數。

如需所有可用參數及其說明的完整清單，請參閱 SageMaker AI [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) API 參考。支援的所有參數`CreateTrainingJob`都可以包含在服務任務承載中。

如需更多訓練任務組態的範例，請參閱 [SageMaker AI 開發人員指南](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html)中的 [APIs、CLI 和 SDKs](https://docs.aws.amazon.com/sagemaker/latest/dg/api-and-sdk-reference-overview.html)。

我們建議您使用 PySDK 建立服務任務，因為 PySDK 具有協助程式類別和公用程式。如需使用 PySDK 的範例，請參閱 GitHub 上的 [SageMaker AI 範例](https://github.com/aws/amazon-sagemaker-examples)。

## 服務任務承載範例
<a name="service-job-payload-example"></a>

下列範例顯示執行「hello world」訓練指令碼的 SageMaker 訓練任務的簡單服務任務承載：

呼叫 時，此承載會以 JSON 字串的形式傳遞給 `serviceRequestPayload` 參數`SubmitServiceJob`。

```
{
  "TrainingJobName": "my-simple-training-job",
  "RoleArn": "arn:aws:iam::123456789012:role/SageMakerExecutionRole",
  "AlgorithmSpecification": {
    "TrainingInputMode": "File",
    "TrainingImage": "763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-training:2.0.0-cpu-py310",
    "ContainerEntrypoint": [
      "echo",
      "hello world"
    ]
  },
  "ResourceConfig": {
    "InstanceType": "ml.c5.xlarge",
    "InstanceCount": 1,
    "VolumeSizeInGB": 1
  },
  "OutputDataConfig": {
    "S3OutputPath": "s3://your-output-bucket/output"
  },
  "StoppingCondition": {
    "MaxRuntimeInSeconds": 30
  }
}
```

# 在 中提交服務任務 AWS Batch
<a name="service-job-submit"></a>

若要提交服務任務給 AWS Batch，您可以使用 [SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) API。您可以使用 AWS CLI 或 SDK 提交任務。

如果您還沒有執行角色，則必須先建立一個，才能提交服務任務。若要建立 SageMaker AI 執行角色，請參閱 [ SageMaker AI 開發人員指南中的如何使用 SageMaker AI 執行角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)。 *[SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html)*

## 服務任務提交工作流程
<a name="service-job-submit-workflow"></a>

當您提交服務任務時， AWS Batch 會遵循此工作流程：

1. AWS Batch 會接收您的`[SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html)`請求並驗證 AWS Batch特定參數。`serviceRequestPayload` 會在未驗證的情況下傳遞。

1. 任務進入 `SUBMITTED` 狀態，並放置在指定的任務佇列中

1. AWS Batch 評估佇列前方`RUNNABLE`任務的服務環境中是否有可用的容量

1. 如果容量可用，任務會移至 ，`SCHEDULED`且任務已傳遞至 SageMaker AI

1. 當容量已取得且 SageMaker AI 已下載服務任務資料時，服務任務將開始初始化，並將任務變更為 `STARTING`。

1. 當 SageMaker AI 開始執行任務時，其狀態會變更為 `RUNNING`。

1. 當 SageMaker AI 執行任務時， AWS Batch 會監控其進度並將服務狀態映射至 AWS Batch 任務狀態。如需如何映射服務任務狀態的詳細資訊，請參閱 [將 AWS Batch 服務任務狀態映射至 SageMaker AI 狀態](service-job-status.md)

1. 當服務任務完成時，它會移至 ，`SUCCEEDED`並且任何輸出都已準備好下載。

## 先決條件
<a name="service-job-submit-prerequisites"></a>

提交服務任務之前，請確定您有：
+ **服務環境** – 定義容量限制的服務環境。如需詳細資訊，請參閱[在 中建立服務環境 AWS Batch](create-service-environments.md)。
+ **SageMaker 任務佇列** – 提供任務排程的 SageMaker 任務佇列。如需詳細資訊，請參閱[在 中建立 SageMaker 訓練任務佇列 AWS Batch](create-sagemaker-job-queue.md)。
+ **IAM 許可** – 建立和管理 AWS Batch 任務佇列和服務環境的許可。如需詳細資訊，請參閱[AWS Batch IAM 政策、角色和許可](IAM_policies.md)。

## 使用 CLI AWS 提交服務任務
<a name="service-job-submit-example"></a>

以下說明如何使用 CLI AWS 提交服務任務：

```
aws batch submit-service-job \
    --job-name "my-sagemaker-training-job" \
    --job-queue "my-sagemaker-job-queue" \
    --service-job-type "SAGEMAKER_TRAINING" \
    --service-request-payload '{\"TrainingJobName\": \"sagemaker-training-job-example\", \"AlgorithmSpecification\": {\"TrainingImage\": \"123456789012.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:1.8.0-cpu-py3\", \"TrainingInputMode\": \"File\", \"ContainerEntrypoint\":  [\"sleep\", \"1\"]}, \"RoleArn\":\"arn:aws:iam::123456789012:role/SageMakerExecutionRole\", \"OutputDataConfig\": {\"S3OutputPath\": \"s3://example-bucket/model-output/\"}, \"ResourceConfig\": {\"InstanceType\": \"ml.m5.large\", \"InstanceCount\": 1, \"VolumeSizeInGB\": 1}}'
    --client-token "unique-token-12345"
```

如需`serviceRequestPayload`參數的詳細資訊，請參閱 [中的服務任務承載 AWS Batch](service-job-payload.md)。

# 將 AWS Batch 服務任務狀態映射至 SageMaker AI 狀態
<a name="service-job-status"></a>

當您使用 [SubmitServiceJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitServiceJob.html) 將任務提交至 SageMaker 任務佇列時， 會 AWS Batch 管理任務生命週期並將 AWS Batch [任務狀態](job_states.md)映射至同等的 SageMaker Training 任務狀態。服務任務，例如 SageMaker Training 任務，遵循與傳統容器任務不同的狀態生命週期。雖然服務任務與容器任務共用大多數狀態，但它們會引入 `SCHEDULED` 狀態並展現不同的重試行為，尤其是處理來自目標服務的容量不足錯誤。

下表顯示 AWS Batch 任務狀態和對應的 SageMaker Status/SecondaryStatus：


| 批次狀態 | SageMaker AI 主要狀態 | SageMaker AI 次要狀態 | Description | 
| --- | --- | --- | --- | 
| SUBMITTED | N/A | N/A | 任務提交至佇列，等待排程器評估。 | 
| RUNNABLE | N/A | N/A | 任務已排入佇列並準備好進行排程。一旦服務環境中有足夠的資源可用，就會立即啟動處於此狀態的任務。當足夠的資源無法使用時，任務可以無限期地保持在此狀態。 | 
| SCHEDULED | InProgress | Pending | 服務任務已成功提交至 SageMaker AI | 
| STARTING | InProgress | Downloading | SageMaker Training 任務下載資料和映像。已取得訓練任務容量，並開始任務初始化。 | 
| RUNNING | InProgress | Training | SageMaker Training 任務執行演算法  | 
| RUNNING | InProgress | Uploading | 訓練完成後上傳輸出成品的 SageMaker Training 任務 | 
| SUCCEEDED | Completed | Completed | SageMaker Training 任務已成功完成。輸出成品已完成上傳。 | 
| FAILED | Failed | Failed | SageMaker Training 任務遇到無法復原的錯誤。 | 
| FAILED | Stopped | Stopped | SageMaker Training 任務已使用 手動停止StopTrainingJob。 | 

# 中的服務任務重試策略 AWS Batch
<a name="service-job-retries"></a>

服務任務重試策略 AWS Batch 允許 在特定條件下自動重試失敗的服務任務。

服務任務可能需要多次嘗試，原因如下：
+ **暫時性服務問題**：內部服務錯誤、限流或暫時中斷可能會導致任務在提交或執行期間失敗。
+ **訓練初始化失敗**：任務啟動期間的問題，例如映像提取問題或初始化錯誤，可能會在重試時解決。

透過設定適當的重試策略，您可以提高任務成功率並減少手動介入的需求，尤其是長時間執行的訓練工作負載。

**注意**  
服務任務會自動重試某些類型的失敗，例如容量不足錯誤，而不會消耗您設定的重試嘗試。您的重試策略主要處理其他類型的失敗，例如演算法錯誤或服務問題。

## 設定重試策略
<a name="configuring-service-job-retries"></a>

服務任務重試策略是使用 [ServiceJobRetryStrategy](https://docs.aws.amazon.com/batch/latest/APIReference/API_ServiceJobRetryStrategy.html) 設定，它同時支援簡單的重試計數和條件式重試邏輯。

### 重試組態
<a name="basic-retry-configuration"></a>

最簡單的重試策略會指定服務任務失敗時應進行的重試嘗試次數：

```
{
  "retryStrategy": {
    "attempts": 3
  }
}
```

此組態可讓服務任務在失敗時重試最多 3 次。

**重要**  
此`attempts`值代表任務可置於 `RUNNABLE` 狀態的總次數，包括初始嘗試次數。值為 3 表示任務一開始會嘗試一次，然後在失敗時再重試最多 2 次。

### 使用 evaluateOnExit 重試組態
<a name="advanced-retry-configuration"></a>

您可以使用 `evaluateOnExit` 參數來指定任務應重試或允許失敗的條件。當不同類型的失敗需要不同的處理時，這非常有用。

`evaluateOnExit` 陣列最多可包含 5 個重試策略，每個策略會根據狀態原因指定動作 (`RETRY` 或 `EXIT`) 和條件：

```
{
  "retryStrategy": {
    "attempts": 5,
    "evaluateOnExit": [
      {
        "action": "RETRY",
        "onStatusReason": "Received status from SageMaker: InternalServerError*"
      },
      {
        "action": "EXIT",
        "onStatusReason": "Received status from SageMaker: ValidationException*"
      },
      {
        "action": "EXIT",
        "onStatusReason": "*"
      }
    ]
  }
}
```

此組態：
+ 重試因 SageMaker AI 內部伺服器錯誤而失敗的任務
+ 遇到驗證例外狀況的任務立即失敗 （無法透過重試解決的用戶端錯誤）
+ 包含針對任何其他失敗類型結束的所有截獲規則

#### 狀態原因模式比對
<a name="status-reason-patterns"></a>

`onStatusReason` 參數支援最多 512 個字元的模式比對。模式可以使用萬用字元 (\$1)，並根據 SageMaker AI 傳回的狀態原因進行比對。

對於服務任務，來自 SageMaker AI 的狀態訊息字首為「從 SageMaker 接收的狀態：」，以區分它們與 AWS Batch產生的訊息。常見模式包括：
+ `Received status from SageMaker: InternalServerError*` - 符合內部服務錯誤
+ `Received status from SageMaker: ValidationException*` - 比對用戶端驗證錯誤
+ `Received status from SageMaker: ResourceLimitExceeded*` - 比對資源限制錯誤
+ `*CapacityError*` - 比對容量相關的故障

**提示**  
使用特定模式比對來適當處理不同的錯誤類型。例如，重試內部伺服器錯誤，但驗證錯誤顯示任務參數有問題時立即失敗。

# 監控 AWS Batch 佇列中的服務任務
<a name="monitor-sagemaker-job-queue"></a>

您可以使用 `list-service-jobs`、 和 來監控 SageMaker Training 任務佇列中任務的狀態`get-job-queue-snapshot`。

檢視佇列中正在執行的任務：

```
aws batch list-service-jobs \
  --job-queue my-sm-training-fifo-jq \
  --job-status RUNNING
```

檢視佇列中等待的任務：

```
aws batch list-service-jobs \
  --job-queue my-sm-training-fifo-jq \
  --job-status RUNNABLE
```

檢視已提交至 SageMaker 但尚未執行的任務：

```
aws batch list-service-jobs \
  --job-queue my-sm-training-fifo-jq \
  --job-status SCHEDULED
```

在佇列前面取得任務的快照：

```
aws batch get-job-queue-snapshot --job-queue my-sm-training-fifo-jq
```

此命令會顯示佇列中即將到來的服務任務順序。

## 取得詳細的服務任務資訊
<a name="describe-service-job"></a>

使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeServiceJob.html)操作取得特定服務任務的完整資訊，包括其目前狀態、服務資源識別符和詳細的嘗試資訊。

檢視特定任務的詳細資訊：

```
aws batch describe-service-job \
  --job-id a4d6c728-8ee8-4c65-8e2a-9a5e8f4b7c3d
```

此命令會傳回任務的完整資訊，包括：
+ 任務 ARN 和目前狀態
+ 服務資源識別符 （例如 SageMaker Training 任務 ARN)
+ 排程優先順序和重試組態
+ 包含原始服務參數的服務請求承載
+ 包含開始和停止時間的詳細嘗試資訊
+ 來自目標服務的狀態訊息

## 監控 SageMaker 訓練任務
<a name="monitor-sagemaker-training-jobs"></a>

透過 監控 SageMaker Training 任務時 AWS Batch，您可以同時存取 AWS Batch 任務資訊和基礎 SageMaker Training 任務詳細資訊。

任務詳細資訊中的服務資源識別符包含 SageMaker Training 任務 ARN：

```
{
  "latestAttempt": {
    "serviceResourceId": {
      "name": "TrainingJobArn",
      "value": "arn:aws:sagemaker:us-east-1:123456789012:training-job/my-training-job"
    }
  }
}
```

您可以使用此 ARN 直接從 SageMaker 取得其他詳細資訊：

```
aws sagemaker describe-training-job \
  --training-job-name my-training-job
```

透過檢查 AWS Batch 狀態和 SageMaker Training 任務狀態來監控任務進度。 AWS Batch 任務狀態會顯示整體任務生命週期，而 SageMaker Training 任務狀態則提供訓練程序的服務特定詳細資訊。

# 終止服務任務
<a name="terminate-service-jobs"></a>

使用 [https://docs.aws.amazon.com/batch/latest/APIReference/API_TerminateServiceJob.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_TerminateServiceJob.html)操作停止執行中的服務任務。

終止特定服務任務：

```
aws batch terminate-service-job \
  --job-id a4d6c728-8ee8-4c65-8e2a-9a5e8f4b7c3d \
  --reason "Job terminated by user request"
```

當您終止服務任務時， 會 AWS Batch 停止任務並通知目標服務。對於 SageMaker 訓練任務，這也會停止 SageMaker AI 中的訓練任務。

# 任務狀態
<a name="job_states"></a>

當您將任務提交至 AWS Batch 任務佇列時，任務會進入 `SUBMITTED` 狀態。任務將經過以下狀態，直到其失敗 (以 `0` 代碼結束) 或失敗 (以與非零代碼結束) 為止。 AWS Batch 任務可能有以下狀態：

`SUBMITTED`  
已提交至佇列且尚未由排程器評估的任務。排程器評估任務，判斷其是否對任何其他任務的成功完成存有任何未完成的相依性。如果有相依性，任務將移至 `PENDING`。如果沒有相依性，任務將移至 `RUNNABLE`。

`PENDING`  
位於佇列中的任務，但由於對其他任務或資源的相依性而無法執行。如果相依性獲得滿足，任務將移至 `RUNNABLE`。  
當任何子任務更新為 `PENDING`時，陣列任務父會更新為 ，`RUNNABLE`並在子任務執行時保持為 `PENDING` 狀態。若要檢視這些任務，請根據`PENDING`狀態進行篩選，直到所有子任務達到結束狀態為止。

`RUNNABLE`  
佇列中的某一任務沒有未完成的相依性，因此已準備好排程傳送到主機。一旦其中一個映射到任務佇列的運算環境中有足夠的資源可用，就會立即啟動處於此狀態的任務。不過，假如一直無法取得足夠的資源，任務將無限期停留在此狀態。  
如果您的任務未進展至 `STARTING`，請參閱故障診斷一節[任務停滯在 `RUNNABLE` 狀態](job_stuck_in_runnable.md)中的 。

`STARTING`  
這些任務已排程傳送到主機，且相關的容器初始化作業正在進行中。取出容器映像且容器設置完畢並開始執行後，該任務將轉換為 `RUNNING`。  
影像提取持續時間、Amazon EKS initContainer 完成持續時間，以及 Amazon ECS containerDependency解析持續時間會在 STARTING 狀態發生。為任務提取映像所需的時間量等同於任務將處於 STARTING 狀態的時間量。  
例如，如果為任務提取映像需要三分鐘，您的任務將處於 STARTING 狀態三分鐘。如果 initContainers 總共需要十分鐘才能完成，則您的 Amazon EKS 任務將在 STARTING 中十分鐘。如果您的 Amazon ECS 任務中有 Amazon ECS containerDependencies 集，則任務將處於 STARTING，直到所有容器相依性 （其執行時間） 解決為止。STARTING 不包含在逾時中；持續時間從 RUNNING 開始。如需詳細資訊，請參閱[任務狀態](https://docs.aws.amazon.com/batch/latest/userguide/job_states.html)。

`RUNNING`  
任務正在運算環境中的 Amazon ECS 容器執行個體上做為容器任務執行。任務的容器結束時，處理結束代碼將判斷任務為成功或失敗。`0` 結束代碼表示成功，任何非零的結束代碼則表示失敗。如果與嘗試失敗有關的任務在其選用的重試策略組態中有任何剩下的嘗試，任務將再次移至 `RUNNABLE`。如需詳細資訊，請參閱[自動化任務重試](job_retries.md)。  
`RUNNING` 任務的日誌可在 CloudWatch Logs 中使用。日誌群組為 `/aws/batch/job`，日誌串流名稱格式如下：`first200CharsOfJobDefinitionName/default/ecs_task_id`。此格式可能會在未來變更。  
工作進入 `RUNNING` 狀態時，您可透過編寫程式的方式用 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 操作擷取其日誌串流名稱。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的檢視傳送至 CloudWatch Logs 的日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)。 *Amazon CloudWatch * 根據預設，這些日誌永遠不會過期。不過，您可以修改保留期。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的變更 CloudWatch Logs 中的日誌資料保留](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SettingLogRetention.html)。 *Amazon CloudWatch *

`SUCCEEDED`  
已成功完成任務，結束代碼為 `0`。任務`SUCCEEDED`的任務狀態會在 中保留 AWS Batch 至少 7 天。  
`SUCCEEDED` 任務的日誌可在 CloudWatch Logs 中使用。日誌群組為 `/aws/batch/job`，日誌串流名稱格式如下：`first200CharsOfJobDefinitionName/default/ecs_task_id`。此格式可能會在未來變更。  
工作進入 `RUNNING` 狀態時，您可透過編寫程式的方式用 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 操作擷取其日誌串流名稱。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的檢視傳送至 CloudWatch Logs 的日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)。 *Amazon CloudWatch * 根據預設，這些日誌永遠不會過期。不過，您可以修改保留期。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的變更 CloudWatch Logs 中的日誌資料保留](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SettingLogRetention.html)。 *Amazon CloudWatch *

`FAILED`  
任務所有的可用嘗試都失敗。任務`FAILED`的任務狀態會在 中 AWS Batch 保留至少 7 天。  
`FAILED` 任務的日誌可在 CloudWatch Logs 中取得。日誌群組為 `/aws/batch/job`，日誌串流名稱格式如下：`first200CharsOfJobDefinitionName/default/ecs_task_id`。此格式可能會在未來變更。  
工作進入 `RUNNING` 狀態時，您可透過編寫程式的方式用 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 操作擷取其日誌串流。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的檢視傳送至 CloudWatch Logs 的日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData)。 *Amazon CloudWatch * 根據預設，這些日誌永遠不會過期。不過，您可以修改保留期。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的變更 CloudWatch Logs 中的日誌資料保留](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SettingLogRetention.html)。 *Amazon CloudWatch *

# AWS Batch 任務環境變數
<a name="job_env_vars"></a>

AWS Batch 會在容器任務中設定特定環境變數。這些環境變數提供任務內容器的自我檢查。您可以在應用程式的邏輯中使用這些變數的值。所有 AWS Batch 以 `AWS_BATCH_`字首開頭的變數。這是受保護的環境變數字首。您無法在任務定義或覆寫中將此字首用於您自己的變數。

以下環境變數適用於任務容器：

`AWS_BATCH_CE_NAME`  
此變數設定為放置任務的運算環境名稱。

`AWS_BATCH_JOB_ARRAY_INDEX`  
只會在子陣列任務中設定此變數。陣列任務索引從 0 開始，而且每個子任務會收到一個唯一的索引號碼。例如，含 10 個子系的陣列任務有 0-9 的索引值。您可以使用此索引值，控制您陣列任務子系的區分方式。如需詳細資訊，請參閱[使用陣列任務索引來控制任務差異](array_index_example.md)。

`AWS_BATCH_JOB_ARRAY_SIZE`  
此變數設定為父陣列任務的大小。父陣列任務的大小會傳遞至此變數中的子陣列任務。

`AWS_BATCH_JOB_ATTEMPT`  
會將此變數設為任務嘗試號碼。第一次嘗試的編號為 1。如需詳細資訊，請參閱[自動化任務重試](job_retries.md)。

`AWS_BATCH_JOB_ID`  
此變數設定為 AWS Batch 任務 ID。

`AWS_BATCH_JOB_KUBERNETES_NODE_UID`  
此變數設定為 Pod 執行所在 Kubernetes 叢集中節點物件的 Kubernetes UID。此變數只會針對在 Amazon EKS 資源上執行的任務設定。如需詳細資訊，請參閱 *Kubernetes 文件*中的 [UIDs](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids)。

`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`  
此變數僅在多節點平行任務子節點中設定。此變數不存在於主節點，但會設定為任務主節點的私有 IPv4 地址。您的子節點應用程式程式碼可以使用此地址與主節點通訊。

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

`AWS_BATCH_JOB_NUM_NODES`  
只會在多節點平行任務中設定此變數。此變數設定為您為多節點平行任務請求的節點數量。

`AWS_BATCH_JQ_NAME`  
會將此變數設為您所提交任務的任務佇列名稱。

# 自動化任務重試
<a name="job_retries"></a>

您可將重試策略套用至任務和任務定義，讓失敗的任務自動重試。可能的失敗案例包括下列項目：
+ 容器任務有任何的非零結束代碼
+ Amazon EC2 執行個體失敗或終止
+ 內部 AWS 服務錯誤或中斷

當任務提交至任務佇列，並進入視為嘗試`RUNNING`的狀態時。根據預設，每個任務會嘗試一次移至 `SUCCEEDED` 或 `FAILED` 任務狀態。不過，任務定義和任務提交工作流程都可以用來指定嘗試 1 到 10 次之間的重試策略。如果指定 [evaluateOnExit](job_definition_parameters.md#retryStrategy-evaluateOnExit)，則最多可包含 5 個重試策略。如果指定 [evaluateOnExit](https://docs.aws.amazon.com/batch/latest/APIReference/API_EvaluateOnExit.html)，但沒有任何重試策略相符，則會重試任務。對於不符合以退出的任務，請新增因任何原因退出的最終項目。例如，此`evaluateOnExit`物件有兩個具有 動作的項目，`RETRY`以及具有 動作的最終項目`EXIT`。

```
"evaluateOnExit": [
    {
        "action": "RETRY",
        "onReason": "AGENT"
    },
    {
        "action": "RETRY",
        "onStatusReason": "Task failed to start"
    },
    {
        "action": "EXIT",
        "onReason": "*"
    }
]
```

在執行時間，`AWS_BATCH_JOB_ATTEMPT` 環境變數設為容器的對應任務嘗試次數。第一次嘗試會編號為 `1`，後續嘗試會以遞增順序 （例如 2、3、4)。

例如，假設任務嘗試因任何原因失敗，且重試組態中指定的嘗試次數大於`AWS_BATCH_JOB_ATTEMPT`數字。然後，任務會回到 `RUNNABLE` 狀態。如需詳細資訊，請參閱[任務狀態](job_states.md)。

**注意**  
已取消或終止的任務不會重試。此外，不會重試因為任務定義無效而失敗的任務。

如需詳細資訊，請參閱 [重試策略](job_definition_parameters.md#retryStrategy)、 [建立單一節點任務定義](create-job-definition.md)[教學課程：提交任務](submit_job.md)和 [已停止任務錯誤代碼](https://docs.aws.amazon.com/AmazonECS/latest/userguide/stopped-task-error-codes.html)。

# 任務相依性
<a name="job_dependencies"></a>

當您提交 AWS Batch 任務時，您可以指定任務所依賴的任務 IDs。當您這樣做時， AWS Batch 排程器會確保您的任務只有在指定的相依性成功完成之後才會執行。成功完成後，相依的任務將從 `PENDING` 轉為 `RUNNABLE`，然後轉為 `STARTING` 和 `RUNNING`。如果任何任務相依性失敗，相依的任務將自動從 `PENDING` 轉為 `FAILED`。

例如，A 任務可以對另外最多 20 個任務有相依性，必須等這 20 個任務成功後才能執行。接著您可以提交額外的任務，對 A 任務和最多 19 個其他的任務有相依性。

對於陣列任務，您可以指定 `SEQUENTIAL` 類型相依性，且不指定任務 ID，讓每個子陣列任務從索引 0 開始依序完成。您也可以使用任務 ID 指定 `N_TO_N` 類型相依性。如此一來，此任務的每個索引子系必須等待各相依性對應的索引子系完成後，才能開始。如需詳細資訊，請參閱[陣列任務](array_jobs.md)。

若要提交具有相依性 AWS Batch 的任務，請參閱 [教學課程：提交任務](submit_job.md)。

[資源感知排程](resource-aware-scheduling.md) 可讓您根據執行任務所需的消耗性資源來排程任務。您可以指定任務執行所需的消耗性資源，而 Batch 在排程任務時會將這些資源相依性納入考量。您可以只配置具有所有必要資源的任務，以減少運算資源的使用率不足。資源感知排程適用於 FIFO 和公平共用排程政策，並可搭配 Batch 支援的所有運算平台使用，包括 EKS、ECS 和 Fargate。它可以與陣列任務、多節點平行 (MNP) 任務以及一般 Batch 任務搭配使用。

# 任務逾時
<a name="job_timeouts"></a>

您可以設定任務的逾時時間，如此一來，假如任務執行超過該時間， AWS Batch 便會終止該任務。例如，您可能有一個您知道應該只需要 15 分鐘就能完成的任務。有時您的應用程式會一直卡在迴圈和執行中，因此您可以設定逾時為 30 分鐘以終止卡住的任務。

**重要**  
根據預設， AWS Batch 沒有任務逾時。如果您未定義任務逾時，任務會執行，直到容器結束為止。

您在任務定義內或是當您提交此任務時指定 `attemptDurationSeconds` 參數，該參數必須至少有 60 秒。當此秒數超過任務嘗試的`startedAt`時間戳記後， 便會 AWS Batch 終止任務。在運算資源時，您的任務容器會收到 `SIGTERM` 訊號，讓您的應用程式有機會正常關閉。如果容器在 30 秒後仍在執行中，則會傳送 `SIGKILL` 訊號以強制關閉容器。

逾時終止會依最佳作法來處理。您不應預期逾時終止會在任務嘗試逾時時完全發生 （可能需要幾秒鐘的時間）。如果您的應用程式需要精確執行逾時，您應在應用程式內實作此邏輯。如果您有大量任務同時逾時，逾時終止將採用前進先出佇列，按批次終止任務。

**注意**  
 AWS Batch 任務沒有最大逾時值。

如果任務因超過逾時持續時間而終止，則不會重試。如果任務嘗試自行失敗，任務會在啟用重試下進行重試，且進行新嘗試時將重新開始逾時倒數。

**重要**  
在 Fargate 資源上執行的任務無法預期執行超過 14 天。如果逾時持續時間超過 14 天，則 Fargate 資源可能不再可用，且任務將終止。

對於陣列任務，子任務的逾時設定與父任務相同。

如需使用逾時組態提交 AWS Batch 任務的詳細資訊，請參閱 [教學課程：提交任務](submit_job.md)。

# Amazon EKS 任務
<a name="eks-jobs"></a>

任務是在其中工作的最小單位 AWS Batch。Amazon EKS 上的 AWS Batch 任務具有 one-to-one映射。 Kubernetes AWS Batch 任務定義是 AWS Batch 任務的範本。當您提交 AWS Batch 任務時，您可以參考任務定義、將任務佇列設為目標，並提供任務的名稱。在 Amazon EKS AWS Batch 任務的任務定義中，[eksProperties](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksProperties.html) 參數會定義 Amazon EKS 任務 AWS Batch 上 支援的一組參數。在 [SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) 請求中，[eksPropertiesOverride](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPropertiesOverride.html) 參數允許覆寫某些常見參數。如此一來，您就可以針對多個任務使用任務定義的範本。當任務分派到您的 Amazon EKS 叢集時， 會將任務 AWS Batch 轉換為 `podspec`(`Kind: Pod`)。`podspec` 使用一些額外的 AWS Batch 參數來確保任務已正確擴展和排程。 AWS Batch 會結合標籤和污點，以確保任務僅在 AWS Batch 受管節點上執行，而且其他 Pod 不會在這些節點上執行。

**重要**  
如果未在 Amazon EKS 任務定義中明確設定 `hostNetwork` 參數，則 中的 Pod 聯網模式 AWS Batch 預設為主機模式。具體而言，會套用下列設定： `hostNetwork=true`和 `dnsPolicy=ClusterFirstWithHostNet`。
AWS Batch 在 Pod 完成其任務後， 會立即清除任務 Pod。若要查看 Pod 應用程式日誌，請為您的叢集設定記錄服務。如需詳細資訊，請參閱[使用 CloudWatch Logs AWS Batch 監控 Amazon EKS 任務](batch-eks-cloudwatch-logs.md)。

**Topics**
+ [教學課程：將執行中的任務映射至 Pod 和節點](eks-jobs-map-running-job.md)
+ [教學課程：將執行中的 Pod 映射回其任務](eks-jobs-map-running-pod-to-job.md)

# 教學課程：將執行中的任務映射至 Pod 和節點
<a name="eks-jobs-map-running-job"></a>

執行中任務`podProperties`的 已為目前的任務嘗試設定 `podName`和 `nodeName` 參數。使用 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 操作來檢視這些參數。

以下為範例輸出。

```
$ aws batch describe-jobs --job 2d044787-c663-4ce6-a6fe-f2baf7e51b04
{
 "jobs": [
  {
   "status": "RUNNING",
   "jobArn": "arn:aws:batch:us-east-1:123456789012:job/2d044787-c663-4ce6-a6fe-f2baf7e51b04",
   "jobDefinition": "arn:aws:batch:us-east-1:123456789012:job-definition/MyJobOnEks_SleepWithRequestsOnly:1",
   "jobQueue": "arn:aws:batch:us-east-1:123456789012:job-queue/My-Eks-JQ1",
   "jobId": "2d044787-c663-4ce6-a6fe-f2baf7e51b04",
   "eksProperties": {
    "podProperties": {
     "nodeName": "ip-192-168-55-175.ec2.internal",
     "containers": [
      {
       "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
       "resources": {
        "requests": {
         "cpu": "1",
         "memory": "1024Mi"
        }
       }
      }
     ],
     "podName": "aws-batch.b0aca953-ba8f-3791-83e2-ed13af39428c"
    }
   }
  }
 ]
}
```

對於啟用重試的任務，每次完成嘗試`nodeName`的 `podName`和 都在 [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) API 操作的`eksAttempts`清單參數中。目前執行中嘗試`nodeName`的 `podName`和 位於 `podProperties` 物件中。

# 教學課程：將執行中的 Pod 映射回其任務
<a name="eks-jobs-map-running-pod-to-job"></a>

Pod 的標籤會指出其所屬運算環境`uuid`的 `jobId`和 。 會 AWS Batch 注入環境變數，讓任務的執行時間可以參考任務資訊。如需詳細資訊，請參閱[AWS Batch 任務環境變數](job_env_vars.md)。您可以執行下列命令來檢視此資訊。輸出如下。

```
$ kubectl describe pod aws-batch.14638eb9-d218-372d-ba5c-1c9ab9c7f2a1 -n my-aws-batch-namespace
Name:         aws-batch.14638eb9-d218-372d-ba5c-1c9ab9c7f2a1
Namespace:    my-aws-batch-namespace
Priority:     0
Node:         ip-192-168-45-88.ec2.internal/192.168.45.88
Start Time:   Wed, 26 Oct 2022 00:30:48 +0000
Labels:       batch.amazonaws.com/compute-environment-uuid=5c19160b-d450-31c9-8454-86cf5b30548f
              batch.amazonaws.com/job-id=f980f2cf-6309-4c77-a2b2-d83fbba0e9f0
              batch.amazonaws.com/node-uid=a4be5c1d-9881-4524-b967-587789094647
...
Status:       Running
IP:           192.168.45.88
IPs:
  IP:  192.168.45.88
Containers:
  default:
    Image:         public.ecr.aws/amazonlinux/amazonlinux:2
    ...
    Environment:
      AWS_BATCH_JOB_KUBERNETES_NODE_UID:  a4be5c1d-9881-4524-b967-587789094647
      AWS_BATCH_JOB_ID:                   f980f2cf-6309-4c77-a2b2-d83fbba0e9f0
      AWS_BATCH_JQ_NAME:                  My-Eks-JQ1
      AWS_BATCH_JOB_ATTEMPT:              1
      AWS_BATCH_CE_NAME:                  My-Eks-CE1

...
```

**Amazon AWS Batch EKS 任務支援的功能**

以下是在 Amazon EKS 上執行Kubernetes的任務也常見的 AWS Batch 特定功能：
+ [任務相依性](job_dependencies.md)
+ [陣列任務](array_jobs.md)
+ [任務逾時](job_timeouts.md)
+ [自動化任務重試](job_retries.md)
+ [使用公平共用排程來協助排程任務](fair-share-scheduling.md)

**Kubernetes 與 `Secrets``ServiceAccounts`**  
AWS Batch 支援參考 Kubernetes`Secrets`和 `ServiceAccounts`。您可以設定 Pod 為服務帳戶使用 Amazon EKS IAM 角色。如需詳細資訊，請參閱《[https://docs.aws.amazon.com/eks/latest/userguide/](https://docs.aws.amazon.com/eks/latest/userguide/)》中的[設定 Pod 以使用Kubernetes服務帳戶](https://docs.aws.amazon.com/eks/latest/userguide/pod-configuration.html)。

**相關文件**
+ [Amazon EKS AWS Batch 上的 記憶體和 vCPU 考量事項](memory-cpu-batch-eks.md)
+ [執行 GPU 任務](gpu-jobs.md)
+ [任務停滯在 `RUNNABLE` 狀態](job_stuck_in_runnable.md)

# 多節點平行任務
<a name="multi-node-parallel-jobs"></a>

您可以使用多節點平行任務來執行跨越多個 Amazon EC2 執行個體的單一任務。透過 AWS Batch 多節點平行任務 （也稱為 *Gang 排程*)，您可以執行大規模的高效能運算應用程式和分散式 GPU 模型訓練，而不需要直接啟動、設定和管理 Amazon EC2 資源。 AWS Batch 多節點平行任務與任何支援 IP 型節點間通訊的架構相容。範例包括 Apache MXNet、TensorFlow、Caffe2 或訊息傳遞界面 (MPI)。

多節點平行任務會以單一任務的形式提交。不過，您的任務定義 (或任務提交節點覆寫) 會指定要為任務或哪些節點群組建立的節點數量。每個多節點平行任務皆包含會最先啟動的**主要節點**。主節點啟動後，會啟動和啟動子節點。只有在主節點結束時，任務才會完成。接著會停止所有子節點。如需詳細資訊，請參閱[節點群組](mnp-node-groups.md)。

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

最終任務狀態 (`SUCCEEDED` 或 `FAILED`) 取決主要節點的最終任務狀態。若要取得多節點平行任務的狀態，請使用提交任務時傳回的任務 ID 來描述任務。如果您需要子節點的詳細資訊，請個別描述每個子節點。您可以使用 `#N` 表示法來定址節點 （以 0 開頭）。例如，若要存取任務第二個節點的詳細資訊，請使用 AWS Batch [DescribeJobs](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeJobs.html) *API 操作描述 aws\$1batch\$1job\$1id*\$11。`started`、`stoppedAt`、`statusReason` 和 `exit` 多節點平行任務的資訊，將從主要節點填入。

如果您指定任務重試，主節點失敗會導致再次嘗試。子節點故障不會造成更多嘗試。每次新嘗試的多節點平行任務，皆會更新該嘗試所關聯的子節點。

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

**Topics**
+ [環境變數](mnp-env-vars.md)
+ [節點群組](mnp-node-groups.md)
+ [MNP 任務的任務生命週期](job-lifecycle.md)
+ [使用 的 MNP 運算環境考量 AWS Batch](mnp-ce.md)

# 環境變數
<a name="mnp-env-vars"></a>

在執行時間，每個節點都會設定所有 AWS Batch 任務接收的標準環境變數。此外，節點會設定下列環境變數，這些變數專屬於多節點平行任務：

`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`  
此變數僅在多節點平行任務子節點中設定。此變數不存在於主節點。會將此變數設為任務主要節點的私有 IPv4 地址。您的子節點應用程式程式碼可以使用此地址與主節點通訊。

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

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

# 節點群組
<a name="mnp-node-groups"></a>

節點群組是一組相同的任務節點，這些節點都共用相同的容器屬性。您可以使用 AWS Batch 為每個任務指定最多五個不同的節點群組。

每個群組可以有自己的容器映像、命令、環境變數，以此類推。例如，您可以提交需要主節點和五個`c5.xlarge`執行個體子節點單一`c5.xlarge`執行個體的任務。每個不同的節點群組可以指定要為每個任務執行的不同容器映像或命令。

或者，任務中的所有節點都可以使用單一節點群組。此外，您的應用程式程式碼可以區分節點角色，例如主節點和子節點。它透過將`AWS_BATCH_JOB_MAIN_NODE_INDEX`環境變數與其自身的 值進行比較來執行此操作`AWS_BATCH_JOB_NODE_INDEX`。單一任務中最多可以有 1，000 個節點。這是 Amazon ECS 叢集中執行個體的預設限制。您可以[請求提高此限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

**注意**  
目前，多節點平行任務中的所有節點群組都必須使用相同的執行個體類型。

# MNP 任務的任務生命週期
<a name="job-lifecycle"></a>

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

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

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

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

# 使用 的 MNP 運算環境考量 AWS Batch
<a name="mnp-ce"></a>

在設定使用 AWS Batch執行多節點平行任務的運算環境時，有幾點需要考慮。
+ `UNMANAGED` 運算環境不支援多節點平行任務。
+ 如果您想要將多節點平行任務提交至運算環境，請在單一可用區域中建立*叢集*置放群組，並將其與您的運算資源建立關聯。這可讓執行個體邏輯分組上的多節點平行任務接近高網路流程潛力。如需詳細資訊，請參閱《Amazon EC2 使用者指南》中的[置放群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)。
+ 使用 Spot 執行個體的運算環境不支援多節點平行任務。
+ AWS Batch 多節點平行任務使用 Amazon ECS `awsvpc` 網路模式，為您的多節點平行任務容器提供與 Amazon EC2 執行個體相同的聯網屬性。每個多節點平行任務容器皆會取得自己的彈性網路界面、主要私有 IP 地址及內部 DNS 主機名稱。網路界面是在與託管運算資源相同的 VPC 子網路中所建立。
+ 您的運算環境可能沒有超過五個與其相關聯的安全群組。建立並連接至 MNP 任務的彈性網路界面將使用運算環境中指定的安全群組，如果您未指定安全群組，則會使用 VPC 的預設安全群組。
+ `awsvpc` 網路模式不會為具有公有 IP 地址的多節點平行任務提供彈性網路介面。若要存取網際網路，您的運算資源必須必須在設定為使用 NAT 閘道的私有子網路中啟動。如需詳細資訊，請參閱 *Amazon VPC 使用者指南*中的 [NAT 閘道](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。節點間通訊必須使用節點的私有 IP 地址或 DNS 主機名稱。在公有子網路內的運算資源上執行的多節點平行任務沒有傳出網路存取權。若要建立含私有子網路和 NAT 閘道的 VPC，請參閱[建立 Virtual Private Cloud](create-public-private-vpc.md)。
+ 您的 帳戶無法手動分離或修改建立並連接至運算資源的彈性網路介面。這是為了防止意外刪除與執行中任務相關聯的彈性網路界面。若要釋出任務的彈性網路界面，請終止任務。
+ 您的運算環境必須具有足夠的最大 vCPU，以支援您的多節點平行任務。
+ 您的 Amazon EC2 執行個體配額包含執行任務所需的執行個體數量。例如，假設您的任務需要 30 個執行個體，但您的帳戶只能在區域中執行 20 個執行個體。然後，您的任務將卡在 `RUNNABLE` 狀態。
+ 如果您在多節點平行任務中指定節點群組的執行個體類型，您的運算環境必須啟動該執行個體類型。

# Amazon EKS 上的多節點平行任務
<a name="mnp-eks-jobs"></a>

您可以在 Amazon Elastic Kubernetes Service AWS Batch 上使用 ，在受管Kubernetes叢集上執行多節點平行 (MNP) 任務 （也稱為 *Gang 排程*)。此選項通常用於無法在單一 Amazon Elastic Compute Cloud 執行個體上執行的大型、緊密耦合、高效能任務。如需詳細資訊，請參閱[多節點平行任務](multi-node-parallel-jobs.md)。

您可以使用此功能來執行 Amazon EKS 受管 Kubernetes特定的高效能運算應用程式、大型語言模型訓練，以及其他人工智慧 (AI)/Machine Learning(ML) 任務。

**Topics**
+ [執行 MNP 任務](mnp-eks-running-mnp-jobs.md)
+ [建立 Amazon EKS MNP 任務定義](mnp-eks-create-eks-mnp-job-definition.md)
+ [提交 Amazon EKS MNP 任務](mnp-eks-submit-eks-mnp-job.md)
+ [覆寫 Amazon EKS MNP 任務定義](mnp-eks-override-eks-mnp-job-definition.md)

# 執行 MNP 任務
<a name="mnp-eks-running-mnp-jobs"></a>

AWS Batch 支援使用 Amazon EC2 的 Amazon Elastic Container Service 和 Amazon EKS 上的 MNP 任務。以下提供 功能之執行個體和容器參數的詳細資訊。

## Amazon EKS 上 MNP 的執行個體配額
<a name="mnp-eks-instance-quotas"></a>
+ 單一 MNP 任務最多可使用 1000 個執行個體。
+ 最多 5000 個執行個體可以加入單一 Amazon EKS 叢集。
+ 最多可將 5 個運算環境叢集並連接至任務佇列。

例如，您可以在任務佇列中擴展最多 5 個叢集運算環境，在每個運算環境中擴展最多 1000 個執行個體。

除了執行個體參數之外，請務必注意，您無法透過任一服務將 Fargate 用於 MNP 任務。

每個 MNP 任務只能使用一種執行個體類型。您可以透過更新運算環境或定義新的運算環境來變更執行個體類型。您也可以指定執行個體類型，並在建立任務定義時提供 vCPU 和記憶體需求。

## Amazon EKS 上 MNP 的容器配額
<a name="mnp-eks-container-quotas"></a>
+ 多節點平行任務支援每個節點一個 Pod。
+ 最多 10 個容器 （或 10 個 init 容器。 如需詳細資訊，請參閱每個 Pod 中的 [Init Containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)*。*)。
+ 每個 MNP 任務中最多 5 個節點範圍。
+ 每個節點範圍內最多 10 個不同的容器映像。

例如，在包含 5 個節點範圍和總共 50 個唯一映像的單一 MNP 任務中，您最多可以執行 10，000 個容器。

## 在私有 Amazon VPC 和 Amazon EKS 叢集中執行 MNP 任務
<a name="mnp-eks-running-mnp-jobs-vpc"></a>

MNP 任務可以在任何 Amazon EKS 叢集上執行，無論是否有公有網際網路。使用僅具有私有網路存取的 Amazon EKS 叢集時，請確定 AWS Batch 可以存取 Amazon EKS 控制平面和受管 Kubernetes API 伺服器。您可以透過 Amazon Virtual Private Cloud 端點授予必要的存取權。如需詳細資訊，請參閱[設定端點服務](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html)。

Amazon EKS 叢集 Pod 無法從公有來源下載映像，因為私有 VPC 無法存取網際網路。Amazon EKS 叢集必須從 Amazon VPC 內的容器登錄檔提取映像。您可以在 [Amazon VPC 中建立 Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html)，並將容器映像複製到其中以供節點存取。

您也可以使用 Amazon ECR 建立提取快取規則。為外部公有登錄檔建立提取快取規則後，您只需使用 Amazon ECR 私有登錄檔 URI 從該外部公有登錄檔提取映像即可。然後，Amazon ECR 會建立儲存庫並快取映像。使用 Amazon ECR 私有登錄檔 URI 提取快取的映像時，Amazon ECR 會檢查遠端登錄檔是否有新的映像版本，並且最多每 24 小時更新一次私有登錄檔。如需詳細資訊，請參閱[在 Amazon ECR 中建立提取快取規則](https://docs.aws.amazon.com/AmazonECR/latest/userguide/pull-through-cache-creating-rule.html)。

## 錯誤通知
<a name="mnp-eks-error-notificaton"></a>

如果您的 MNP 任務遭到封鎖，您可以透過 AWS 管理主控台 和 Amazon EventBridge 接收通知。例如，如果 MNP 任務卡在佇列的前端，您可以收到有關問題的通知，以及原因的資訊，以便您可以採取提示動作來解除封鎖任務佇列。或者，如果在不同的時間內沒有採取任何動作，您可以自動終止 MNP 任務，這可以在任務佇列範本中定義。如需詳細資訊，請參閱[任務佇列封鎖事件](batch-job-queue-blocked-events.md)

# 建立 Amazon EKS MNP 任務定義
<a name="mnp-eks-create-eks-mnp-job-definition"></a>

若要在 Amazon EKS 上定義和執行 MNP 任務， [https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html)和 [https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) API 操作中有新的參數。
+ 在 [https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_NodeProperties.html)區段[https://docs.aws.amazon.com/batch/latest/APIReference/API_EksProperties.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksProperties.html)下使用 來定義 MNP 任務定義。
+ 在提交 MNP 任務時，使用 [https://docs.aws.amazon.com//batch/latest/APIReference/API_NodePropertyOverride.html](https://docs.aws.amazon.com//batch/latest/APIReference/API_NodePropertyOverride.html)區段[https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPropertiesOverride.html](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksPropertiesOverride.html)下的 覆寫任務定義中定義的參數。

這些動作可以透過 API 操作和 定義 AWS 管理主控台。

## 參考：註冊 Amazon EKS MNP 任務定義請求承載
<a name="mnp-eks-register-eks-mnp-job-definition"></a>

下列範例說明如何向兩個節點註冊 Amazon EKS MNP 任務定義。

```
{
  "jobDefinitionName": "MyEksMnpJobDefinition",
  "type": "multinode",
  "nodeProperties": {
    "numNodes": 2,
    "mainNode": 0,
    "nodeRangeProperties": [
      {
        "targetNodes" : "0:",
        "eksProperties": {
          "podProperties": {
            "containers": [
              {
                "name": "test-eks-container-1",
                "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                "command": [
                  "sleep",
                  "60"
                ],
                "resources": {
                  "limits": {
                    "cpu": "1",
                    "memory": "1024Mi"
                  }
                },
                "securityContext":{
                  "runAsUser":1000,
                  "runAsGroup":3000,
                  "privileged":true,
                  "readOnlyRootFilesystem":true,
                  "runAsNonRoot":true
               }
              }
            ],
            "initContainers": [
               {
                  "name":"init-ekscontainer",
                  "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                  "command": [
                     "echo",
                     "helloWorld"
                   ],
                   "resources": {
                     "limits": {
                       "cpu": "1",
                       "memory": "1024Mi"
                     }
                  }
               }
            ],
            "metadata": {
               "labels": {
                  "environment" : "test"
               }
            }
          }
        }
      }
    ]
  }
}
```

若要使用 註冊任務定義 AWS CLI，請將定義複製到名為 *MyEksMnpJobDefinition.json* 的本機檔案，然後執行下列命令。

```
aws batch register-job-definition --cli-input-json file://MyEksMnpJobDefinition.json
```

您將會收到下列 JSON 回應。

```
{
    "jobDefinitionName": "MyEksMnpJobDefinition",
    "jobDefinitionArn": "arn:aws:batch:us-east-1:0123456789:job-definition/MyEksMnpJobDefinition:1",
    "revision": 1
}
```

# 提交 Amazon EKS MNP 任務
<a name="mnp-eks-submit-eks-mnp-job"></a>

若要使用已註冊的任務定義提交任務，請輸入下列命令。將 <EKS\$1JOB\$1QUEUE\$1NAME> 的值取代為與 Amazon EKS 運算環境相關聯的預先存在任務佇列的名稱或 ARN。

```
aws batch submit-job --job-queue <EKS_JOB_QUEUE_NAME> \
    --job-definition MyEksMnpJobDefinition \
    --job-name myFirstEksMnpJob
```

您將會收到下列 JSON 回應。

```
{
    "jobArn": "arn:aws:batch:region:account:job/9b979cce-9da0-446d-90e2-ffa16d52af68",
    "jobName": "myFirstEksMnpJob", 
    "jobId": "<JOB_ID>"
}
```

您可以使用傳回的 jobId 搭配下列命令來檢查任務的狀態。

```
aws batch describe-jobs --jobs <JOB_ID>
```

# 覆寫 Amazon EKS MNP 任務定義
<a name="mnp-eks-override-eks-mnp-job-definition"></a>

或者，您可以覆寫任務定義詳細資訊 （例如變更 MNP 任務大小或子任務詳細資訊）。以下提供提交五個節點 MNP 任務的範例 JSON 請求承載，以及`test-eks-container-1`容器命令的變更。

```
{
  "numNodes": 5,
  "nodePropertyOverrides": [
    {
      "targetNodes": "0:",
      "eksPropertiesOverride": {
        "podProperties": {
          "containers": [
            {
              "name": "test-eks-container-1",
              "command": [
                "sleep",
                "150"
              ]
            }
          ]
        }
      }
    }
  ]
}
```

若要提交具有這些覆寫的任務，請將範例儲存至本機檔案 *eks-mnp-job-nodeoverride.json*，然後使用 AWS CLI 提交具有覆寫的任務。

# 陣列任務
<a name="array_jobs"></a>

陣列任務為共用常見參數的任務，例如任務定義、vCPU 和記憶體。它以一組相關但獨立的基本任務的形式執行，這些任務可能會分散到多個主機，並可能同時執行。陣列任務是執行超平行任務的最有效方式，例如 Monte Carlo 模擬、參數掃描或大型轉譯任務。

AWS Batch 陣列任務的提交方式與一般任務相同。不過，您必須指定陣列大小 (2 至 10,000)，以定義陣列內應該執行的子任務數量。如果您提交陣列大小 1000 的任務，單一任務將執行並產生 1000 個子任務。陣列任務為參考或指標，用於管理所有的子任務。如此一來，您可以使用單一查詢提交大型工作負載。`attemptDurationSeconds` 參數中指定的逾時會套用至每個子任務。父陣列任務沒有逾時。

當您提交陣列任務時，父陣列任務會取得正常 AWS Batch 的任務 ID。每個子任務都有相同的基本 ID。不過，子任務的陣列索引會附加到父 ID 的結尾，例如`example_job_ID:0`陣列的第一個子任務。

父陣列任務可以輸入 `SUBMITTED`、`FAILED`、 `PENDING`或 `SUCCEEDED` 狀態。當任何子任務更新為 `PENDING`時，陣列父任務會更新為 `RUNNABLE`。如需任務相依性的詳細資訊，請參閱 [任務相依性](job_dependencies.md)。

在執行時間，`AWS_BATCH_JOB_ARRAY_INDEX` 環境變數設為容器的對應任務陣列索引編號。第一個陣列任務索引編號為 `0`，後續嘗試會以遞增順序 （例如 1、2 和 3)。您可以使用此索引值，控制您陣列任務子系的區分方式。如需詳細資訊，請參閱[使用陣列任務索引來控制任務差異](array_index_example.md)。

對於陣列任務的相依性，您可以指定相依性類型，例如 `SEQUENTIAL` 或 `N_TO_N`。您可以指定 `SEQUENTIAL` 類型相依性 (不指定任務 ID)，讓每個子陣列任務從索引 0 開始依序完成。例如，如果您提交陣列大小 100 的陣列任務，並指定 `SEQUENTIAL` 類型的相依性，後續將產生 100 個子任務，必須等第一個子任務完成後，下一個子任務才會開始。下圖顯示 A 任務，陣列大小 10 的陣列任務。A 任務子索引的每個任務都相依於前一個子任務。A:1 任務必須等 A:0 任務完成後才會開始。

![\[Flowchart showing Job-A with sequential child jobs A:0 through A:9, connected by arrows.\]](http://docs.aws.amazon.com/zh_tw/batch/latest/userguide/images/sequential-dep.png)


您也可以指定 `N_TO_N` 類型相依性，以及陣列任務的任務 ID。如此一來，此任務的每個索引子系必須等待各相依性對應的索引子系完成後，才能開始。下圖顯示任務 A 和任務 B，兩個陣列任務的每個陣列大小為 10，000。B 任務子索引的每個任務相依於 A 任務的對應索引。B:1 任務必須等到 A:1 任務完成後才會開始。

![\[Two array jobs, Job-A and Job-B, with 10,000 indexed tasks each, showing N_TO_N dependency.\]](http://docs.aws.amazon.com/zh_tw/batch/latest/userguide/images/n-to-n-dep.png)


如果您取消或終止父陣列任務，所有子任務都會隨之取消或終止。您可以取消或終止個別子任務 （將它們移至 `FAILED` 狀態），而不會影響其他子任務。不過，如果子陣列任務失敗 （單獨或透過手動取消或終止任務），父任務也會失敗。在此案例中，當所有子任務完成`FAILED`時，父任務會轉換為 。

如需搜尋和篩選陣列任務的詳細資訊，請參閱 [搜尋任務佇列中的任務](searching-filtering-jobs.md)。

**Topics**
+ [陣列任務工作流程的範例](example_array_job.md)
+ [使用陣列任務索引來控制任務差異](array_index_example.md)

# 陣列任務工作流程的範例
<a name="example_array_job"></a>

 AWS Batch 客戶的常見工作流程是執行先決條件設定任務、針對大量輸入任務執行一系列命令，然後使用彙總結果並將摘要資料寫入 Amazon S3、DynamoDB、Amazon Redshift 或 Aurora 的任務結束。

例如：
+ `JobA`：執行 Amazon S3 儲存貯體中物件快速清單和中繼資料驗證的標準非陣列任務`BucketA`。[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) JSON 語法如下所示。

  ```
  {
      "jobName": "JobA",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobA-list-and-validate:1"
  }
  ```
+ `JobB`：具有 10，000 個副本的陣列任務，這些副本依賴 `JobA` 對 中的每個物件執行 CPU 密集型命令，`BucketA`並將結果上傳至 `BucketB`。[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) JSON 語法如下所示。

  ```
  {
      "jobName": "JobB",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobB-CPU-Intensive-Processing:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "4096"
              },
              {
                  "type": "VCPU",
                  "value": "32"
              }
          ]
     }
      "arrayProperties": {
          "size": 10000
      },
      "dependsOn": [
          {
              "jobId": "JobA_job_ID"
    }
      ]
  }
  ```
+ `JobC`：另一個`JobB`與`N_TO_N`相依性模型相依的 10，000 個複製陣列任務，對 中的每個項目執行記憶體密集型命令`BucketB`、將中繼資料寫入 DynamoDB，並將產生的輸出上傳到 `BucketC`。[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) JSON 語法如下所示。

  ```
  {
      "jobName": "JobC",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobC-Memory-Intensive-Processing:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "32768"
              },
              {
                  "type": "VCPU",
                  "value": "1"
              }
          ]
     }
      "arrayProperties": {
          "size": 10000
      },
      "dependsOn": [
          {
              "jobId": "JobB_job_ID",
              "type": "N_TO_N"
          }
      ]
  }
  ```
+ `JobD`：執行 10 個驗證步驟的陣列任務，每個步驟都需要查詢 DynamoDB，並且可能與上述任何 Amazon S3 儲存貯體互動。中的每個步驟都會`JobD`執行相同的命令。不過，行為會根據任務容器中`AWS_BATCH_JOB_ARRAY_INDEX`環境變數的值而有所不同。這些驗證步驟會依序執行 （例如， `JobD:0` 和 `JobD:1`)。[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) JSON 語法如下所示。

  ```
  {
      "jobName": "JobD",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobD-Sequential-Validation:1",
      "containerOverrides": {
          "resourceRequirements": [
              {
                  "type": "MEMORY",
                  "value": "32768"
              },
              {
                  "type": "VCPU",
                  "value": "1"
              }
          ]
     }
      "arrayProperties": {
          "size": 10
      },
      "dependsOn": [
          {
              "jobId": "JobC_job_ID"
          },
          {
              "type": "SEQUENTIAL"
          },
   
      ]
  }
  ```
+ `JobE`：執行一些簡單清除操作並傳送 Amazon SNS 通知的最終非陣列任務，其中包含管道已完成的訊息和輸出 URL 的連結。[SubmitJob](https://docs.aws.amazon.com/batch/latest/APIReference/API_SubmitJob.html) JSON 語法如下所示。

  ```
  {
      "jobName": "JobE",
      "jobQueue": "ProdQueue",
      "jobDefinition": "JobE-Cleanup-and-Notification:1",
      "parameters": {
          "SourceBucket": "s3://amzn-s3-demo-source-bucket",
          "Recipient": "pipeline-notifications@mycompany.com"
      },
      "dependsOn": [
          {
              "jobId": "JobD_job_ID"
          }
      ]
  }
  ```

# 使用陣列任務索引來控制任務差異
<a name="array_index_example"></a>

本教學課程說明如何使用 `AWS_BATCH_JOB_ARRAY_INDEX`環境變數來區分子任務。每個子任務都會指派給此變數。此範例使用子任務的索引號碼來讀取檔案中的特定行。然後，它會將與該行號相關聯的參數替換為任務容器內的命令。結果是，您可以有多個執行相同 Docker 映像和命令引數 AWS Batch 的任務。不過，結果不同，因為陣列任務索引是用作修飾詞。

在此教學課程中，您可以建立一個含有彩虹中所有顏色的文字檔案，每個顏色各為一行。然後，您可以為 Docker 容器建立進入點指令碼，將索引轉換為可用於顏色檔案中行號的值。索引從零開始，但行號從一開始。建立 Dockerfile，將顏色和索引檔案複製到容器映像，並將映像`ENTRYPOINT`的 設定為進入點指令碼。Dockerfile 和資源會建置到推送到 Amazon ECR 的 Docker 映像。然後，您可以註冊使用新容器映像的任務定義、使用該任務定義提交 AWS Batch 陣列任務，以及檢視結果。

**Topics**
+ [先決條件](array-tutorial-prereqs.md)
+ [建置容器映像](build-index-container.md)
+ [將映像推送至 Amazon ECR](push-array-image.md)
+ [建立並註冊任務定義](create-array-job-def.md)
+ [提交 AWS Batch 陣列任務](submit-array-job.md)
+ [檢視您的陣列任務日誌](#array-tutorial-logs)

# 先決條件
<a name="array-tutorial-prereqs"></a>

本教學課程工作流程具有下列先決條件：
+  AWS Batch 運算環境。如需詳細資訊，請參閱[建立運算環境](create-compute-environment.md)。
+  AWS Batch 任務佇列和相關聯的運算環境。如需詳細資訊，請參閱[建立任務佇列](create-job-queue.md)。
+  AWS CLI 安裝在本機系統的 。如需詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的 [ >安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。
+ 安裝在本機系統的 Docker。如需詳細資訊，請參閱 Docker 文件中的[關於 Docker CE](https://docs.docker.com/install/)。

# 建置容器映像
<a name="build-index-container"></a>

您可以在 命令參數`AWS_BATCH_JOB_ARRAY_INDEX`的任務定義中使用 。不過，我們建議您建立在進入點指令碼中使用 變數的容器映像。本節說明如何建立此類容器映像。

**建置 Docker 容器影像**

1. 建立新的目錄做為您的 Docker 影像工作空間，然後瀏覽至該目錄。

1. `colors.txt` 在您的工作區目錄中建立名為 的檔案，並將以下內容貼入其中。

   ```
   red
   orange
   yellow
   green
   blue
   indigo
   violet
   ```

1. 在`print-color.sh`工作區目錄中建立名為 的檔案，並將以下內容貼入其中。
**注意**  
`LINE` 變數設定為 `AWS_BATCH_JOB_ARRAY_INDEX` \$1 1，因為陣列索引起始為 0，但行號從 1 開始。`COLOR` 變數會設定為 中與其行號`colors.txt`相關聯的顏色。

   ```
   #!/bin/sh
   LINE=$((AWS_BATCH_JOB_ARRAY_INDEX + 1))
   COLOR=$(sed -n ${LINE}p /tmp/colors.txt)
   echo My favorite color of the rainbow is $COLOR.
   ```

1. 在`Dockerfile`工作區目錄中建立名為 的檔案，並將下列內容貼入其中。此 Dockerfile 會將之前的檔案複製到您的容器，並將進入點指令碼設定為在啟動容器時執行。

   ```
   FROM busybox
   COPY print-color.sh /tmp/print-color.sh
   COPY colors.txt /tmp/colors.txt
   RUN chmod +x /tmp/print-color.sh
   ENTRYPOINT /tmp/print-color.sh
   ```

1. 建置 Docker 映像。

   ```
   $ docker build -t print-color .
   ```

1. 使用以下指令碼測試容器。此指令碼會在本機將`AWS_BATCH_JOB_ARRAY_INDEX`變數設定為 0，然後遞增以模擬具有七個子項的陣列任務。

   ```
   $ AWS_BATCH_JOB_ARRAY_INDEX=0
   while [ $AWS_BATCH_JOB_ARRAY_INDEX -le 6 ]
   do
       docker run -e AWS_BATCH_JOB_ARRAY_INDEX=$AWS_BATCH_JOB_ARRAY_INDEX print-color
       AWS_BATCH_JOB_ARRAY_INDEX=$((AWS_BATCH_JOB_ARRAY_INDEX + 1))
   done
   ```

   以下為其輸出。

   ```
   My favorite color of the rainbow is red.
   My favorite color of the rainbow is orange.
   My favorite color of the rainbow is yellow.
   My favorite color of the rainbow is green.
   My favorite color of the rainbow is blue.
   My favorite color of the rainbow is indigo.
   My favorite color of the rainbow is violet.
   ```

# 將映像推送至 Amazon ECR
<a name="push-array-image"></a>

現在您已建置並測試 Docker 容器，請將其推送至映像儲存庫。此範例使用 Amazon ECR，但您可以使用其他登錄檔，例如 DockerHub。

1. 建立 Amazon ECR 映像儲存庫以存放您的容器映像。此範例僅使用 AWS CLI，但您也可以使用 AWS 管理主控台。如需詳細資訊，請參閱《*Amazon Elastic Container Registry 使用者指南*》中的[建立儲存庫](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)。

   ```
   $ aws ecr create-repository --repository-name print-color
   ```

1. 使用上一個步驟傳回的 Amazon ECR 儲存庫 URI 標記您的`print-color`映像。

   ```
   $ docker tag print-color aws_account_id.dkr.ecr.region.amazonaws.com/print-color
   ```

1. 登入 Amazon ECR 登錄檔。如需詳細資訊，請參閱《Amazon Elastic Container Registry 使用者指南》**中的[登錄檔身分驗證](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)。

   ```
   $ aws ecr get-login-password \
       --region region | docker login \
       --username AWS \
       --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
   ```

1. 將您的映像推送至 Amazon ECR。

   ```
   $ docker push aws_account_id.dkr.ecr.region.amazonaws.com/print-color
   ```

# 建立並註冊任務定義
<a name="create-array-job-def"></a>

現在您的 Docker 映像位於映像登錄檔中，您可以在 AWS Batch 任務定義中指定它。然後，您可以稍後使用它來執行陣列任務。此範例僅使用 AWS CLI。不過，您也可以使用 AWS 管理主控台。如需詳細資訊，請參閱[建立單一節點任務定義](create-job-definition.md)。

**建立任務定義**

1. 在`print-color-job-def.json`工作區目錄中建立名為 的檔案，並將以下內容貼入其中。將映像儲存庫 URI 取代為您自己的映像 URI。

   ```
   {
     "jobDefinitionName": "print-color",
     "type": "container",
     "containerProperties": {
       "image": "aws_account_id.dkr.ecr.region.amazonaws.com/print-color",
       "resourceRequirements": [
           {
               "type": "MEMORY",
               "value": "250"
           },
           {
               "type": "VCPU",
               "value": "1"
           }
       ]
     }
   }
   ```

1. 向 註冊任務定義 AWS Batch。

   ```
   $ aws batch register-job-definition --cli-input-json file://print-color-job-def.json
   ```

# 提交 AWS Batch 陣列任務
<a name="submit-array-job"></a>

註冊任務定義後，您可以提交使用新容器映像的 AWS Batch 陣列任務。

**提交 AWS Batch 陣列任務**

1. 在`print-color-job.json`工作區目錄中建立名為 的檔案，並將以下內容貼入其中。
**注意**  
此範例使用 [先決條件](array-tutorial-prereqs.md)區段中提到的任務佇列。

   ```
   {
     "jobName": "print-color",
     "jobQueue": "existing-job-queue",
     "arrayProperties": {
       "size": 7
     },
     "jobDefinition": "print-color"
   }
   ```

1. 將任務提交到您的 AWS Batch 任務佇列。請注意輸出中傳回的任務 ID。

   ```
   $ aws batch submit-job --cli-input-json file://print-color-job.json
   ```

1. 描述任務的狀態並等待任務移至 `SUCCEEDED`。

## 檢視您的陣列任務日誌
<a name="array-tutorial-logs"></a>

任務達到 `SUCCEEDED` 狀態後，您可以從任務的容器檢視 CloudWatch Logs。

**在 CloudWatch Logs 中檢視任務的日誌**

1. 在 https：//[https://console.aws.amazon.com/batch/](https://console.aws.amazon.com/batch/) 開啟 AWS Batch 主控台。

1. 在左側導覽窗格中，選擇 **Jobs (任務)**。

1. 對於 **Job queue (任務佇列)**，請選取佇列。

1. 在 **Status (狀態)** 區段，選擇 **succeeded (已成功)**。

1. 若要顯示陣列任務的所有子任務，選取在之前的區段中傳回的任務 ID。

1. 若要查看任務容器的日誌，選取其中一個子任務，然後選擇 **View logs (查看日誌)**。  
![\[陣列任務容器日誌\]](http://docs.aws.amazon.com/zh_tw/batch/latest/userguide/images/array-logs.png)

1. 查看其他子任務日誌。每個任務都會傳回不同的彩虹顏色。

# 執行 GPU 任務
<a name="gpu-jobs"></a>

GPU 任務可協助您執行使用執行個體 GPUs 的任務。

支援下列 Amazon EC2 GPU 型執行個體類型。如需詳細資訊，請參閱 [Amazon EC2 G3 執行個體](https://aws.amazon.com/ec2/instance-types/g3/)、[Amazon EC2 G4 執行個體](https://aws.amazon.com/ec2/instance-types/g4/)、[Amazon EC2 G5 執行個體](https://aws.amazon.com/ec2/instance-types/g5/)、[Amazon EC2 G6 執行個體](https://aws.amazon.com/ec2/instance-types/g6/)、[Amazon EC2 P2 執行個體](https://aws.amazon.com/ec2/instance-types/p2/)、[Amazon EC2 P3 執行個體](https://aws.amazon.com/ec2/instance-types/p3/)、[Amazon EC2 P4d 執行個體](https://aws.amazon.com/ec2/instance-types/p4/)、[Amazon EC2 P5 執行個體](https://aws.amazon.com/ec2/instance-types/p5/)、[Amazon EC2 P6 執行個體](https://aws.amazon.com/ec2/instance-types/p6/)、[Amazon EC2 Trn1 執行個體](https://aws.amazon.com/ec2/instance-types/trn1/)、[Amazon EC2 Trn2 執行個體](https://aws.amazon.com/ec2/instance-types/trn2/)、[Amazon EC2 Inf1 執行個體](https://aws.amazon.com/ec2/instance-types/inf1/)、[Amazon EC2 Inf2 執行個體、Amazon EC2 Inf](https://aws.amazon.com/ec2/instance-types/inf2/)[2 執行個體、Amazon EC2 Dl1 執行個體Amazon EC2](https://aws.amazon.com/ec2/instance-types/dl1/)和 [Amazon EC2 Dl2 執行個體](https://aws.amazon.com/ec2/instance-types/dl2q/)。


|  執行個體類型  |  GPU  |  記憶體  |  vCPUs  |  記憶體  |  網路頻寬  | 
| --- | --- | --- | --- | --- | --- | 
|  g3s.xlarge  |  1  |  8 GiB  |  4  |  30.5 GiB  |  10 Gbps  | 
|  g3.4xlarge  |  1  |  8 GiB  |  16  |  122 GiB  |  最高 10 Gbps  | 
|  g3.8xlarge  |  2  |  16 GiB  |  32  |  244 GiB  |  10 Gbps  | 
|  g3.16xlarge  |  4  |  32 GiB  |  64  |  488 GiB  |  25 Gbps  | 
|  g4dn.xlarge  |  1  |  16 GiB  |  4  |  16 GiB  |  最高 25 Gbps  | 
|  g4dn.2xlarge  |  1  |  16 GiB  |  8  |  32 GiB  |  最高 25 Gbps  | 
|  g4dn.4xlarge  |  1  |  16 GiB  |  16  |  64 GiB  |  最高 25 Gbps  | 
|  g4dn.8xlarge  |  1  |  16 GiB  |  32  |  128 GiB  |  50 Gbps  | 
|  g4dn.12xlarge  |  4  |  64 GiB  |  48  |  192 GiB  |  50 Gbps  | 
|  g4dn.16xlarge  |  1  |  16 GiB  |  64  |  256 GiB  |  50 Gbps  | 
|  g5.xlarge  |  1  |  24 GiB  |  4  |  16 GiB  |  最高 10 Gbps  | 
|  g5.2xlarge  |  1  |  24 GiB  |  8  |  32 GiB  |  最高 10 Gbps  | 
|  g5.4xlarge  |  1  |  24 GiB  |  16  |  64 GiB  |  最高 25 Gbps  | 
|  g5.8xlarge  |  1  |  24 GiB  |  32  |  128 GiB  |  25 Gbps  | 
|  g5.16xlarge  |  1  |  24 GiB  |  64  |  256 GiB  |  25 Gbps  | 
|  g5.12xlarge  |  4  |  96 GiB  |  48  |  192 GiB  |  40Gbps  | 
|  g5.24xlarge  |  4  |  96 GiB  |  96  |  384 GiB  |  50 Gbps  | 
|  g5.48xlarge  |  8  |  192 GiB  |  192  |  768 GiB  |  100 Gbps  | 
|  g5g.xlarge  |  1  |  16 GiB  |  4  |  8 GiB  |  最高 10 Gbps  | 
|  g5g.2xlarge  |  1  |  16 GiB  |  8  |  16 GiB  |  最高 10 Gbps  | 
|  g5g.4xlarge  |  1  |  16 GiB  |  16  |  32 GiB  |  最高 10 Gbps  | 
|  g5g.8xlarge  |  1  |  16 GiB  |  32  |  64 GiB  |  12 Gbps  | 
|  g5g.16xlarge  |  2  |  32 GiB  |  64  |  128 GiB  |  25 Gbps  | 
|  g5g.metal  |  2  |  32 GiB  |  64  |  128 GiB  |  25 Gbps  | 
|  g6.xlarge  |  1  |  24 GiB  |  4  |  16 GiB  |  最高 10 Gbps  | 
|  g6.2xlarge  |  1  |  24 GiB  |  8  |  32 GiB  |  最高 10 Gbps  | 
|  g6.4xlarge  |  1  |  24 GiB  |  16  |  64 GiB  |  最高 25 Gbps  | 
|  g6.8xlarge  |  1  |  24 GiB  |  32  |  128 GiB  |  25 Gbps  | 
|  g6.16xlarge  |  1  |  24 GiB  |  64  |  256 GiB  |  25 Gbps  | 
|  g6.12xlarge  |  4  |  96 GiB  |  48  |  192 GiB  |  40Gbps  | 
|  g6.24xlarge  |  4  |  96 GiB  |  96  |  384 GiB  |  50 Gbps  | 
|  g6.48xlarge  |  8  |  192 GiB  |  192  |  768 GiB  |  100 Gbps  | 
|  g6e.xlarge  |  1  |  48 GiB  |  4  |  32 GiB  |  高達 20 Gbps  | 
|  g6e.2xlarge  |  1  |  48 GiB  |  8  |  64 GiB  |  高達 20 Gbps  | 
|  g6e.4xlarge  |  1  |  48 GiB  |  16  |  128 GiB  |  20 Gbps  | 
|  g6e.8xlarge  |  1  |  48 GiB  |  32  |  256 GiB  |  25 Gbps  | 
|  g6e.16xlarge  |  1  |  48 GiB  |  64  |  512 GiB  |  35 Gbps  | 
|  g6e.12xlarge  |  4  |  192 GiB  |  48  |  384 GiB  |  100 Gbps  | 
|  g6e.24xlarge  |  4  |  192 GiB  |  96  |  768 GiB  |  200 Gbps  | 
|  g6e.48xlarge  |  8  |  384 GiB  |  192  |  1536 GiB  |  400 Gbps  | 
|  gr6.4xlarge  |  1  |  24 GiB  |  16  |  128 GiB  |  最高 25 Gbps  | 
|  gr6.8xlarge  |  1  |  24 GiB  |  32  |  256 GiB  |  25 Gbps  | 
|  p2.xlarge  |  1  |  12 GiB  |  4  |  61 GiB  |  高  | 
|  p2.8xlarge  |  8  |  96 GiB  |  32  |  488 GiB  |  10 Gbps  | 
|  p2.16xlarge  |  16  |  192 GiB  |  64  |  732 GiB  |  20 Gbps  | 
|  p3.2xlarge  |  1  |  16 GiB  |  8  |  61 GiB  |  最高 10 Gbps  | 
|  p3.8xlarge  |  4  |  64 GiB  |  32  |  244 GiB  |  10 Gbps  | 
|  p3.16xlarge  |  8  |  128 GiB  |  64  |  488 GiB  |  25 Gbps  | 
|  p3dn.24xlarge  |  8  |  256 GiB  |  96  |  768 GiB  |  100 Gbps  | 
|  p4d.24xlarge  |  8  |  320 GiB  |  96  |  1152 GiB  |  400 Gbps  | 
|  p4de.24xlarge  |  8  |  640 GiB  |  96  |  1152 GiB  |  400 Gbps  | 
|  p5.48xlarge  |  8  |  640 GiB  |  192  |  2 TiB  |  3200 Gbps  | 
|  p5e.48xlarge  |  8  |  1128 GiB  |  192  |  2 TiB  |  3200 Gbps  | 
|  p5en.48xlarge  |  8  |  1128 GiB  |  192  |  2 TiB  |  3200 Gbps  | 
|  p6-b200.48xlarge  |  8  |  1440 GiB  |  192  |  2 TiB  |  100 Gbps  | 
|  trn1.2xlarge  |  1  |  32 GiB  |  8  |  32 GiB  |  最高 12.5 Gbps  | 
|  trn1.32xlarge  |  16  |  512 GiB  |  128  |  512 GiB  |  800 Gbps  | 
|  trn1n.32xlarge  |  16   |  512 GiB  |  128  |  512 GiB  |  1600 Gbps  | 
|  trn2.48xlarge  |  16  |  1.5 TiB  |  192  |  2 TiB  |  3.2 Tbps  | 
|  inf1.xlarge  |  1  |  8 GiB  |  4  |  8 GiB  |  最高 25 Gbps  | 
|  inf1.2xlarge  |  1  |  8 GiB  |  8  |  16 GiB  |  最高 25 Gbps  | 
|  inf1.6xlarge  |  4  |  32 GiB  |  24  |  48 GiB  |  25 Gbps  | 
|  inf1.24xlarge  |  16  |  128 GiB  |  96  |  192 GiB  |  100 Gbps  | 
|  inf2.xlarge  |  1  |  32 GiB  |  4  |  16 GiB  |  最高 15 Gbps  | 
|  inf2.8xlarge  |  1  |  32 GiB  |  32  |  128 GiB  |  最高 25 Gbps  | 
|  inf2.24xlarge  |  6  |  192 GiB  |  96  |  384 GiB  |  50 Gbps  | 
|  inf2.48xlarge  |  12  |  384 GiB  |  192  |  768 GiB  |  100 Gbps  | 
|  dl1.24xlarge  |  8  |  256 GiB  |  96  |  768 GiB  |  400 Gbps  | 
|  dl2q.24xlarge  |  8  |  128 GiB  |  96  |  768 GiB  |  100 Gbps  | 

**注意**  
對於 GPU 任務， AWS Batch 僅支援具有 NVIDIA GPUs 的執行個體類型。例如， [https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances](https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances) 系列不支援 GPU 排程。您仍然可以在 [https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances](https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances) 上使用 ， AWS Batch 方法是只定義任務定義中的 vcpu 和記憶體需求，然後 GPUs 直接透過使用 Amazon ECS 或 Amazon EKS 運算最佳化 AMI 的 Amazon EC2 [啟動範本使用者資料](launch-templates.md#lt-user-data.title)中的自訂來存取主機 GPUs，或使用 AMD GPU 的自訂 AMI。  
提供給 AWS Batch 或 Amazon EC2 使用者資料的自訂 AMIs 上的 GPU 任務支援使用 ARM64 架構的執行個體類型，以透過自訂程式碼和組態存取 GPUs。例如，[https://aws.amazon.com/ec2/instance-types/g5g/](https://aws.amazon.com/ec2/instance-types/g5g/)執行個體系列。

任務定義的 [resourceRequirements](job_definition_parameters.md#ContainerProperties-resourceRequirements) 參數會指定要固定到容器的 GPUs 數量。此 GPUs 數量不適用於在該任務期間在該執行個體上執行的任何其他任務。運算環境中執行 GPU 任務的所有執行個體類型都必須來自 `p3`、`p4`、`p5`、`p6`、`g3`、`g3s``g4`、 `g5`或 `g6`執行個體系列。如果沒有這樣做，GPU 任務可能會卡在 `RUNNABLE` 狀態。

不使用 GPUs 的任務可以在 GPU 執行個體上執行。不過，在 GPU 執行個體上執行成本可能比在類似的非 GPU 執行個體上要高。根據所需的特定 vCPU、記憶體和時間，這些非 GPU 任務可能會阻止 GPU 任務執行。

**Topics**
+ [在 Amazon EKS 上建立 GPU 型Kubernetes叢集](create-gpu-cluster-eks.md)
+ [建立 Amazon EKS GPU 任務定義](create-eks-gpu-job-definition.md)
+ [在 Amazon EKS 叢集中執行 GPU 任務](run-gpu-job-eks-cluster.md)

# 在 Amazon EKS 上建立 GPU 型Kubernetes叢集
<a name="create-gpu-cluster-eks"></a>

在 Amazon EKS 上建立 GPU 型Kubernetes叢集之前，您必須先完成 中的步驟[在 Amazon EKS AWS Batch 上開始使用](getting-started-eks.md)。此外，也請考慮下列事項：
+ AWS Batch 支援使用 NVIDIA GPUs 的執行個體類型。
+ 根據預設， 會 AWS Batch 選取版本符合您 Amazon EKS 叢集控制平面Kubernetes版本的 Amazon EKS 加速 AMI。

```
$ cat <<EOF > ./batch-eks-gpu-ce.json
{
  "computeEnvironmentName": "My-Eks-GPU-CE1",
  "type": "MANAGED",
  "state": "ENABLED",
  "eksConfiguration": {
    "eksClusterArn": "arn:aws:eks:<region>:<account>:cluster/<cluster-name>",
    "kubernetesNamespace": "my-aws-batch-namespace"
  },
  "computeResources": {
    "type": "EC2",
    "allocationStrategy": "BEST_FIT_PROGRESSIVE",
    "minvCpus": 0,
    "maxvCpus": 1024,
    "instanceTypes": [
      "p3dn.24xlarge",
      "p4d.24xlarge"
    ],
    "subnets": [
        "<eks-cluster-subnets-with-access-to-internet-for-image-pull>"
    ],
    "securityGroupIds": [
        "<eks-cluster-sg>"
    ],
    "instanceRole": "<eks-instance-profile>"
  }
}
EOF

$ aws batch create-compute-environment --cli-input-json file://./batch-eks-gpu-ce.json
```

AWS Batch 不會代表您管理 NVIDIA GPU 裝置外掛程式。您必須將此外掛程式安裝到您的 Amazon EKS 叢集，並允許它以 AWS Batch 節點為目標。如需詳細資訊，請參閱在 GitHub 上[啟用 中的 GPU 支援Kubernetes](https://github.com/NVIDIA/k8s-device-plugin#enabling-gpu-support-in-kubernetes)。

若要設定NVIDIA裝置外掛程式 (`DaemonSet`) 以鎖定 AWS Batch 節點，請執行下列命令。

```
# pull nvidia daemonset spec
$ curl -O https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.12.2/nvidia-device-plugin.yml
# using your favorite editor, add Batch node toleration
# this will allow the DaemonSet to run on Batch nodes
- key: "batch.amazonaws.com/batch-node"
  operator: "Exists"

$ kubectl apply -f nvidia-device-plugin.yml
```

我們不建議您在相同的運算環境和任務佇列配對中，將運算型 (CPU 和記憶體） 工作負載與 GPU 型工作負載混合。這是因為運算任務可能會用盡 GPU 容量。

若要連接任務佇列，請執行下列命令。

```
$ cat <<EOF > ./batch-eks-gpu-jq.json
 {
    "jobQueueName": "My-Eks-GPU-JQ1",
    "priority": 10,
    "computeEnvironmentOrder": [
      {
        "order": 1,
        "computeEnvironment": "My-Eks-GPU-CE1"
      }
    ]
  }
EOF

$ aws batch create-job-queue --cli-input-json file://./batch-eks-gpu-jq.json
```

# 建立 Amazon EKS GPU 任務定義
<a name="create-eks-gpu-job-definition"></a>

目前僅`nvidia.com/gpu`支援 ，您設定的資源值必須是整數。您無法使用 GPU 的分數。如需詳細資訊，請參閱 *Kubernetes 文件*中的[排程 GPUs](https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/)。

若要註冊 Amazon EKS 的 GPU 任務定義，請執行下列命令。

```
$ cat <<EOF > ./batch-eks-gpu-jd.json
{
    "jobDefinitionName": "MyGPUJobOnEks_Smi",
    "type": "container",
    "eksProperties": {
        "podProperties": {
            "hostNetwork": true,
            "containers": [
                {
                    "image": "nvcr.io/nvidia/cuda:10.2-runtime-centos7",
                    "command": ["nvidia-smi"],
                    "resources": {
                        "limits": {
                            "cpu": "1",
                            "memory": "1024Mi",
                            "nvidia.com/gpu": "1"
                        }
                    }
                }
            ]
        }
    }
}
EOF

$ aws batch register-job-definition --cli-input-json file://./batch-eks-gpu-jd.json
```

# 在 Amazon EKS 叢集中執行 GPU 任務
<a name="run-gpu-job-eks-cluster"></a>

GPU 資源不可壓縮。 會為 GPU 任務 AWS Batch 建立 Pod 規格，其中**請求**的值等於**限制**的值。這是Kubernetes必要項目。

若要提交 GPU 任務，請執行下列命令。

```
$ aws batch submit-job --job-queue My-Eks-GPU-JQ1 --job-definition MyGPUJobOnEks_Smi --job-name My-Eks-GPU-Job

# locate information that can help debug or find logs (if using Amazon CloudWatch Logs with Fluent Bit)
$ aws batch describe-jobs --job <job-id> | jq '.jobs[].eksProperties.podProperties | {podName, nodeName}'
{
  "podName": "aws-batch.f3d697c4-3bb5-3955-aa6c-977fcf1cb0ca",
  "nodeName": "ip-192-168-59-101.ec2.internal"
}
```

# 檢視 AWS Batch 任務佇列中的任務
<a name="view-jobs"></a>

您可以在其中檢視和篩選任務 AWS Batch。此功能提供檢視現有任務佇列的選項，並根據三個選項之一篩選其任務。

搜尋和篩選能夠擷取未處於終端狀態 (`SUCCEEDED` 或 ) 的任務`FAILED`。一旦任務的狀態為 `SUCCEEDED`，`FAILED`或者您應該能夠擷取任務最多七天。您仍然可以檢視任務的 CloudWatch 或 Amazon EventBridge 日誌。

使用此程序列出 AWS Batch 主控台中任務佇列中的所有任務。或者，使用**篩選結果**欄位，根據您指定的條件縮小結果範圍。

1. 導覽至 [AWS Batch 主控台](https://console.aws.amazon.com/batch/home)。

1. 在導覽窗格中，選擇**任務**。

1. 展開**任務佇列**下拉式清單，然後選擇您要搜尋的任務佇列。
**注意**  
您一次只能搜尋一個任務佇列內的任務。

1. 在**篩選結果**欄位中，輸入要包含在結果中的關鍵字。您可以使用此欄位，依**任務名稱**、**狀態**或**任務 ID** 進行篩選。視 屬性而定，可能會有其他運算子，例如等於 (=) 或包含您必須定義的 (：)。
**注意**  
SageMaker Training 任務佇列僅支援依**任務名稱**和**任務 ID** 篩選

1. 選擇 **Search** (搜尋)。

# AWS Batch 搜尋任務佇列中的任務
<a name="searching-filtering-jobs"></a>

您可以使用任務搜尋在 中搜尋和篩選 AWS Batch 任務。此功能提供在現有任務佇列中搜尋並篩選其任務的選項。

搜尋和篩選能夠擷取未處於終端狀態 (`SUCCEEDED` 或 ) 的任務`FAILED`。一旦任務的狀態為 `SUCCEEDED`，`FAILED`或者您應該能夠擷取任務最多七天。您仍然可以檢視任務的 CloudWatch 或 Amazon EventBridge 日誌。

若要同時使用多個條件進行搜尋，請使用**進階搜尋**功能。例如，您可以包含下列任何或所有篩選條件：**狀態**、**日期範圍****和其他條件** （例如任務名稱、任務定義或任務 ID)。

## 搜尋 AWS Batch 任務AWS （主控台）
<a name="search-jobs"></a>

使用此程序在 AWS Batch 主控台中搜尋任務佇列中的任務。

1. 導覽至 [AWS Batch 主控台](https://console.aws.amazon.com/batch/home)。

1. 在導覽窗格中，選擇**任務**。

1. 開啟**進階搜尋**。

1. 展開**任務佇列**下拉式清單，然後選擇您要搜尋的任務佇列。
**注意**  
您一次只能搜尋一個任務佇列內的任務。

1. 對於**搜尋選項**：

   1. 針對**狀態**下拉式清單，您可以選擇要篩選的一或多個狀態。如需詳細資訊，請參閱[任務狀態](job_states.md)及[服務任務狀態](service-job-status.md)。
**注意**  
當任何子任務更新為 `PENDING`時，陣列任務父會更新為 ，`RUNNABLE`並在子任務執行時保持為 `PENDING` 狀態。若要檢視這些任務，請根據`PENDING`狀態進行篩選，直到所有子任務達到結束狀態為止。

   1. 選擇**日期範圍**，根據日期和時間範圍篩選結果。
      + 選擇**相對模式**，以搜尋在從目前日期和時間回溯計數的時間範圍內建立日期的任務。
      + 選擇**絕對模式**以搜尋在您指定的日期和時間範圍內建立日期的任務。

   1. 在**其他條件**欄位中，輸入要包含在搜尋結果中的關鍵字。例如，您可以使用此欄位依**任務名稱**、**任務定義**、**任務 ID** 或**共用識別符**進行搜尋。視 屬性而定，可能會有其他運算子，例如等於 (=) 或包含您必須定義的 (：)。
**注意**  
SageMaker Training 任務佇列僅支援依**任務名稱**和**任務 ID** 篩選
**注意**  
依**共用識別符**篩選時，您也可以指定任務狀態。這是其他篩選條件排除任務狀態篩選的限制的例外狀況。

1. 選擇 **Search** (搜尋)。

## 搜尋和篩選 AWS Batch 任務 (AWS CLI)
<a name="search-filter-jobs-cli"></a>

使用此程序，透過 列出任務佇列中的所有任務 AWS CLI。或者，使用 **篩選條件**參數，根據您指定的條件縮小結果範圍。

------
#### [ Search job queue (AWS CLI) ]

您可以使用 [list-jobs](https://docs.aws.amazon.com/cli/latest/reference/batch/list-jobs.html) 命令來搜尋和篩選任務佇列。

例如，您可以根據任務名稱搜尋任務佇列：

```
aws batch list-jobs \
    --job-queue my-job-queue \
    --filters name=JOB_NAME,values="my-job"
```

依共用識別符篩選任務：

```
aws batch list-jobs \
    --job-queue my-job-queue \
    --filters name=SHARE_IDENTIFIER,values="my-share"
```

依共用識別符篩選時，您可以包含任務狀態：

```
aws batch list-jobs \
    --job-queue my-job-queue \
    --job-status RUNNING \
    --filters name=SHARE_IDENTIFIER,values="my-share"
```

在上述命令中，進行下列變更：
+ 以您的任務佇列名稱取代 *my-job-queue*。
+ 將 *my-job* 取代為您的任務名稱。
+ 將 *my-share* 取代為您要篩選的共用識別符。

------
#### [ Search service job queue (AWS CLI) ]

您可以使用 [list-service-jobs](https://docs.aws.amazon.com/cli/latest/reference/batch/list-service-jobs.html) 命令來搜尋和篩選服務任務佇列。

例如，您可以根據任務名稱搜尋服務任務佇列：

```
aws batch list-service-jobs \
    --job-queue my-sm-queue \
    --filters name=JOB_NAME,values="my-sm-job"
```

依共用識別符篩選服務任務：

```
aws batch list-service-jobs \
    --job-queue my-sm-queue \
    --filters name=SHARE_IDENTIFIER,values="my-share"
```

在上述命令中，進行下列變更：
+ 以您的服務任務佇列名稱取代 *my-sm-queue*。
+ 以您的服務任務名稱取代 *my-sm-job*。
+ 將 *my-share* 取代為您要篩選的共用識別符。

------

# AWS Batch 任務的網路模式
<a name="networking-modes-jobs"></a>

下表說明 AWS Batch 任務類型的聯網模式和典型用量。如需考量和行為的詳細資訊，請參閱「任務類型」欄中的連結。


| 任務類型 | 支援的網路模式 (s) | 典型用量 | 
| --- | --- | --- | 
| [ECS-EC2 簡單任務](jobs.md) | host | 用於可擴展性最高的尷尬平行批次工作負載，這些工作負載只需要輸出至運算環境中定義的 vpc。 | 
| [ECS-EC2 多節點平行任務](multi-node-parallel-jobs.md) | awsvpc | 用於緊密耦合的多主機 （節點） 分散式工作負載，模型化為具有任務節點之間協調通訊的單一任務。 | 
| [ECS-Fargate 簡單任務](when-to-use-fargate.md) | awsvpc | 真正的無伺服器，適用於尷尬的平行批次工作負載。通常是最低的 TCO 和最高的容器隔離任務模型。 | 
| [EKS-EC2 簡單任務](eks-jobs.md) | 主機和 Pod | 用於高度可擴展的尷尬平行批次工作負載，這些工作負載只需要輸出至運算環境中定義的 vpc。預設為主機聯網。 | 
| [EKS-EC2 多節點平行任務](mnp-eks-jobs.md) | 主機和 Pod | 用於緊密耦合的多主機 （節點） 分散式工作負載，模型化為具有 Pod 節點之間協調通訊的單一任務。預設為主機聯網。 | 

# 在 CloudWatch Logs 中檢視 AWS Batch 任務日誌
<a name="review-job-logs"></a>

您可以[設定 AWS Batch 任務](using_cloudwatch_logs.md#using_cloudwatch_logs.title)將日誌資訊傳送至 Amazon CloudWatch Logs。如此一來，您可以在一個方便的位置檢視與任務不同的日誌。如需詳細資訊，請參閱[搭配 使用 CloudWatch Logs AWS Batch](using_cloudwatch_logs.md)。

您也可以在 AWS Batch 主控台中使用**任務日誌**來監控或疑難排解 AWS Batch 任務。

1. 開啟 [AWS Batch 主控台](https://console.aws.amazon.com/batch/home)。

1. 選擇 **Jobs (任務)**。如需在任務佇列中排序和篩選任務的詳細資訊，請參閱 [檢視 AWS Batch 任務佇列中的任務](view-jobs.md)和 [搜尋任務佇列中的任務](searching-filtering-jobs.md)

1. 針對**任務佇列**，選擇您想要的任務佇列。
**提示**  
如果任務佇列中有多個任務，您可以開啟**搜尋和篩選**以更快地尋找任務。如需詳細資訊，請參閱[AWS Batch 搜尋任務佇列中的任務](searching-filtering-jobs.md)。

1. 針對**狀態**，選擇您想要的任務狀態。

1. 選擇您想要的任務，便會開啟**詳細資訊**頁面。

1. 在**詳細資訊**頁面上，向下捲動至**日誌串流名稱**，然後選擇連結。連結會開啟任務的 Amazon CloudWatch Logs 頁面。

1. （選用） 如果這是您第一次檢視日誌，您可能需要授權。

   對於**需要授權**，輸入 **OK**，然後選擇**授權**以接受 Amazon CloudWatch 費用。
**注意**  
若要撤銷 CloudWatch 費用的授權：  
在左側導覽窗格中，選擇**許可**。
針對**任務日誌**，選擇**編輯**。
清除**授權批次以使用 CloudWatch** 核取方塊。
選擇**儲存變更**。

# 檢閱 AWS Batch 任務資訊
<a name="review-job-info"></a>

您可以檢閱 AWS Batch 任務資訊，例如狀態、任務定義和容器資訊。

1. 開啟 [AWS Batch 主控台](https://console.aws.amazon.com/batch/home)。

1. 選擇 **Jobs (任務)**。

1. 針對**任務佇列**，選擇您想要的任務佇列。
**提示**  
如果任務佇列中有多個任務，您可以開啟**搜尋和篩選**以更快地尋找任務。如需詳細資訊，請參閱[AWS Batch 搜尋任務佇列中的任務](searching-filtering-jobs.md)。

1. 選擇您想要的任務。

**注意**  
您也可以使用 AWS Command Line Interface (AWS CLI) 來檢視 AWS Batch 任務的詳細資訊。如需詳細資訊，請參閱《 [AWS CLI 命令參考](https://docs.aws.amazon.com/cli/latest/reference/)》中的 [describe-jobs](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/batch/describe-jobs.html)。