Deploy a fastai image classifier using OpenFaaS for serverless on DigitalOcean in 5 easy steps!
Fastai is a python library that simplifies training neural nets using modern best practices. See the fastai website and view the free online course to get started. Fastai lets you develop and improve various NN models with little effort. Some of the deployment strategies are mentioned in their course, but most are not production-ready.
OpenFaaS® (Functions as a Service) is a framework for building Serverless functions easily with Docker that can be deployed on multiple infrastructures including Docker swarm and Kubernetes with little boilerplate code. Serverless is a cloud-computing model in which the cloud provider runs the server, and dynamically manages the allocation of machine resources and can scale to zero if a service is not being used. It is interesting to note that OpenFaaS has the same requirements as the new Google Cloud Run and is interoperable. Read more about OpenFaaS (and install the CLI) from their website.
DigitalOcean: I host all my websites on DigitalOcean (DO) which offers good (in my opinion) cloud services at a low cost. They have data centres in Canada and India. DO supports Kubernetes and Docker Swarm, but they offer a One-Click install of OpenFaaS for as little as $5 per month (You can remove the droplet after the experiment if you like, and you will only be charged for the time you use it.) If you are new to DO, please sign up and setup OpenFaaS as shown here:
In fastai class, Jeremy creates a dog breed classifier.
As STEP 1, export the model to .pkl as below
This creates the export.pkl file that we will be using later. To deploy we need a base container to run the prediction workflow. I have created one with Python3 along with fastai core and vision dependencies (to keep the size small). It is available here: https://hub.docker.com/r/beapen/fastai-vision But you don’t have to directly use this container. My OpenFaaS template will make this easy for you.
STEP 2: Using the OpenFaaS CLI (How to Install) pull my template as below:
mkdir dog-classifier cd dog-classifier faas-cli template pull https://github.com/dermatologist/python3-ml --prefix your-docker-uname faas-cli new --lang fastai-vision dog-classifier
STEP 3: Copy export.pkl to the model folder
STEP 4: Add http://digitaloceanIP:8080 to dog-classifier.yml
provider: name: openfaas gateway: http://digitaloceanIP:8080
and finally in STEP 5:
faas-cli up -f dog-classifier.yml
That’s it! Your predictor is up and running! Access it at http://digitaloceanIP:8080/function/dog-classifier
The template has a builtin image uploader interface! If you get stuck at any stage, give me a shout below. More to follow on using OpenFaaS for deploying machine learning workflows!