SageMaker 人工智能 AWS Batch 入门 - AWS Batch

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

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 执行角色”。

  1. 创建 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"
  2. 附加托管策略

    将所需的托管策略附加到该角色:

    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
  3. 注意角色 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-name my-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 AWSBatchmy-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

其他资源

完成本教程后,您可能需要探索以下主题: