在 SageMaker 中调整机器学习模型的超参数 - AWS Step Functions

在 SageMaker 中调整机器学习模型的超参数

此样本项目演示使用 SageMaker 调整机器学习模型的超参数和批量转换测试数据集。

在此项目中,Step Functions 使用 Lambda 函数通过测试数据集为 Amazon S3 存储桶添加种子。然后,它使用 SageMaker 服务集成来创建超参数调整作业。然后,它使用一个 Lambda 函数来提取数据路径,保存调整模型,提取模型名称,然后运行批处理转换作业以在 SageMaker 中进行推理。

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

注意

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

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

第 1 步:创建状态机

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

  2. 在搜索框中键入 Tune a machine learning model,然后从返回的搜索结果中选择调整机器学习模型

  3. 选择下一步以继续。

  4. 选择运行演示来创建只读且随时可以部署的工作流程,或者选择构建依据来创建可编辑的状态机定义,您可以在该状态机定义的基础上构建并稍后部署。

    该示例项目部署了以下资源:

    • 三个 AWS Lambda 函数

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

    • 一个 AWS Step Functions 状态机

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

    下图显示了调整机器学习模型示例项目的工作流图:

    调整机器学习模型示例项目的工作流图。
  5. 选择使用模板继续进行选择。

后续步骤取决于之前的选择:

  1. 运行演示:可以先查看状态机,然后使用由 AWS CloudFormation 部署到您的 AWS 账户的资源来创建只读项目。

    可以查看状态机定义,准备就绪后,选择部署并运行来部署项目并创建资源。

    部署可能需要最长 10 分钟来创建资源和权限。可以在 AWS CloudFormation 中使用堆栈 ID 链接来监控进度。

    部署完成后,应该在控制台中看到新的状态机。

  2. 构建依据:可以查看和编辑工作流程定义。在尝试运行自定义工作流程之前,可能需要为示例项目中的占位符设置值。

注意

部署到您的账户的服务可能会收取标准费用。

第 2 步:运行状态机

  1. 状态机页面上,选择您的示例项目。

  2. 在示例项目页面上,选择启动执行

  3. 启动执行对话框中,执行以下操作:

    1. (可选)输入自定义执行名称,以便覆盖生成的默认执行名称。

      非 ASCII 名称和日志记录

      Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符不适用于 Amazon CloudWatch,因此我们建议您仅使用 ASCII 字符,这样您就可以在 CloudWatch 中跟踪指标。

    2. (可选)在输入框中,以 JSON 格式输入输入值。如果您正在运行演示,则可以跳过此步骤。

    3. 选择启动执行

    Step Functions 控制台将引导您进入执行详细信息 页面,在该页面中,您可以在图表视图中选择状态来浏览步骤详细信息窗格中的相关信息。

示例状态机代码

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

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

有关 AWS Step Functions 如何控制其他 AWS 服务的更多信息,请参阅将服务与 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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/csv/train.csv" } }, "ChannelName": "train", "ContentType": "text/csv" }, { "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/csv/test.csv" } } }, "TransformOutput": { "S3OutputPath": "s3://amzn-s3-demo-bucket/output" }, "TransformResources": { "InstanceCount": 1, "InstanceType": "ml.m4.xlarge" }, "TransformJobName.$": "$.body.jobName" }, "End": true } } }

有关在将 Step Functions 与其他 AWS 服务一起使用时如何配置 IAM 的信息,请参阅Step Functions 如何为集成服务生成 IAM 策略

IAM 示例

示例项目生成的这些示例 AWS 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 策略在 HyperparameterTuning 状态的 TrainingJobDefinitionHyperparameterTuning 字段中引用。

{ "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:::amzn-s3-demo-bucket/*", "Effect": "Allow" }, { "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Effect": "Allow" } ] }

以下 IAM 策略允许 Lambda 函数使用示例数据为 Amazon S3 存储桶添加种子。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Effect": "Allow" } ] }

有关在将 Step Functions 与其他 AWS 服务一起使用时如何配置 IAM 的信息,请参阅Step Functions 如何为集成服务生成 IAM 策略