本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
预处理数据并训练机器学习模型
此示例项目演示了如何使用 SageMaker 和 AWS Step Functions 预处理数据,以及如何训练机器学习模型。
在此项目中,Step Functions 使用 Lambda 函数通过测试数据集为 Amazon S3 存储桶添加种子,并通过 Python 脚本进行数据处理。然后,它使用SageMaker 服务集成训练机器学习模型并执行批量转换。
有关 SageMaker 和 Step Functions 服务集成的更多信息,请参阅以下内容:
注意
此示例项目可能会产生费用。
对于新 AWS 用户,可以使用免费使用套餐。在此套餐中,低于某种使用水平的服务是免费的。有关 AWS 费用和免费套餐的更多信息,请参阅SageMaker 定价
第 1 步:创建状态机并预置资源
-
打开 Step Functions 控制台
,然后选择创建状态机。 -
在搜索框中键入
Preprocess data and train a machine learning model
,然后从返回的搜索结果中选择预处理数据并训练机器学习模型。 -
选择下一步以继续。
-
Step Functions 列出了您选择的示例项目中 AWS 服务 使用的。它还显示了示例项目的工作流图。将此项目部署到您的, AWS 账户 或者将其用作构建您自己的项目的起点。根据您想继续的方式,选择运行演示或构建依据。
该示例项目部署了以下资源:
-
一个 AWS Lambda 函数
-
一个 Amazon S3 存储桶
-
AWS Step Functions 状态机
-
相关 AWS Identity and Access Management (IAM) 角色
下图显示了预处理数据并训练机器学习模型示例项目的工作流图:
-
-
选择使用模板继续进行选择。
-
请执行以下操作之一:
-
如果您选择构建依据,Step Functions 将为您选择的示例项目创建工作流原型。Step Functions 不会部署工作流定义中列出的资源。
在 Workflow Studio 的设计模式下,从状态浏览器中拖放状态,继续构建工作流原型。或者切换到代码模式,该模式提供了一个类似于 VS Code 的集成代码编辑器,用于在 Step Functions 控制台中更新状态机的 Amazon States Language(ASL)定义。有关使用 Workflow Studio 构建状态机的更多信息,请参阅使用 Workflow Studio。
重要
请记住,在运行工作流之前,为示例项目中使用的资源更新占位符 Amazon 资源名称 (ARN)。
-
如果您选择了 “运行演示”,Step Functions 将创建一个只读示例项目,该项目使用 AWS CloudFormation 模板将该模板中列出的 AWS 资源部署到您的 AWS 账户。
提示
要查看示例项目的状态机定义,请选择代码。
准备就绪后,选择部署并运行以部署示例项目并创建资源。
创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。在部署资源时,您可以打开 CloudFormation 堆栈 ID 链接以查看正在配置哪些资源。
创建示例项目中的所有资源后,您可以在状态机页面上看到新的示例项目。
重要
CloudFormation 模板中使用的每项服务都可能收取标准费用。
-
第 2 步:运行状态机
-
在状态机页面上,选择您的示例项目。
-
在示例项目页面上,选择启动执行。
-
在启动执行对话框中,执行以下操作:
-
(可选)要识别您的执行,您可以在名称框中为其指定一个名称。默认情况下,Step Functions 会自动生成一个唯一的执行名称。
注意
Step Functions 允许您为状态机、执行和活动创建名称,以及包含非 ASCII 字符的标签。这些非 ASCII 名称不适用于亚马逊。 CloudWatch为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。
-
(可选)在输入框中,以 JSON 格式输入输入值以便运行工作流。
如果您选择运行演示,则无需提供任何执行输入。
注意
如果您部署的演示项目包含预先填充的执行输入数据,请使用该输入来运行状态机。
-
选择启动执行。
-
Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。
要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅“执行详细信息”页面 – 界面概述。
-
示例状态机代码
此示例项目中的状态机 AWS Lambda 通过将参数直接传递给这些资源进行 SageMaker 集成,并使用 Amazon S3 存储桶作为训练数据源和输出。
浏览此示例状态机,了解 Step Functions 如何控制 Lambda 和。 SageMaker
有关 AWS Step Functions 如何控制其他 AWS 服务的更多信息,请参阅与其他服务 AWS Step Functions 一起使用。
{
"StartAt": "Generate dataset",
"States": {
"Generate dataset": {
"Resource": "arn:aws:lambda:sa-east-1:1234567890:function:FeatureTransform-LambaForDataGeneration-17M8LX7IO9LUW",
"Type": "Task",
"Next": "Standardization: x' = (x - x̄) / σ"
},
"Standardization: x' = (x - x̄) / σ": {
"Resource": "arn:aws:states:::sagemaker:createProcessingJob.sync",
"Parameters": {
"ProcessingResources": {
"ClusterConfig": {
"InstanceCount": 1,
"InstanceType": "ml.m5.xlarge",
"VolumeSizeInGB": 10
}
},
"ProcessingInputs": [
{
"InputName": "input-1",
"S3Input": {
"S3Uri": "s3://featuretransform-bucketforcodeanddata-1jn1le6gadwfz/input/raw.csv",
"LocalPath": "/opt/ml/processing/input",
"S3DataType": "S3Prefix",
"S3InputMode": "File",
"S3DataDistributionType": "FullyReplicated",
"S3CompressionType": "None"
}
},
{
"InputName": "code",
"S3Input": {
"S3Uri": "s3://featuretransform-bucketforcodeanddata-1jn1le6gadwfz/code/transform.py",
"LocalPath": "/opt/ml/processing/input/code",
"S3DataType": "S3Prefix",
"S3InputMode": "File",
"S3DataDistributionType": "FullyReplicated",
"S3CompressionType": "None"
}
}
],
"ProcessingOutputConfig": {
"Outputs": [
{
"OutputName": "train_data",
"S3Output": {
"S3Uri": "s3://featuretransform-bucketforcodeanddata-1jn1le6gadwfz/train",
"LocalPath": "/opt/ml/processing/output/train",
"S3UploadMode": "EndOfJob"
}
}
]
},
"AppSpecification": {
"ImageUri": "737474898029.dkr.ecr.sa-east-1.amazonaws.com/sagemaker-scikit-learn:0.20.0-cpu-py3",
"ContainerEntrypoint": [
"python3",
"/opt/ml/processing/input/code/transform.py"
]
},
"StoppingCondition": {
"MaxRuntimeInSeconds": 300
},
"RoleArn": "arn:aws:iam::1234567890:role/SageMakerAPIExecutionRole-AIDACKCEVSQ6C2EXAMPLE",
"ProcessingJobName.$": "$$.Execution.Name"
},
"Type": "Task",
"Next": "Train model (XGBoost)"
},
"Train model (XGBoost)": {
"Resource": "arn:aws:states:::sagemaker:createTrainingJob.sync",
"Parameters": {
"AlgorithmSpecification": {
"TrainingImage": "855470959533.dkr.ecr.sa-east-1.amazonaws.com/xgboost:latest",
"TrainingInputMode": "File"
},
"OutputDataConfig": {
"S3OutputPath": "s3://featuretransform-bucketforcodeanddata-1jn1le6gadwfz/models"
},
"StoppingCondition": {
"MaxRuntimeInSeconds": 86400
},
"ResourceConfig": {
"InstanceCount": 1,
"InstanceType": "ml.m5.xlarge",
"VolumeSizeInGB": 30
},
"RoleArn": "arn:aws:iam::1234567890:role/SageMakerAPIExecutionRole-AIDACKCEVSQ6C2EXAMPLE",
"InputDataConfig": [
{
"DataSource": {
"S3DataSource": {
"S3DataDistributionType": "ShardedByS3Key",
"S3DataType": "S3Prefix",
"S3Uri": "s3://featuretransform-bucketforcodeanddata-1jn1le6gadwfz"
}
},
"ChannelName": "train",
"ContentType": "text/csv"
}
],
"HyperParameters": {
"objective": "reg:logistic",
"eval_metric": "rmse",
"num_round": "5"
},
"TrainingJobName.$": "$$.Execution.Name"
},
"Type": "Task",
"End": true
}
}
}
有关在将 Step Functions 与其他 AWS 服务一起使用时如何配置 IAM 的信息,请参阅集成服务的 IAM 策略。
IAM 示例
示例项目生成的这些示例 AWS Identity and Access Management (IAM) 策略包括执行状态机和相关资源所需的最低权限。我们建议在您的 IAM 策略中仅包含这些必需的权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"cloudwatch:PutMetricData",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:DescribeLogStreams",
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket",
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
以下策略允许 Lambda 函数使用示例数据为 Amazon S3 存储桶添加种子。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::featuretransform-bucketforcodeanddata-1jn1le6gadwfz/*",
"Effect": "Allow"
}
]
}
有关在将 Step Functions 与其他 AWS 服务一起使用时如何配置 IAM 的信息,请参阅集成服务的 IAM 策略。