本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SageMaker 人工智能 AWS Batch 入门
AWS Batch 服务作业使您能够通过具有计划、优先级划分和排队功能的 AWS Batch 作业队列提交 SageMaker 训练作业。本教程演示如何使用 AWS Batch 服务作业设置和运行简单的 SageMaker 训练作业。
目录
概览
本教程演示如何使用为 SageMaker 训练作业设置 AWS Batch 服务作业 AWS CLI。
- 目标受众
-
本教程专为负责大规模设置和运行机器学习训练作业的数据科学家和开发人员而设计。
- 使用的功能
-
本教程向您展示了如何使用 t AWS CLI o:
-
为 SageMaker 训练作业创建服务环境
-
创建 SageMaker 训练作业队列
-
使用
SubmitServiceJob
API 提交服务作业 -
监控作业状态并查看输出
-
访问训练作业的 CloudWatch 日志
-
- 所需时间
-
完成本教程大约需要 15 分钟。
- 区域限制
-
本教程可以在任何同时提供 SageMaker AI AWS Batch 和 AI 的 AWS 地区完成。
- 资源使用成本
-
创建 AWS 账户不收取任何费用。但是,通过实施此解决方案,您可能会为以下资源产生成本:
描述 费用(美元) SageMaker AI 训练实例 您需要为使用的每个 SageMaker AI 训练实例付费。有关定价的更多信息,请参阅 SageMaker AI 定价 。 亚马逊 S3 存储 存储训练作业输出的成本最低。有关更多信息,请参阅 Amazon S3 定价 。
先决条件
在开始本教程之前,必须安装和配置以下工具和资源,以便创建和管理两者 AWS Batch 以及 SageMaker AI 资源。
-
AWS CLI— 用于处理 AWS 服务(包括 AWS Batch 和 SageMaker AI)的命令行工具。本指南要求您使用 2.8.6 或更高版本。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的安装、更新和卸载 AWS CLI。安装完成后 AWS CLI,我们建议您也对其进行配置。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的使用
aws configure
进行快速配置。
步骤 1:创建 A SageMaker I 执行角色
SageMaker AI 使用执行角色代表您使用其他 AWS
服务执行操作。您必须创建执行角色并授予 SageMaker AI 权限,才能使用训练作业所需的服务和资源。使用AmazonSageMakerFullAccess
托管策略,因为它包含对 Amazon S3 的权限。
注意
按照以下说明为本教程创建 SageMaker AI 执行角色。
在为生产环境创建执行角色之前,我们建议您查看《 SageMaker AI 开发者指南》中的 “如何使用 SageMaker AI 执行角色”。
-
创建 IAM 角色
使用以下信任策略创建名
sagemaker-trust-policy.json
为 JSON 文件:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
使用信任策略创建 IAM 角色:
aws iam create-role \ --role-name SageMakerExecutionRole \ --assume-role-policy-document file://sagemaker-trust-policy.json \ --description "Execution role for SageMaker training jobs"
-
附加托管策略
将所需的托管策略附加到该角色:
aws iam attach-role-policy \ --role-name SageMakerExecutionRole \ --policy-arn arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
aws iam attach-role-policy \ --role-name SageMakerExecutionRole \ --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
-
注意角色 ARN
获取角色 ARN,你将在后面的步骤中使用它:
aws iam get-role --role-name SageMakerExecutionRole --query 'Role.Arn' --output text
保存此 ARN,因为你将在创建训练作业有效载荷时使用它。
步骤 2:创建您的服务环境
服务环境定义了 SageMaker 训练作业的容量限制。服务环境封装了可以同时运行的最大训练实例数。
重要
当您为 T SageMaker raining 创建第一个服务环境时,会在您的账户AWSServiceRoleForAWSBatchWithSagemaker
中 AWS Batch
自动创建一个名为的服务相关角色。此角色 AWS Batch 允许您代表您对 SageMaker 培训作业进行排队和管理。有关此服务相关角色及其权限的更多信息,请参阅在 SageMaker AI 中 AWS Batch 使用角色。
创建最多可处理 5 个实例的服务环境:
aws batch create-service-environment \ --service-environment-name
TutorialServiceEnvironment
\ --service-environment-type SAGEMAKER_TRAINING \ --capacity-limits capacityUnit=NUM_INSTANCES,maxCapacity=5
输出:
{ "serviceEnvironmentName": "
TutorialServiceEnvironment
", "serviceEnvironmentArn": "arn:aws:batch:your-region
:your-account-id
:service-environment/TutorialServiceEnvironment
" }
确认您的服务环境已成功创建:
aws batch describe-service-environments --service-environments
TutorialServiceEnvironment
输出:
{ "serviceEnvironments": [ { "serviceEnvironmentName": "
TutorialServiceEnvironment
", "serviceEnvironmentArn": "arn:aws:batch:your-region
:your-account-id
:service-environment/TutorialServiceEnvironment
", "serviceEnvironmentType": "SAGEMAKER_TRAINING", "state": "ENABLED", "status": "VALID", "capacityLimits": [ { "maxCapacity": 5, "capacityUnit": "NUM_INSTANCES" } ], "tags": {} } ] }
有关服务环境的更多信息,请参阅的服务环境 AWS Batch。
步骤 3:创建 SageMaker 任务队列
SageMaker 作业队列管理服务作业的调度和执行。提交到该队列的任务将根据可用容量分配到您的服务环境。
创建 SageMaker 训练作业队列:
aws batch create-job-queue \ --job-queue-name
my-sm-training-fifo-jq
\ --job-queue-type SAGEMAKER_TRAINING \ --priority 1 \ --service-environment-order order=1,serviceEnvironment=TutorialServiceEnvironment
输出:
{ "jobQueueName": "
my-sm-training-fifo-jq
", "jobQueueArn": "arn:aws:batch:your-region
:your-account-id
:job-queue/my-sm-training-fifo-jq
" }
验证您的任务队列是否已成功创建:
aws batch describe-job-queues --job-queues
my-sm-training-fifo-jq
输出:
{ "jobQueues": [ { "jobQueueName": "
my-sm-training-fifo-jq
", "jobQueueArn": "arn:aws:batch:your-region
:your-account-id
:job-queue/my-sm-training-fifo-jq
", "state": "ENABLED", "status": "VALID", "statusReason": "JobQueue Healthy", "priority": 1, "computeEnvironmentOrder": [], "serviceEnvironmentOrder": [ { "order": 1, "serviceEnvironment": "arn:aws:batch:your-region
:your-account-id
:service-environment/TutorialServiceEnvironment
" } ], "jobQueueType": "SAGEMAKER_TRAINING", "tags": {} } ] }
有关 SageMaker 任务队列的更多信息,请参阅在中创建 SageMaker 训练作业队列 AWS Batch。
步骤 4:创建并提交训练作业
现在,您将创建一个简单的训练作业并将其提交到您的作业队列中。此示例使用一个基本的 “hello world” 训练作业,该作业演示了服务作业的功能。
使用以下内容创建名为
的文件。my_training_job.json
your-account-id
用您的 AWS
账户 ID 替换:
注意
S3OutputPath
是创建 SageMaker 训练任务所必需的,但是本教程的结果未存储在 Amazon S3 存储桶中,您可以使用以下 JSON 中的路径。如果您愿意,在您的生产环境中,您将需要一个有效的 Amazon S3 存储桶来存储输出。
{ "TrainingJobName": "
my-simple-training-job
", "RoleArn": "arn:aws:iam::your-account-id
: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-s3-bucket/output" }, "StoppingCondition": { "MaxRuntimeInSeconds": 30 } }
使用 SubmitServiceJobAPI 提交训练作业:
aws batch submit-service-job \ --job-queue
my-sm-training-fifo-jq
\ --job-namemy-batch-sm-job
\ --service-job-type SAGEMAKER_TRAINING \ --retry-strategy attempts=1 \ --timeout-config attemptDurationSeconds=60 \ --service-request-payload file://my_training_job.json
输出:
{ "jobArn": "arn:aws:batch:
your-region
:your-account-id
:service-job/your-job-id
", "jobName": "my-batch-sm-job
", "jobId": "your-job-id
" }
有关服务任务负载的更多信息,请参阅中的服务任务有效负载 AWS Batch。有关提交服务作业的更多信息,请参阅在中提交服务作业 AWS Batch。
步骤 5:监控作业状态
您可以使用以下方法监控您的训练作业 AWS Batch APIs:DescribeServiceJobListServiceJobs、和GetJobQueueSnapshot。本节介绍检查作业状态和队列信息的不同方法。
查看队列中正在运行的作业:
aws batch list-service-jobs \ --job-queue
my-sm-training-fifo-jq
--job-status RUNNING
输出:
{ "jobSummaryList": [ { "latestAttempt": { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:
your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" } }, "createdAt": 1753718760, "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id
", "jobId": "your-job-id
", "jobName": "my-batch-sm-job
", "serviceJobType": "SAGEMAKER_TRAINING", "status": "RUNNING", "startedAt": 1753718820 } ] }
查看处于以下RUNNABLE
状态的作业:
aws batch list-service-jobs \ --job-queue
my-sm-training-fifo-jq
--job-status RUNNABLE
获取队列中即将到来的任务的快照:
aws batch get-job-queue-snapshot --job-queue
my-sm-training-fifo-jq
输出:
{ "frontOfQueue": { "jobs": [ { "jobArn": "arn:aws:batch:
your-region
:your-account-id
:service-job/your-job-id
", "earliestTimeAtPosition": 1753718880 }, { "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id-2
", "earliestTimeAtPosition": 1753718940 } ], "lastUpdatedAt": 1753718970 } }
按姓名搜索职位:
aws batch list-service-jobs \ --job-queue
my-sm-training-fifo-jq
\ --filters name=JOB_NAME,values="my-batch-sm-job
"
输出:
{ "jobSummaryList": [ { "latestAttempt": { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:
your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" } }, "createdAt": 1753718760, "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id
", "jobId": "your-job-id
", "jobName": "my-batch-sm-job
", "serviceJobType": "SAGEMAKER_TRAINING", "status": "RUNNING" } ] }
有关作业状态映射的更多信息,请参阅将 AWS Batch 服务作业状态映射到 SageMaker AI 状态。
步骤 6:查看任务输出
任务完成后,您可以通过两者和 SageMaker AI 查看其输出 AWS Batch 和日志 APIs。
从 AWS Batch以下地址获取有关您的工作的详细信息:
aws batch describe-service-job \ --job-id
your-job-id
输出:
{ "attempts": [ { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:
your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" }, "startedAt": 1753718820, "stoppedAt": 1753718880, "statusReason": "Received status from SageMaker: Training job completed" } ], "createdAt": 1753718760, "jobArn": "arn:aws:batch:your-region
:your-account-id
:service-job/your-job-id
", "jobId": "your-job-id
", "jobName": "my-batch-sm-job
", "jobQueue": "arn:aws:batch:your-region
:your-account-id
:job-queue/my-sm-training-fifo-jq
", "latestAttempt": { "serviceResourceId": { "name": "TrainingJobArn", "value": "arn:aws:sagemaker:your-region
:your-account-id
:training-job/AWSBatch<my-simple-training-job>
<your-attempt-id>
" } }, "retryStrategy": { "attempts": 1, "evaluateOnExit": [] }, "serviceRequestPayload": "your-training-job-request-json
", "serviceJobType": "SAGEMAKER_TRAINING", "startedAt": 1753718820, "status": "SUCCEEDED", "statusReason": "Received status from SageMaker: Training job completed", "stoppedAt": 1753718880, "tags": {}, "timeoutConfig": { "attemptDurationSeconds": 60 } }
此命令返回全面的作业信息,包括 SageMaker 训练作业 ARN,您可以使用该信息直接通过 SageMaker AI 访问作业:
aws sagemaker describe-training-job \ --training-job-name AWSBatch
<my-simple-training-job>
<your-attempt-id>
要查看训练作业的 CloudWatch 日志,请先获取日志流名称:
aws logs describe-log-streams \ --log-group-name /aws/sagemaker/TrainingJobs \ --log-stream-name-prefix AWSBatch
my-simple-training-job
输出:
{ "logStreams": [ { "logStreamName": "
your-log-stream-name
", "creationTime": 1753718830, "firstEventTimestamp": 1753718840, "lastEventTimestamp": 1753718850, "lastIngestionTime": 1753718860, "uploadSequenceToken":upload-sequence-token
, "arn": "arn:aws:logs:your-region
:your-account-id
:log-group:/aws/sagemaker/TrainingJobs:log-stream:AWSBatch<my-simple-training-job>
<your-attempt-id>
/algo-1-algo-id
", "storedBytes": 0 } ] }
然后使用上一个响应中的日志流名称检索日志:
aws logs get-log-events \ --log-group-name /aws/sagemaker/TrainingJobs \ --log-stream-name
your-log-stream-name
输出:
{ "events": [ { "timestamp": 1753718845, "message": "hello world", "ingestionTime": 1753718865 } ], "nextForwardToken": "
next-forward-token
", "nextBackwardToken": "next-backward-token
" }
日志输出显示来自您的训练作业的 “hello world” 消息,确认作业已成功执行。
第 7 步:清理教程资源
完成本教程后,请清理您创建的资源以避免持续收费。
首先,禁用并删除作业队列:
aws batch update-job-queue \ --job-queue
my-sm-training-fifo-jq
\ --state DISABLED
等待任务队列被禁用,然后将其删除:
aws batch delete-job-queue \ --job-queue
my-sm-training-fifo-jq
接下来,禁用并删除服务环境:
aws batch update-service-environment \ --service-environment
TutorialServiceEnvironment
\ --state DISABLED
等待服务环境被禁用,然后将其删除:
aws batch delete-service-environment \ --service-environment
TutorialServiceEnvironment
其他资源
完成本教程后,您可能需要探索以下主题:
-
我们建议使用 PySDK 创建服务任务并将其提交到您的作业队列,因为 PySDK 有帮助类和实用工具。有关使用 pySDK 的示例,请参阅上的 SageMaker AI 示例
。 GitHub -
了解有关 中的服务职位 AWS Batch 的更多信息。
-
浏览中的服务任务有效负载 AWS Batch更复杂的训练作业配置。
-
了解有关
SubmitServiceJob
API 在中提交服务作业 AWS Batch 的相关信息。 -
查看将 AWS Batch 服务作业状态映射到 SageMaker AI 状态以了解工作状态的转变。
-
请访问 SageMaker AI Python SDK 文档
,了解更多使用 Python 创建和提交 SageMaker 训练作业的功能丰富的方法。 -
浏览SageMaker示例笔记本
,了解更复杂的机器学习工作流程。