This article was published as a part of the Data Science Blogathon.
AWS is a cloud computing service that provides on-demand computing resources for storage, networking, Machine learning, etc on a pay-as-you-go pricing model. AWS is a premier cloud computing platform around the globe, and most organization uses AWS for global networking and data storage. The article is for those Machine learning practitioners who know the model building and even they have deployed some projects on other platforms but want to learn how to deploy on major cloud platforms like AWS.
In the article, our main aim is to learn deployment over AWS, but we will walk through each step from the development of the Machine learning model to deployment over AWS from scratch.
The very first step is building a model. Our main aim is to learn deployment, so I have taken a simple dataset and applied an SVM algorithm that gives a very good accuracy even after trying Random forest and decision trees. If you want, you can optimize the model accordingly.
We pick a very simple dataset about student placement prediction which is a binary classification problem. The dataset contains input columns such as student CGPA, IQ, and Profile score, and based on 3 input columns you have an output column that indicates whether the student will be placed or not in binary form as 0, 1. You can download the dataset using this GitHub link.
Data is simple, and it does not contain any missing values or data is not messy so to save time and learn deployment we load the data and prepare it for model creation.
import numpy as np
import pandas as pd
#Read the Data
df = pd.read_csv('https://raw.githubusercontent.com/Raghavagr/Student-Placement-Predictor/main/students_placement.csv')
#look over sample data
print(df.sample(5))
#separate independent and dependent columns
X = df.drop(columns=['placed'])
y = df['placed']
#train-test-split
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=2)
We first import the SVM model using the scikit-learn library, train it on training data, and test it on test data. After that, we apply the accuracy score as a metric to get the performance of the model which is 93 percent.
from sklearn.metrics import accuracy_score from sklearn.svm import SVC svc = SVC(kernel='rbf') svc.fit(X_train,y_train) y_pred = svc.predict(X_test) print(accuracy_score(y_test,y_pred))
We have to deploy the model to the website, and for this first, we need to convert the model into a certain file. For converting the model into a file, we can use Pickle or Joblib library. It implements protocols for serializing and de-serializing the python objects so that by de-serialize them, you can use them for different purposes. We are using Pickle at this time to dump the model in a pickle file.
import pickle pickle.dump(svc,open('model.pkl','wb'))
First, we have to import the Pickle module, and there is one function named dump where we have to specify two things: objects to be dumped and which file we want to convert.
First, we have to create one project folder where you have to keep the Pickle file. You can open the folder in any python code editor of your choice, whether it can be Pycharm, Spider, or VS code. If you do not know anything about Flask, then you can refer to my Basic Flask article on Analytics Vidhya. We will design a form where we will accept student details, and as students click on submit button, our flask app will accept the details at the backend and pass the details to a model where the model will generate a result that we will display to the student at frontend whether he will get the placement or not.
Designing HTML Form
Create a new folder in your project folder as templates and create a new HTML file in it where we will design an HTML form. I hope that you are a little bit familiar with HTML and if not, then you can refer to any beginner article on the web. We will create 3 input tabs to accept details like student CGPA, IQ, and profile score. And create a button to submit a form that states that on submitting the form, the request is POST and define the action where the form will redirect after submitting that we will handle from the flask app.
{% if result %} {{ result }} {% endif %}
Create a new python file named an app where we define a new Flask app and load the model dump in the pickle file. As we run the server, the app will serve the “/” URL where we have to display the home page which is our HTML Form. Now after submitting it will create a POST request that we have redirected to a “/predict” URL, and at that time we will accept the form data, pass it to the model, and display output using JINJA.
If you open the command prompt and direct to the current working directory and run the below command, then your server will start running and get a localhost URL that you can open in your browser, and the app is running.
python app.py
Now the app is running well but it is currently running on a local system means we can only use this by running a server so to make it available for public users we have to deploy it on the cloud.
The first thing is you should have a requirements file where we specify all the dependencies or libraries that we have used to develop the project. Create a new text file, and the name should be requirements.txt and copy the content as given below.
flask numpy sklearn
Visit the AWS site and create a free-tier account that is valid for 12 months, and you can use popular AWS services to a certain extent. But after using each service, you should terminate and delete all the services to avoid any kind of bill. To create a free-tier account, you must have Mastercard, or Visa Debit card, or a credit card. When you first create an account, it just cuts 2 INR and returns after 3-5 business days for background verification.
EC2 stands for Elastic compute cloud that provides scalable compute capacity in AWS Cloud. You can also use AWS Lambda and AWS Elastic Beanstalk for deploying ML models, but EC2 is very old. You can install software on EC2, and easy to deploy your application. It is nothing but you take a server on the cloud on rent. Open EC2 Dashboard in your management console through the search tab or services. As you open the EC2 dashboard, you will observe how many instances are running. Click on the Launch Instance tab to launch a new EC2 Instance. Now by configuring 6-7 steps, you can launch your new Instance.
Step-1) Choose an Amazon Machine Image (AMI)
The first step is to choose an operating system, for instance, where you have many options. We will choose the operating system that is free-tier eligible, so click on Ubuntu and select the Ubuntu operating system which is free-tier eligible. You can also try any supported version of Linux.
Step-2) Choose Instance Type
The step is crucial, and you do not need to select anything in the step because the default option is already selected as t2.micro, which supports a free-tier account.
step-3) Create Key-Pair
To secure your instance, we have to set a password and key-pair a way to achieve this. Click on create new key pair and enter any name of your choice without space. And click on create-key-pair.
Step-4) Network settings / Configure security group
Under this, we have different network settings but keep all the settings as default and move forward. Your AWS EC2 instance is private to you and secretly kept unless you define to accept the network traffic from what kind of source, so we create a new and default security group.
step-5) Configure storage
Free-tier eligible customers can get up to 30 GB EBS, and a minimum of 8 GB is allotted to you. We have set it to 8GB which is the default.
step-6) Review and Launch
At last, you have a summary of all your configurations so you can have a look and launch an EC2 instance. After that, if you visit the instances tab then our EC2 instance is successfully and running.
WinSCP is used to upload your project files to the server.
Putty is a remote client where by using the SSH key, you take access to your machine. You can open an EC2 command prompt in Putty and install the project dependencies and libraries. To download the putty, visit the official site and download the installer file as per your OS.
Open the WinSCP, and you need to provide the hostname and the key-value pair we have created above. If the file is in PEM format, it will ask you to convert it to PPK format and click on OK. Click on login, and when you are successfully logged in, then you will have 2 parallel screens, where first displays the files of your local system, and the second one is your EC2 instance in a local system. Open the desired project folder and paste each file on the right side (Server folder).
Before Pasting all the files, we need to specify the port and host in the python app file because currently, the app was running in the local file system, but now it will run on the cloud, so edit the suggested changes.
if __name__ == "__main__": app.run(host='0.0.0.0', port=8080)
We will need Putty for this, so open the Putty using the same key-value pair. so one by one, you have to install each library on the EC2 server.
Install PIP using which we can install all the python libraries on AWS EC2. As we successfully install PIP, we can run the pip command to install all the required libraries specified in the requirements file.
sudo apt-get update && sudo apt-get install python3-pip pip3 install -r requirements.txt
In the Putty command prompt, you can run the app file using the command python3 app.py so you will get the URL. Visit the SSH client in Instance Dashboard and copy the AWS EC2 instance address and paste it into the browser. At last, write .8080 port and press enter.
The website will only run till when you run the command in Putty. So to stop or avoid this flaw, you need to run one command, a JNU multiplexer in a complex terminology that copies the current screen on a server. The command is given in the below snippet, so copy and run the command in a terminal, and Now until you press CTRL + C, the server will keep running. In the following article, we will also learn how to download the production environment. For now, I hope this article has provided you with an in-depth overview of model deployment over AWS EC2.
screen -R deploy python3 app.py
In this article, we have learned about deploying a Machine learning model on the AWS cloud using a top-rated AWS EC2 service. Let us discuss the key takeaways from that article that you should remember.
Thank You Note
The media shown in this article is not owned by Analytics Vidhya and is used at the Author’s discretion.
Hi, In the last step, when I lauch the website , I am getting the following error. 172.31.20.72 took too long to respond. Even I created the security group to allow https connections. what will be the issue to lauch the site?