Deploy ML Models: APIs, UIs & CI/CD Pipelines
Learn to deploy machine learning models effectively. Discover strategies for building APIs, creating UIs, and integrating with CI/CD for real-world AI applications.
7. Deployment of ML Models
This section covers various strategies and tools for deploying machine learning models, enabling them to be accessed and utilized in real-world applications. We will explore options for building APIs, creating user interfaces for prototyping, and integrating with continuous integration and continuous deployment (CI/CD) pipelines.
7.1. Building APIs for ML Models
To make your ML models accessible to other applications or services, you can expose them through APIs. Flask and FastAPI are popular Python frameworks for building web APIs.
7.1.1. Flask
Flask is a lightweight and flexible web framework that is well-suited for building simple APIs.
Example: Simple Flask API for a Model
from flask import Flask, request, jsonify
import joblib # Assuming you've saved your model using joblib
app = Flask(__name__)
# Load your pre-trained model
model = joblib.load('your_model.pkl')
@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json()
# Assuming the input data is a list of features
features = data['features']
prediction = model.predict([features]) # Make sure your model expects a list of lists for batch prediction if applicable
return jsonify({'prediction': prediction.tolist()})
if __name__ == '__main__':
app.run(debug=True)
7.1.2. FastAPI
FastAPI is a modern, fast (high-performance) web framework for building APIs with Python 3.7+ based on standard Python type hints. It offers automatic data validation, serialization, and interactive API documentation.
Example: Simple FastAPI API for a Model
from fastapi import FastAPI
from pydantic import BaseModel
import joblib # Assuming you've saved your model using joblib
app = FastAPI()
# Load your pre-trained model
model = joblib.load('your_model.pkl')
class Features(BaseModel):
features: list
@app.post('/predict')
async def predict(data: Features):
prediction = model.predict([data.features])
return {'prediction': prediction.tolist()}
# To run this:
# 1. Save the code as main.py
# 2. Install uvicorn: pip install uvicorn
# 3. Run from terminal: uvicorn main:app --reload
# You can access the interactive documentation at http://127.0.0.1:8000/docs
7.2. Gradio UIs for Prototyping
Gradio is a Python library that makes it easy to create customizable UI components for your machine learning models, allowing for quick prototyping and sharing.
Example: Gradio Interface for a Model
import gradio as gr
import joblib # Assuming you've saved your model using joblib
import numpy as np
# Load your pre-trained model
model = joblib.load('your_model.pkl')
def predict_model(feature1, feature2, feature3):
# Assuming your model takes 3 features as input
input_data = np.array([[feature1, feature2, feature3]])
prediction = model.predict(input_data)
return f"Prediction: {prediction[0]}"
# Create a Gradio interface
iface = gr.Interface(
fn=predict_model,
inputs=[
gr.Number(label="Feature 1"),
gr.Number(label="Feature 2"),
gr.Number(label="Feature 3")
],
outputs="text",
title="ML Model Prediction Interface",
description="Enter features to get a prediction from the model."
)
if __name__ == "__main__":
iface.launch()
7.3. Deployment Platforms
Several platforms can host your deployed ML models.
7.3.1. Heroku Deployment
Heroku is a cloud platform that lets you deploy, manage, and scale applications. It's a good option for smaller projects or for getting started.
Key Steps for Heroku Deployment:
-
Prepare your application:
- Create a
requirements.txt
file listing all Python dependencies (pip freeze > requirements.txt
). - Include your trained model file (e.g.,
your_model.pkl
). - Ensure your Flask or FastAPI app is configured to run (e.g., using
gunicorn
for production).
- Create a
-
Create a
Procfile
: This file tells Heroku how to run your application.- For Flask/Gunicorn:
web: gunicorn app:app
(if your Flask app is inapp.py
) - For FastAPI/Uvicorn:
web: uvicorn main:app --host 0.0.0.0 --port $PORT
(if your FastAPI app is inmain.py
)
- For Flask/Gunicorn:
-
Create a
runtime.txt
: Specify the Python version.- Example:
python-3.9.7
- Example:
-
Initialize Git:
git init
git add .
git commit -m "Initial commit"
-
Create a Heroku App:
- Install the Heroku CLI.
heroku create your-app-name
-
Deploy:
git push heroku main
(ormaster
depending on your default branch)
7.4. MLOps & CI/CD Integration
MLOps (Machine Learning Operations) and CI/CD (Continuous Integration/Continuous Deployment) practices are crucial for automating and streamlining the ML model lifecycle, from training to deployment and monitoring.
Core Concepts:
- Continuous Integration (CI): Automating the process of merging code changes from multiple developers into a single software project. For ML, this can include automated model retraining and testing.
- Continuous Delivery (CD): Automating the release of software to a production or staging environment after the build stage. For ML, this means automatically deploying new model versions.
- CI/CD Pipelines: A series of automated steps that take code from commit to deployment.
- Tools: Jenkins, GitHub Actions, GitLab CI, CircleCI, Azure DevOps, AWS CodePipeline.
Integration Example (Conceptual using GitHub Actions):
A GitHub Actions workflow could be triggered on new commits to the main
branch. This workflow might:
- Checkout Code: Download the latest code.
- Set up Python: Configure the Python environment.
- Install Dependencies: Install packages from
requirements.txt
. - Run Tests: Execute unit tests for data processing and model prediction logic.
- Train Model (Optional): If new data is available or scheduled, retrain the model.
- Save Model: Serialize the trained model.
- Build API: Package the model and API code.
- Deploy: Push the API to a hosting platform (e.g., Heroku, AWS Elastic Beanstalk, Kubernetes).
# .github/workflows/ml_deployment.yml (Example)
name: ML Model Deployment
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install gunicorn # Or uvicorn for FastAPI
- name: Run Model Tests
run: python tests/test_model.py # Example test script
- name: Deploy to Heroku
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
HEROKU_APP_NAME: ${{ secrets.HEROKU_APP_NAME }}
run: |
git push https://heroku:${HEROKU_API_KEY}@git.heroku.com/${HEROKU_APP_NAME}.git HEAD:main
7.5. Streamlit Deployment
Streamlit is another excellent framework for building interactive data applications with Python. It's often used for creating dashboards and simple ML UIs.
Example: Simple Streamlit App
import streamlit as st
import joblib
import numpy as np
# Load your pre-trained model
model = joblib.load('your_model.pkl')
st.title("ML Model Prediction App")
# Input fields for features
feature1 = st.number_input("Enter Feature 1", value=0.0)
feature2 = st.number_input("Enter Feature 2", value=0.0)
feature3 = st.number_input("Enter Feature 3", value=0.0)
if st.button("Predict"):
input_data = np.array([[feature1, feature2, feature3]])
prediction = model.predict(input_data)
st.write(f"The prediction is: {prediction[0]}")
# To run this:
# 1. Save the code as app.py
# 2. Run from terminal: streamlit run app.py
Deployment Options for Streamlit:
- Streamlit Community Cloud: A free platform for deploying Streamlit apps.
- Heroku, AWS, GCP, Azure: Can be deployed as regular web applications using tools like
gunicorn
oruvicorn
(if you're building an API around it).
Semi-Supervised SVM (S3VM) for Machine Learning
Learn about Semi-Supervised Support Vector Machines (S3VMs), a powerful ML technique leveraging both labeled and unlabeled data for efficient model training.
Flask vs FastAPI: Python API Frameworks for AI
Compare Flask and FastAPI for building robust Python APIs. Choose the best framework for your AI, ML, and LLM projects with expert insights.