预处理数据和训练机器学习模型 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

预处理数据和训练机器学习模型

此示例项目演示如何使用 SageMaker 和Amazon Step Functions来预处理数据和训练机器学习模型。此示例项目创建以下内容:

  • Amazon Lambda 函数

  • Amazon Simple Storage Service (Amazon S3) 存储桶

  • Amazon Step Functions 状态机

  • 相关Amazon Identity and Access Management(IAM) 角色

在此项目中,Step Functions 使用 Lambda 函数为 Amazon S3 存储桶提供测试数据集和 Python 脚本进行数据处理。然后,它训练机器学习模型并使用SageMaker 服务集成

有关 SageMaker 和 Step Functions 服务集成的更多信息,请参阅以下内容:

注意

此示例项目可能会产生费用。

为新 Amazon 用户提供了免费使用套餐。在此套餐中,低于某种使用水平的服务是免费的。有关 的更多信息Amazon成本和免费套餐,请参阅SageMaker 定价

创建状态机并预置资源

  1. 打开Step Functions 控制台,然后选择创建状态机

  2. 选择示例项目,然后选择预处理数据和训练机器学习模型

    此时将显示状态机 Code (代码)Visual Workflow (可视工作流程)

    
            训练模型工作流程。
  3. 选择 Next

    此时将显示 Deploy resources (部署资源) 页面,其中列出了将创建的资源。对于本示例项目,资源包括:

    • Lambda 函数

    • Amazon S3 存储桶

    • A Step Functions 状态机

    • 相关 IAM 角色

  4. 选择 Deploy Resources (部署资源)

    注意

    创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。当显示 Deploy resources (部署资源) 页面时,您可打开 Stack ID (堆栈 ID) 链接以查看正在预置的资源。

启动新的执行

  1. 打开Step Functions 控制台

  2. 在存储库的状态机页面上,选择特点转型国家机械状态机,然后选择启动执行

  3. New execution 页面上,输入执行名称 (可选),然后选择 Start Execution (开始执行)

  4. (可选)为了帮助识别您的执行,您可以在输入执行名称。如果未输入 ID,Step Functions 将自动生成一个唯一 ID。

    注意

    Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用 Amazon CloudWatch。要确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。

  5. (可选)转到 Step Functions 上新创建的状态机控制面板,然后选择新执行

  6. 执行完成后,您可以在 Visual workflow (可视工作流) 上选择状态,并浏览 Step details (步骤详细信息) 下的 Input (输入)Output (输出)

示例状态机代码

此示例项目中的状态机与 SageMaker 和Amazon Lambda通过将参数直接传递给这些资源来将参数直接传递给这些资源,并且使用 Amazon S3 存储桶来训练数据源和输出。

浏览此示例状态机以了解 Step Functions 如何控制 Lambda 和 SageMaker。

有关 Amazon Step Functions 如何控制其他 Amazon 服务的更多信息,请参阅将 Amazon 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 与其他Amazon服务,请参阅集成服务的 IAM 策略

IAM 示例

这些示例Amazon 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 与其他Amazon服务,请参阅集成服务的 IAM 策略