Skip to content

Latest commit

 

History

History
112 lines (90 loc) · 5.16 KB

README.md

File metadata and controls

112 lines (90 loc) · 5.16 KB

AWS Lambda Model Evaluation

Python 3.12 🚧 Bump version 🚀 Push Docker image to AWS ECR 🧹 Run linter Code style: black

A lambda to invoke an AWS SageMaker model endpoint with test data stored within an S3 Bucket. For analyzing a dataset to generate baseline constraints. Allowing for monitoring machine learning (ML) model quality to determine if new model predictions are accurate or not, additionally detect changes in properties.

This repository does not create the AWS Simple Queue Service, this is created via Terraform found here terraform-aws-machine-learning-pipeline. Additionally, data uploaded for ML purposes can be found here ml-data-copy-to-aws-s3. For more details on the entire flow and how this lambda is deployed, see aws-automlops-serverless-deployment.

Flowchart

The diagram below demonstrates what happens when the lambda is trigger, when a new message is placed on the SQS.

graph LR
  S0(Start)
  T1(Check endpoint is available)
  T2(Configure Predictor for endpoint)
  T3(Pull test dataset from S3 Bucket)
  T4(Use test data as payload to invoke endpoint)
  T5(Save confusion matrix to S3 Bucket)
  E0(End)

  S0-->T1
  T1-->T2
  T2-->T3
  T3-->T4
  T4-->T5
  T5-->E0
Loading

Notice

An assumption has been made that a serverless endpoint has been created for inference. And not able to make of DataCaptureConfig, this is because the configuration is not supported for serverless endpoint(s) and will have to rely on CloudWatch logs as per official documentation.

A workaround is to invoke the endpoint and create a confusion matrix with the predicated vs actuals, this is then uploaded to another bucket as in Markdown format.

Development

Dependencies

Usage

  1. Build the docker image locally:

    docker build --no-cache -t aws_lambda:local .
  2. Run the docker image built:

    docker run --platform linux/amd64 -p 9000:8080 aws_lambda:local
  3. Send an event to the lambda via curl:

    curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{<EXPAND_BELOW_AND_REPLACE_WITH_JSON_BELOW>}'
    Example AWS SQS event received ```json { "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\"endpointName\": \"example\", \"testDataS3BucketName\": \"example-bucket\", \"testDataS3Key\" : \"test-data.csv\"}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-1:111122223333:my-queue", "awsRegion": "us-east-1" } ] } ```

GitHub Action (CI/CD)

The GitHub Action "🚀 Push Docker image to AWS ECR" will check out the repository and push a docker image to the chosen AWS ECR using configure-aws-credentials action. The following repository secrets need to be set:

Secret Description
AWS_REGION The AWS Region.
AWS_ACCOUNT_ID The AWS account ID.
AWS_ECR_REPOSITORY The AWS ECR repository name.