本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
调整机器学习模型
此样本项目演示使用 SageMaker 调整机器学习模型的超参数和批量转换测试数据集。此示例项目创建以下内容:
-
三个 Amazon Lambda 函数
-
Amazon Simple Storage Service (Amazon S3) 存储桶
-
Amazon Step Functions 状态机
-
相关Amazon Identity and Access Management(IAM) 角色角色
在此项目中,Step Functions Functions 使用 Lambda 函数通过测试数据集为 Amazon S3 存储桶添加种子。然后,它使用 SageMaker 服务集成来创建超参数调整作业。然后,它使用 Lambda 函数来提取数据路径,保存调整模型,提取模型名称,然后运行批处理转换作业以在SageMaker.
有关 的更多信息SageMaker和 Step Functions 服务集成,请参阅以下内容:
此示例项目可能会产生费用。
为新 Amazon 用户提供了免费使用套餐。在此套餐中,低于某种使用水平的服务是免费的。有关 Amazon 成本和免费套餐的更多信息,请参阅 SageMaker 定价
创建状态机并预置资源
-
打开Step Functions 操作
然后选择创建状态机. -
选择 Sample Projects (示例项目),然后选择 Tune a machine learning model (调整机器学习模型)。
此时将显示状态机 Code (代码) 和 Visual Workflow (可视工作流程)。
-
请选择 Next (下一步)。
此时将显示 Deploy resources (部署资源) 页面,其中列出了将创建的资源。对于本示例项目,资源包括:
-
三个 Lambda 函数
-
一个 Amazon S3 Bucket
-
Step Functions 状态机
-
相关 IAM 角色
-
-
选择 Deploy Resources (部署资源)。
注意 创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。当显示 Deploy resources (部署资源) 页面时,您可打开 Stack ID (堆栈 ID) 链接以查看正在预置的资源。
启动新的执行
-
在存储库的状态机页面上,选择HyperparamTuningAndBatchTransformState机器示例项目创建的状态机,然后选择开始执行.
-
在 New execution 页面上,输入执行名称 (可选),然后选择 Start Execution (开始执行)。
(可选)要识别您的执行,您可以在名称。默认情况下,Step Functions 会自动生成唯一的执行名称。
注意 Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于亚马逊CloudWatch. 为了确保你可以跟踪CloudWatch指标,请选择仅使用 ASCII 字符的名称。
-
(可选)转到 Step Functions Functions 上新创建的状态机控制面板,然后选择新的执行.
-
执行完成后,您可以在 Visual workflow (可视工作流) 上选择状态,并浏览 Step details (步骤详细信息) 下的 Input (输入) 和 Output (输出)。
示例状态机代码
此示例项目中的状态机与SageMaker和Amazon Lambda通过将参数直接传递给这些资源,并且使用 Amazon S3 存储桶来训练数据源和输出。
浏览此示例状态机以了解 Step Functions 如何控制 Lambda 和SageMaker.
有关 Amazon Step Functions 如何控制其他 Amazon 服务的更多信息,请参阅将 Amazon Step Functions 与其他服务一起使用。
{
"StartAt": "Generate Training Dataset",
"States": {
"Generate Training Dataset": {
"Resource": "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageMa-LambdaForDataGeneration-1TF67BUE5A12U",
"Type": "Task",
"Next": "HyperparameterTuning (XGBoost)"
},
"HyperparameterTuning (XGBoost)": {
"Resource": "arn:aws:states:::sagemaker:createHyperParameterTuningJob.sync",
"Parameters": {
"HyperParameterTuningJobName.$": "$.body.jobName",
"HyperParameterTuningJobConfig": {
"Strategy": "Bayesian",
"HyperParameterTuningJobObjective": {
"Type": "Minimize",
"MetricName": "validation:rmse"
},
"ResourceLimits": {
"MaxNumberOfTrainingJobs": 2,
"MaxParallelTrainingJobs": 2
},
"ParameterRanges": {
"ContinuousParameterRanges": [{
"Name": "alpha",
"MinValue": "0",
"MaxValue": "1000",
"ScalingType": "Auto"
},
{
"Name": "gamma",
"MinValue": "0",
"MaxValue": "5",
"ScalingType": "Auto"
}
],
"IntegerParameterRanges": [{
"Name": "max_delta_step",
"MinValue": "0",
"MaxValue": "10",
"ScalingType": "Auto"
},
{
"Name": "max_depth",
"MinValue": "0",
"MaxValue": "10",
"ScalingType": "Auto"
}
]
}
},
"TrainingJobDefinition": {
"AlgorithmSpecification": {
"TrainingImage": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest",
"TrainingInputMode": "File"
},
"OutputDataConfig": {
"S3OutputPath": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/models"
},
"StoppingCondition": {
"MaxRuntimeInSeconds": 86400
},
"ResourceConfig": {
"InstanceCount": 1,
"InstanceType": "ml.m4.xlarge",
"VolumeSizeInGB": 30
},
"RoleArn": "arn:aws:iam::012345678912:role/StepFunctionsSample-SageM-SageMakerAPIExecutionRol-1MNH1VS5CGGOG",
"InputDataConfig": [{
"DataSource": {
"S3DataSource": {
"S3DataDistributionType": "FullyReplicated",
"S3DataType": "S3Prefix",
"S3Uri": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/csv/train.csv"
}
},
"ChannelName": "train",
"ContentType": "text/csv"
},
{
"DataSource": {
"S3DataSource": {
"S3DataDistributionType": "FullyReplicated",
"S3DataType": "S3Prefix",
"S3Uri": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/csv/validation.csv"
}
},
"ChannelName": "validation",
"ContentType": "text/csv"
}],
"StaticHyperParameters": {
"precision_dtype": "float32",
"num_round": "2"
}
}
},
"Type": "Task",
"Next": "Extract Model Path"
},
"Extract Model Path": {
"Resource": "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelPath-V0R37CVARUS9",
"Type": "Task",
"Next": "HyperparameterTuning - Save Model"
},
"HyperparameterTuning - Save Model": {
"Parameters": {
"PrimaryContainer": {
"Image": "433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest",
"Environment": {},
"ModelDataUrl.$": "$.body.modelDataUrl"
},
"ExecutionRoleArn": "arn:aws:iam::012345678912:role/StepFunctionsSample-SageM-SageMakerAPIExecutionRol-1MNH1VS5CGGOG",
"ModelName.$": "$.body.bestTrainingJobName"
},
"Resource": "arn:aws:states:::sagemaker:createModel",
"Type": "Task",
"Next": "Extract Model Name"
},
"Extract Model Name": {
"Resource": "arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelName-8FUOB30SM5EM",
"Type": "Task",
"Next": "Batch transform"
},
"Batch transform": {
"Type": "Task",
"Resource": "arn:aws:states:::sagemaker:createTransformJob.sync",
"Parameters": {
"ModelName.$": "$.body.jobName",
"TransformInput": {
"CompressionType": "None",
"ContentType": "text/csv",
"DataSource": {
"S3DataSource": {
"S3DataType": "S3Prefix",
"S3Uri": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/csv/test.csv"
}
}
},
"TransformOutput": {
"S3OutputPath": "s3://stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/output"
},
"TransformResources": {
"InstanceCount": 1,
"InstanceType": "ml.m4.xlarge"
},
"TransformJobName.$": "$.body.jobName"
},
"End": true
}
}
}
有关在将 Step Functions 与其他一起使用时如何配置 IAM 的信息。Amazon服务,请参阅集成服务的 IAM 政策.
IAM 示例
这些示例Amazon Identity and Access Management示例项目生成的 (IAM) 策略包括执行状态机和相关资源所需的最小权限。我们建议您在 IAM 策略中仅包含这些必需的权限。
以下 IAM 策略附加到状态机,并允许状态机执行访问必要的访问。SageMaker、Lambda 和 Amazon S3 资源。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sagemaker:CreateHyperParameterTuningJob",
"sagemaker:DescribeHyperParameterTuningJob",
"sagemaker:StopHyperParameterTuningJob",
"sagemaker:ListTags",
"sagemaker:CreateModel",
"sagemaker:CreateTransformJob",
"iam:PassRole"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageMa-LambdaForDataGeneration-1TF67BUE5A12U",
"arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelPath-V0R37CVARUS9",
"arn:aws:lambda:us-west-2:012345678912:function:StepFunctionsSample-SageM-LambdaToExtractModelName-8FUOB30SM5EM"
],
"Effect": "Allow"
},
{
"Action": [
"events:PutTargets",
"events:PutRule",
"events:DescribeRule"
],
"Resource": [
"arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTrainingJobsRule",
"arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule",
"arn:aws:events:*:*:rule/StepFunctionsGetEventsForSageMakerTuningJobsRule"
],
"Effect": "Allow"
}
]
}
以下 IAM 策略在TrainingJobDefinition
和HyperparameterTuning
字段的字段HyperparameterTuning
状态。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"cloudwatch:PutMetricData",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:DescribeLogStreams",
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"sagemaker:DescribeHyperParameterTuningJob",
"sagemaker:StopHyperParameterTuningJob",
"sagemaker:ListTags"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/*",
"Effect": "Allow"
},
{
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f",
"Effect": "Allow"
}
]
}
以下 IAM政策允许 Lambda 函数使用示例数据为 Amazon S3 存储桶添加种子。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::stepfunctionssample-sagemak-bucketformodelanddata-80fblmdlcs9f/*",
"Effect": "Allow"
}
]
}
有关在将 Step Functions 与其他一起使用时如何配置 IAM 的信息。Amazon服务,请参阅集成服务的 IAM 政策.