

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在中提交服务作业 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/whatis.html)* 执行角色](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.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 作业调度的作业队列。有关更多信息，请参阅 [在 AWS Batch 中创建 SageMaker 训练作业队列](create-sagemaker-job-queue.md)。
+ **IAM 权限**：创建和管理 AWS Batch 作业队列和服务环境的权限。有关更多信息，请参阅 [AWS Batch IAM 策略、角色和权限](IAM_policies.md)。

## 提交服务作业
<a name="service-job-submit-example"></a>

下表显示了如何使用 SageMaker Python SDK 或 AWS CLI 提交服务作业：

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

P [SageMaker ython 开发工具包](https://sagemaker.readthedocs.io/en/stable/v3-examples/training-examples/aws_batch/sm-training-queues_getting_started_with_model_trainer.html)内置了向提交作业的支持 AWS Batch。以下示例说明如何创建模型训练器、创建训练队列和提交作业。有关完整示例，请参阅上的[完整示例笔记本](https://github.com/aws/sagemaker-python-sdk/blob/master/v3-examples/training-examples/aws_batch/sm-training-queues_getting_started_with_model_trainer.ipynb) GitHub。

创建用于`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)。

------