September 15, 20245 minute read
How to deploy a Gradio app
author
Yiren Lu@YirenLu
Solutions Engineer

What Is Gradio?

Gradio is an open-source Python library that allows developers to create intuitive web interfaces for their ML models with just a few lines of Python code. Whether you’re working with text, images, audio, or video, Gradio simplifies the process of making your models interactive and accessible.

gradio

Key Benefits of Gradio:

  • Rapid prototyping of ML model interfaces
  • Support for various input and output types
  • Easy integration with popular ML frameworks
  • Customizable UI components

Why Deploy Gradio in the Cloud?

While Gradio is excellent for local development, if you want to share your demo with someone, you’ll probably need to deploy it in the cloud. Enter Modal!

Introducing Modal: Simplifying Cloud Deployment for Gradio

Modal provides a serverless platform that makes deploying Gradio interfaces in the cloud a breeze. With Modal, you can have your Gradio app up and running in minutes, without the hassle of managing infrastructure. Moreoever, you can also fine-tune your ML models and store their weights on Modal, making it a one-stop solution for all your ML deployment needs.

Step-by-Step Guide to Deploying Gradio on Modal

Let’s walk through the process of deploying a Gradio interface on Modal.

Step 1: Create Your Gradio Application

First, create a file named gradio_app.py with the following content:

from fastapi import FastAPI
import gradio as gr
import time
from gradio.routes import mount_gradio_app

def greet(name, intensity):
    time.sleep(5)  # Simulating processing time
    return "Hello, " + name + "!" * int(intensity)

demo = gr.Interface(
    fn=greet,
    inputs=["text", "slider"],
    outputs=["text"],
)
demo.queue(max_size=5)  # Enable queue for handling multiple requests

web_app = FastAPI()
app = mount_gradio_app(
    app=web_app,
    blocks=demo,
    path="/",
)

if __name__ == "__main__":
    import argparse
    import uvicorn
    parser = argparse.ArgumentParser()
    parser.add_argument("--host", type=str)
    parser.add_argument("--port", type=int)
    args = parser.parse_args()
    uvicorn.run(app, host=args.host, port=args.port)

This script creates a simple Gradio interface with a greeting function that takes a name and intensity as inputs.

Step 2: Create the Modal Deployment Script

Next, create a file named modal_app.py with the following content:

import modal
import pathlib
import shlex
import subprocess

GRADIO_PORT = 8000

app = modal.App("gradio-app")

image = modal.Image.debian_slim(python_version="3.11").pip_install("gradio")

fname = "gradio_app.py"
gradio_script_local_path = pathlib.Path(__file__).parent / fname
gradio_script_remote_path = pathlib.Path("/root") / fname

if not gradio_script_local_path.exists():
    raise RuntimeError(f"{fname} not found! Place the script with your gradio app in the same directory.")

gradio_script_mount = modal.Mount.from_local_file(
    gradio_script_local_path,
    gradio_script_remote_path,
)

@app.function(
    image=image,
    mounts=[gradio_script_mount],
    allow_concurrent_inputs=100,  # Ensure we can handle multiple requests
    concurrency_limit=1,  # Ensure all requests end up on the same container
)
@modal.web_server(GRADIO_PORT, startup_timeout=60)
def web_app():
    target = shlex.quote(str(gradio_script_remote_path))
    cmd = f"python {target} --host 0.0.0.0 --port {GRADIO_PORT}"
    subprocess.Popen(cmd, shell=True)

# Run with: modal serve modal_app.py
# Or deploy with: modal deploy modal_app.py

This script sets up the Modal deployment environment and runs your Gradio app.

Step 3: Deploy Your Gradio App on Modal

To deploy your Gradio app on Modal, simply run:

modal deploy modal_app.py

Modal will process your deployment and provide you with a URL where your Gradio interface is now live and accessible to anyone.

Why Choose Modal for Your Gradio Deployment?

Modal offers several advantages for deploying Gradio interfaces:

  1. Serverless Architecture: No need to manage servers or worry about scaling.
  2. Rapid Deployment: Get your demo online in minutes.
  3. Cost-Effective: Pay only for usage - if no one uses your app, you don’t pay.
  4. Easy Updates: Modify your Gradio interface and redeploy with a single command.
  5. Concurrent Request Handling: The deployment script is configured to handle multiple requests efficiently.

Conclusion: Elevate Your ML Demos with Gradio and Modal

By combining Gradio’s intuitive interface creation capabilities with Modal’s efficient cloud deployment solution, you can take your machine learning demonstrations to the next level.

Start deploying your Gradio interfaces with Modal today, and experience the future of ML model demonstration and collaboration!

Ship your first app in minutes

with $30 / month free compute