How to deploy a Machine Learning model on AWS Lambda
In this tutorial, I’ll walk you through the deployment of a machine learning
model on AWS Lambda. Our model will also be accessible through an API using
Amazon API Gateway. In the end, we’ll get a perfect recipe for a truly
server-less system. Let’s jump straight into it.
Upload your model to Amazon S3
The first step is to upload your model to Amazon S3. If you’re not familiar with
Amazon S3, visit this link to get started:
http://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html
Creating a virtual environment
When deploying to AWS Lambda, you need to upload a virtual environment that
holds your code and dependencies. In your project folder, write the following
lines. To avoid conflicts, you should not name your virtual environment the
same as your project folder.
pip install virtualenv
virtualenv your_virtual_environment_name
To start your virtual environment:
source your_virtual_environment_name/bin/activate
Creating a Flask API
We will need a basic Flask application to handle our
requests. The application will load our model from Amazon S3 and return the
predictions. Start by creating a file named predictions.py and add the code
below. Make sure to modify the *BUCKET_NAME *and MODEL_FILE_NAME before going
to the next step.
Loading our model from Amazon S3
Using the Boto library, we load our model
previously saved on Amazon S3 and save it to disk for later use.
Creating predictions
Last but not least, we are ready to get some predictions. The predict method
receives as argument the data sent to the API. You will need to add some code to
process the data to match your model.
Here’s what the final file should look like
Testing the API
To run your application, you must create an environment variable to tell
Flask which files to execute:
export FLASK_APP=predictions.py
You should make sure that your code is working locally before deploying it to
AWS.
Install Flask then run the second command to start
your application:
pip install Flask
flask run
Open a terminal and test your predictions:
curl -d '{"payload": "Insert the data needed for your model to make predictions"}' http://127.0.0.1:5000/
When everything’s working, you can go to the next step.
Deploying to AWS Lambda
Instead of manually creating and configuring AWS Lambda and the API Gateway,
we’re going to use a library called Zappa.
Zappa makes it super easy to build and
deploy all Python WSGI applications on AWS Lambda + API Gateway.
Important: Before deploying, make sure to configure your AWS credentials. For
more info, visit:
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
In your virtual environment, install the required packages:
pip install zappa sklearn boto numpy scipy
Then, initialize Zappa. When asked for an
app function name, write down *predictions.app. *(or, the name of your
Flask app + .app)
zappa init
AWS Lambda requires your environment to have a maximum size of 50mb, but our
packaged environment will be around 100mb. Lucky for us, it is possible for
Lambda’s to load code from Amazon S3 without much performance loss (only a few
milliseconds).
To activate this feature, you must add a new line to your zappa_settings.json
"slim_handler": true
You’re now ready to deploy. Use the deploy command with the name of the
environment you’ve selected when initializing Zappa.
zappa deploy your-environment-name
When completed, you will see your API URL in the last message. It will look like
“https://abcdefg.execute-api.us-east-1.amazonaws.com/your-env-name”
You can test your deployment using cURL:
curl -d '{"payload": "Insert the data needed for your model to make predictions"}' https://your-api-url.com/your-env
Congratulation! You have deployed your model on a server-less infrastructure.
Make sure to drop a follow if you liked this post. I also have some great
articles on machine learning coming soon, stay tuned!
You can also reach me @franksup2 on twitter.
Congratulations @franksup2! You have received a personal award!
1 Year on Steemit
Click on the badge to view your Board of Honor.
Do not miss the last post from @steemitboard:
SteemitBoard World Cup Contest - Sweden vs Switzerland
Participate in the SteemitBoard World Cup Contest!
Collect World Cup badges and win free SBD
Support the Gold Sponsors of the contest: @good-karma and @lukestokes
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @franksup2! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Nice post
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit