Democratizing Building ML Web App with Streamlit and Heroku
R ecently I integrated a TensorFlow-enabled ML model into the Streamlit web app in less than 40 lines of codes. Then I deploy the app on Heroku, a low-code platform for deploying, managing and scaling modern apps. In this post, I will show briefly how to do it. Streamlit is the easiest app framework that I have ever seen, best suited for data scientists and machine learning engineers. If you haven’t heard about it, I strongly recommend you to give a try. Streamlit, togehter with Heroku, help people like me who don’t have extensive DevOps experience, quickly share and productionize experimentation results.
Pre-train your model
First of all, you need to train your ML model and save it. Here I created a conditional variational autoencoder model in TensorFlow to generate synthetic MNIST style handwriting digits.
Create the Streamlit app
To create a web app using Streamlit is super easy. Here is the example where I created a simple app, allowing the users to pick a digit from 0 to 9 and the number of generated images to be shown.
Up to this point, you should be able to launch the app locally by running:
$ streamlit run app.py
It’s highly recommended that you make your application name as app.py.
Host the app on Heroku
Now it’s time to deploy the app so the public can access it. Let’s break down the process into a few steps as below.
- Sign up on Heroku
- Make a file named
Procfileand paste these:web: sh setup.sh && streamlit run app.py - Make a file named
setup.shand paste these:mkdir -p ~/.streamlit/ echo "\ [server]\n\ headless = true\n\ enableCORS=false\n\ port = $PORT\n\ " > ~/.streamlit/config.toml - Make a file named
requirements.txtwhere you put all the required python modules there. - Git push the changes you just made.
- Download and install Heroku CLI .
- Now return to your terminal, type
heroku login, which will open a browser for you to log in. - Once you log in, you can create an app by
heroku create <your-app-name> - Almost there! One last thing is to push all files into heroku master repo by running commands:
git push heroku master
Patiently wait for a while to install all dependencies and package all of the artifacts. :boom:! You should be able to access the web by https://<your-app-name>.herokuapp.com!