- Preprocessing: A SageMaker processing job that processes uncooked information and shops it in an S3 bucket.
- Coaching: A SageMaker coaching job that trains the mannequin utilizing the preprocessed information.
- Analysis: A Lambda perform to guage the educated mannequin.
- Deployment: If the analysis passes, a brand new mannequin is created and deployed to a relentless endpoint utilizing SageMaker’s
updateEndpoint
motion. - Prerequisite: ECR pictures for the preprocessing, coaching, and mannequin deployment phases must be out there and correctly configured in your AWS surroundings.
Take a look at it your self:
- Seek for State Machine.
- Create a brand new State Machine.
- Choose a Clean one.
- Go to the Code part and paste the next json.
{
"Remark": "Simplified MLOps pipeline for classification mannequin",
"StartAt": "Preprocessing",
"States": {
"Preprocessing": {
"Kind": "Activity",
"Useful resource": "arn:aws:states:::sagemaker:createProcessingJob.sync",
"Parameters": {
"ProcessingJobName.$": "States.Format('mlops-preprocessing-job-{}', States.UUID())",
"AppSpecification": {
"ImageUri": "790081601621.dkr.ecr.us-west-2.amazonaws.com/ai-classification-processing-job:newest"
},
"ProcessingResources": {
"ClusterConfig": {
"InstanceCount": 1,
"InstanceType": "ml.m5.giant",
"VolumeSizeInGB": 10
}
},
"Atmosphere": {
"REGION_NAME": "us-west-2",
"SOURCE_BUCKET": "dev-usercontent-4insite",
"DESTINATION_BUCKET": "4insite-ai-images",
"DESTINATION_PREFIX": "dataset-processing-jobs-t"
},
"RoleArn": "arn:aws:iam::790081601621:function/service-role/AmazonSageMaker-ExecutionRole-20240521T205833",
"ProcessingOutputConfig": {
"Outputs": [
{
"OutputName": "output",
"S3Output": {
"S3Uri": "s3://4insite-ai-images/dataset-processing-jobs-t",
"LocalPath": "/opt/ml/processing/output",
"S3UploadMode": "EndOfJob"
}
}
]
}
},
"ResultPath": "$.ProcessingJobOutput",
"Subsequent": "Coaching"
},
"Coaching": {
"Kind": "Activity",
"Useful resource": "arn:aws:states:::sagemaker:createTrainingJob.sync",
"Parameters": {
"TrainingJobName.$": "States.Format('mlops-training-job-{}', States.UUID())",
"AlgorithmSpecification": {
"TrainingImage": "790081601621.dkr.ecr.us-west-2.amazonaws.com/ai-classification-training-job:newest",
"TrainingInputMode": "File"
},
"RoleArn": "arn:aws:iam::790081601621:function/service-role/AmazonSageMaker-ExecutionRole-20240521T205833",
"InputDataConfig": [
{
"ChannelName": "train",
"DataSource": {
"S3DataSource": {
"S3DataType": "S3Prefix",
"S3Uri": "s3://4insite-ai-images/dataset-processing-jobs-t/",
"S3DataDistributionType": "FullyReplicated"
}
}
}
],
"OutputDataConfig": {
"S3OutputPath": "s3://4insite-ai-images/output/"
},
"ResourceConfig": {
"InstanceCount": 1,
"InstanceType": "ml.g4dn.2xlarge",
"VolumeSizeInGB": 30
},
"StoppingCondition": {
"MaxRuntimeInSeconds": 3600
},
"HyperParameters": {
"EPOCHS": "100",
"IMGSZ": "128"
}
},
"ResultPath": "$.trainingResult",
"Subsequent": "Analysis"
},
"Analysis": {
"Kind": "Activity",
"Useful resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "YOUR_EVALUATION_LAMBDA_FUNCTION",
"Payload": {
"TrainingJobOutput.$": "$.trainingResult"
}
},
"ResultPath": "$.evaluationResult",
"Subsequent": "CheckEvaluation"
},
"CheckEvaluation": {
"Kind": "Selection",
"Decisions": [
{
"Variable": "$.evaluationResult.Payload.EvaluationPassed",
"BooleanEquals": true,
"Next": "DeployModel"
}
],
"Default": "FailState"
},
"DeployModel": {
"Kind": "Activity",
"Useful resource": "arn:aws:states:::sagemaker:createModel",
"Parameters": {
"ModelName.$": "States.Format('mlops-model-{}', States.UUID())",
"PrimaryContainer": {
"Picture": "790081601621.dkr.ecr.us-west-2.amazonaws.com/ai-classification-model:newest",
"ModelDataUrl.$": "$.trainingResult.ModelArtifacts.S3ModelArtifacts"
},
"ExecutionRoleArn": "arn:aws:iam::790081601621:function/service-role/AmazonSageMaker-ExecutionRole-20240521T205833"
},
"ResultPath": "$.modelDeploymentResult",
"Subsequent": "UpdateEndpoint"
},
"UpdateEndpoint": {
"Kind": "Activity",
"Useful resource": "arn:aws:states:::sagemaker:updateEndpoint.sync",
"Parameters": {
"EndpointName": "mlops-endpoint",
"EndpointConfigName.$": "States.Format('mlops-endpoint-config-{}', States.UUID())"
},
"Finish": true
},
"FailState": {
"Kind": "Fail",
"Error": "ModelEvaluation.Failed",
"Trigger": "Mannequin didn't meet the required efficiency standards."
}
}
}