

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

# 在 中提交服務任務 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)。

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

下表顯示如何使用 SageMaker Python SDK 或 CLI AWS 提交服務任務：

------
#### [ Submit using the SageMaker Python SDK ]

[SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v3-examples/training-examples/aws_batch/sm-training-queues_getting_started_with_model_trainer.html) 內建支援將任務提交至 AWS Batch。下列範例示範如何建立模型訓練師、建立訓練佇列，以及提交任務。如需完整範例，請參閱 GitHub 上的[完整範例筆記本](https://github.com/aws/sagemaker-python-sdk/blob/master/v3-examples/training-examples/aws_batch/sm-training-queues_getting_started_with_model_trainer.ipynb)。

建立`ModelTrainer`定義訓練任務組態的 。

```
from sagemaker.train.model_trainer import ModelTrainer
from sagemaker.train.configs import SourceCode, Compute, StoppingCondition

source_code = SourceCode(command="echo 'Hello World'")

model_trainer = ModelTrainer(
    training_image={{"123456789012.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:2.5-gpu-py311"}},
    source_code=source_code,
    base_job_name={{"my-training-job"}},
    compute=Compute(instance_type={{"ml.g5.xlarge"}}, instance_count={{1}}),
    stopping_condition=StoppingCondition(max_runtime_in_seconds={{300}}),
)
```

建立依名稱參考任務佇列的`TrainingQueue`物件。

```
from sagemaker.train.aws_batch.training_queue import TrainingQueue

queue = TrainingQueue({{"my-sagemaker-job-queue"}})
```

呼叫 來提交任務`queue.submit`。

```
job = queue.submit(
    training_job=model_trainer,
    inputs=None,
)
```

------
#### [ Submit using the AWS CLI ]

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

```
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)。

------