Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit

Project 1 (Part 2): IaaS

[CSE 546] [SPRING_2024] Cloud Computing

Due by 03/15/2024 11:59:59 pm

Summary

In Part 2 of Project 1, we will complete the development of the elastic face recognition application using the IaaS resources from AWS. We will implement the App Tier and Data Tier of our multi-tiered cloud application, use a machine learning model to perform face recognition and implement autoscaling to allow the App Tier to dynamically scale on demand.

Description

We will strictly follow the architecture below to develop the application.

Web Tier

1.   You MUST use the same web tier  EC2 instance from Part 1 of the project. Must use the same elastic IP address and web server port as Part 1 of the project.

2.   It should take images received from users as input and forward it to the App Tier for model inference. It should also return the recognition result from the App Tier as output to the users. The input from each request is a .jpg file, and the output in each response is the recognition result.  Find more details below.

Input:

●   The key to the HTTP payload MUST be defined as “inputFile” and should be used as the same. In the case of a Python backend, it denotes a standard Python file object.

●   For example, the user uploads an image named “test_00.jpg ”.

●   Use the provided workload generator to generate requests to your Web Tier. Output:

●   The Web Tier will handle HTTP POST requests to the root endpoint ("/").

●   The output MUST be in plaintext, and the format <filename>:<classification_results>

●   For the above example request, the output should be “test_00:Paul” in plaintext.

●   You need to implement the handling of concurrent requests in your Web Tier.

To facilitate the testing, a standard face dataset and the expected recognition output of each image are provided to you at

Input: visa-lab/CSE546-Cloud-Computing/face_images_1000.zip

Output: visa-lab/CSE546-Cloud-Computing/classification_face_images_1000.csv   

3.   The   Web   Tier   uses   only   one   instance.   You   MUST   name   your   web-tier   instance

web-instance

4.   The Web Tier sends requests to the App Tier and receives results using two SQS Queues. You MUST follow the following naming convention in naming your S3 Buckets:

a.   Request Queue: <ASU ID>-req-queue

b.   Response Queue: <ASU ID>-resp-queue

For   example,   if   your    ASU    ID    is    “12345678910”,   your    queue    names    will   be 12345678910-req-queue and 12345678910-resp-queue

5.   The  Web Tier also  runs the autoscaling controller, which determines how to scale the App Tier.

App Tier

1.   The  App Tier will use the provided deep learning model for model inference. The deep learning model code is available here. The first step is to create an AMI, which will be used to launch App Tier instances.

a.   Launch a base EC2 instance. You can use the AWS Linux or Ubuntu AMI.

b.   Install the required package on the instance using the following command.

pip3 install torch torchvision torchaudio --index-url

https://download.pytorch.org/whl/cpu

c.   Copy the provided deep learning model code and model weights folder to the EC2 instance using scp.

d.   Refer to the README.md on how to use the deep learning model code.

e.   Create an AMI using this  EC2 instance, following the instructions here. Now, you can use this AMI to create your App Tier instances.  You       MUST      name      your app-tier instances “app-tier-instance-<instance#>

2.   The  App Tier  should automatically scale out when the  request demand increases and automatically scale in when the demand drops. The number of App Tier instances should be  0  when  there  are   no  requests  being  processed  or  waiting  to  be  processed.  The number of App Tier instances can scale to at most 20 because we have limited resources from the free tier.

Data Tier

1.   All  the  inputs  (images)  and  outputs  (recognition results) should be stored in separate buckets on S3 for persistence.

2.   S3 stores all the objects as key-value  pairs. For the Input bucket, each object's key is the input  file's  name,  e.g.,  test_00.jpg,  and  the  value  is  the  image  file.  For  the  Output bucket, the key is the image name (e.g., test_00), and the value is the classification result (e.g., “ Paul”).

3.   You MUST follow the following naming convention in naming your S3 Buckets 

a.   Input Bucket: <ASU ID>-in-bucket

b.   Output Bucket: <ASU ID>-out-bucket

For example, if your ASU ID is “12345678910”,  your bucket names will be 12345678910-in-bucket and 12345678910-out-bucket

Testing & Grading

●   Use the provided workload generator to test your app thoroughly. Check the following:

○   The output of the workload generator is correct.

○   The contents in the S3 buckets are correct;

○   While processing the workload, the number of EC2 instances is correct.

○   All   the   requests   are  processed  within  a  reasonable  amount  of  time.   As  a reference  point,  for  a  workload  of  100  concurrent  requests  using  the  TAs’ implementation  of  the   project,  completed  within  80  seconds  (average  of  5  iterations).

●   Test your application using the provided workload generator and gradingscript. If they     fail to execute, you will receive 0 points.  Refer to the Readme on how to use the grading script.

●   We will use the same Grading  IAM user credentials we collected in Part 1 of the project. You MUST update the Grading IAM user with the following permissions:

。 AmazonEC2ReadOnlyAccess

。 AmazonS3FullAccess

。 AmazonSQSFullAccess

●   Make  sure  you  test  everything   using  the  Grading   IAM  Credentials   before  making  a submission.

●   To facilitate testing, you MUST use only the resources from the US-East-1 region.

●   The grading will be done using the workload generator and gradingscript and following the rubrics below: