SageMaker で機械学習モデルのハイパーパラメータをチューニングする
このサンプルプロジェクトでは、SageMaker を使用して機械学習モデルのハイパーパラメータをチューニングし、テストデータセットをバッチ変換する方法のデモを行います。
このプロジェクトでは、Step Functions は Lambda 関数を使用して Amazon S3 バケットにテストデータセットをシードします。次に、[SageMaker service integration] (SageMaker サービス統合) を使用してハイパーパラメータチューニングジョブを作成します。次に、Lambda 関数を使用してデータパスの抽出、チューニングモデルの保存、モデル名の抽出を行い、バッチ変換ジョブを実行して SageMaker で推論を実行します。
SageMaker と Step Functions サービス統合の詳細については、以下を参照してください。
注記
このサンプルプロジェクトでは、料金が発生する場合があります。
AWS の新規ユーザーには、無料利用枠があります。この枠では、サービスを利用しても一定のレベル以下であれば無料です。AWS のコストと無料利用枠の詳細については、「SageMaker の料金
ステップ 1: ステートマシンを作成する
-
Step Functions コンソール
を開き、[ステートマシンの作成] を選択します。 -
検索ボックスに
Tune a machine learning model
と入力し、返された検索結果から [機械学習モデルをチューニング] を選択します。 -
[次へ] を選択して続行します。
-
[デモの実行] を選択して読み取り専用ですぐにデプロイできるワークフローを作成するか、[その上に構築する] を選択して編集可能なステートマシン定義を作成し、構築した後にデプロイできます。
このサンプルプロジェクトは、以下のリソースをデプロイします。
-
3 つの AWS Lambda 関数
-
1 つの Amazon Simple Storage Service (Amazon S3) バケット
-
AWS Step Functions ステートマシン
-
関連 AWS Identity and Access Management (IAM) ロール
以下のイメージは、[機械学習モデルをチューニング] サンプルプロジェクトのワークフローグラフを示しています。
-
-
[テンプレートの使用] を選択して選択を続行します。
次のステップは、前の選択によって異なります。
-
[デモの実行] – AWS CloudFormation で AWS アカウントにデプロイされたリソースを使用して読み取り専用プロジェクトを作成する前に、ステートマシンを確認できます。
ステートマシン定義を表示し、準備ができたら、[デプロイと実行] を選択してプロジェクトをデプロイし、リソースを作成します。
デプロイには、リソースとアクセス許可の作成に最大 10 分かかる場合があります。スタック ID リンクを使用して、AWS CloudFormation の進行状況をモニタリングできます。
デプロイが完了すると、コンソールに新しいステートマシンが表示されます。
-
[その上に構築する] – ワークフロー定義を確認して編集できます。カスタムワークフローの実行を試みる前に、サンプルプロジェクト内のプレースホルダーの値を設定する必要がある場合があります。
注記
アカウントにデプロイされたサービスには、Standard 料金が適用される場合があります。
ステップ 2: ステートマシンを実行する
-
[ステートマシン] ページで、サンプルプロジェクトを選択します。
-
サンプルプロジェクトページで、[実行を開始] を選択します。
-
[実行を開始] ダイアログボックスで、以下の操作を行います。
-
(オプション) 生成されたデフォルトを上書きするカスタム実行名を入力します。
非 ASCII 名とログ記録
Step Functions では、ステートマシン、実行、アクティビティ、ラベルに、ASCII 以外の文字を含む名前を使用できます。このような文字は Amazon CloudWatch では機能しないため、CloudWatch でメトリクスを追跡できるように ASCII 文字のみを使用することをお勧めします。
-
(オプション) [入力] ボックスに、入力値を JSON として入力します。デモを実行している場合は、このステップをスキップできます。
-
[実行のスタート] を選択します。
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
}
}
}
他の AWS のサービスで Step Functions を使用する時に 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
状態のTrainingJobDefinition
フィールドおよび 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:::amzn-s3-demo-bucket/*",
"Effect": "Allow"
},
{
"Action": [
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
"Effect": "Allow"
}
]
}
次の IAM ポリシー では、Amazon S3 バケットにサンプルデータをシードすることを Lambda 関数に許可します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
"Effect": "Allow"
}
]
}
他の AWS のサービスで Step Functions を使用する時に IAM を設定する方法の情報については、「Step Functions が統合サービスの IAM ポリシーを生成する方法」を参照してください。