이 샘플 프로젝트에서는 SageMaker를 사용하여 기계 학습 모델의 하이퍼파라미터를 튜닝하고 테스트 데이터 세트를 배치로 변환하는 방법을 보여줍니다.
이 프로젝트에서 Step Functions는 Lambda 함수를 사용하여 테스트 데이터 세트로 Amazon S3 버킷을 시딩합니다. 그런 다음 SageMaker 서비스 통합을 사용하여 작업을 튜닝하는 하이퍼파라미터를 만듭니다. Lambda 함수를 사용하여 데이터 경로를 추출하고 튜닝 모델을 저장하고 모델 이름을 추출한 다음 배치 변환 작업을 실행하여 SageMaker에서 추론을 수행합니다.
SageMaker 및 Step Functions 서비스 통합에 대한 자세한 내용은 다음을 참조하세요.
참고
이 샘플 프로젝트를 사용할 때 요금이 발생할 수 있습니다.
신규 AWS 사용자는 프리 티어를 사용할 수 있습니다. 이 계층에서 특정 사용 수준 미만의 서비스는 무료입니다. AWS 비용 및 프리 티어에 대한 자세한 내용은 SageMaker 요금
1단계: 상태 시스템 만들기
-
Step Functions 콘솔
을 열고 상태 시스템 생성을 선택합니다. -
검색 상자에
Tune a machine learning model
을 입력한 다음 반환된 검색 결과에서 기계 학습 모델 조정을 선택합니다. -
다음을 선택하여 계속 진행합니다.
-
데모 실행을 선택하여 읽기 전용의 즉시 배포 가능한 워크플로를 생성하거나, 이를 기반으로 구축을 선택하여 나중에 배포할 수 있는 편집 가능한 상태 시스템 정의를 생성합니다.
이 샘플 프로젝트는 다음 리소스를 배포합니다.
-
3개의 AWS Lambda 함수
-
Amazon Simple Storage Service(S3) 버킷
-
AWS Step Functions 상태 머신
-
관련 AWS Identity and Access Management(IAM) 역할
다음 이미지에서는 기계 학습 모델 조정 샘플 프로젝트의 워크플로 그래프를 보여줍니다.
-
-
템플릿 사용을 선택하여 계속 선택합니다.
다음 단계는 이전 선택에 따라 달라집니다.
-
데모 실행 - AWS CloudFormation이 AWS 계정에 배포한 리소스로 읽기 전용 프로젝트를 생성하기 전에 상태 시스템을 검토할 수 있습니다.
상태 시스템 정의를 볼 수 있으며 준비가 되면 배포 및 실행을 선택하여 프로젝트를 배포하고 리소스를 생성합니다.
배포는 리소스 및 권한을 생성하는 데 최대 10분이 걸릴 수 있습니다. 스택 ID 링크를 사용하여 AWS CloudFormation의 진행 상황을 모니터링할 수 있습니다.
배포가 완료되면 콘솔에 새 상태 시스템이 표시됩니다.
-
이를 기반으로 구축 - 워크플로 정의를 검토하고 편집할 수 있습니다. 사용자 지정 워크플로 실행을 시도하기 전에 샘플 프로젝트의 자리 표시자에 대한 값을 설정해야 할 수 있습니다.
참고
계정에 배포된 서비스에 표준 요금이 적용될 수 있습니다.
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 정책을 통해 Lambda 함수에서 샘플 데이터를 사용하여 Amazon S3 버킷을 시딩할 수 있습니다.
{
"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 정책을 생성하는 방법 섹션을 참조하세요.