Comparison

Runqy vs Modal

Modal is a serverless platform: you decorate Python functions, and Modal builds the containers, finds the GPUs and scales them on its cloud. Runqy is a self-hosted task queue: your workers run wherever you put them, including GPUs you already own.

Modal does more than queue jobs: web endpoints, cron, volumes, sandboxes. Runqy focuses on one thing: getting jobs to GPU workers on your own terms. Runqy is our project; this page says when Modal is the better choice.

What you get out of the box

Features available without writing glue code or adding another service.

Out of the boxModalRunqy
Where code runs Modal's cloud only Your machines, RunPod, Vast.ai, any server
Platform Managed service; open-source client Open-source server and worker (MIT), self-hosted
How you define a worker Python decorators; image and GPU declared in code @load / @task in Python; queue config in YAML
Ship new code✓ modal deploy✓ push to Git, then code-update
GPU autoscaling and scale to zero✓ automatic✓ triggers per queue, RunPod and Vast.ai
Use GPUs you already own✗ ✓
Keeps a model loaded between jobs✓ container lifecycle✓ @load
Job queue✓ spawn, Queue✓ Redis, sub-queues
Retries and timeouts✓ ✓ per queue
Cron and scheduled functions✓ Period, Cron~ scheduled machine pre-warming only
Web endpoints✓ FastAPI, ASGI, WSGI~ REST API to enqueue and read results
Secrets✓ ✓ encrypted vaults
Persistent volumes✓ ✗ use your own storage
Billing Per second of usage Free software; you pay your machines and rentals

✓ built in · ~ partial or limited · ✗ not built in (you add a separate tool or write it yourself)

The same GPU job, both ways

Modal

import modal

app = modal.App("images")
image = modal.Image.debian_slim().pip_install("diffusers")

@app.function(gpu="L40S", image=image)
def generate(prompt):
    return save(load_pipeline()(prompt))

# modal deploy, then generate.spawn("a fox")

Runqy

from runqy_python import load, task, run

@load
def setup():
    return {"pipe": load_pipeline()}

@task
def generate(payload, ctx):
    return save(ctx["pipe"](payload["prompt"]))

run()
# POST /queue/add {"queue": "images", ...}

Choose Modal when

  • You do not own GPUs and do not want to manage any infrastructure.
  • You also need web endpoints, cron jobs, volumes or sandboxes on the same platform.
  • Fast cold starts and a wide choice of datacenter GPUs matter more than the hourly price.

Choose Runqy when

  • You own GPUs, at home or in a lab, and want them in production.
  • You want marketplace prices on Vast.ai or RunPod for peaks, with your own machines as the base.
  • Your data and your code must stay on infrastructure you control.
  • You want no lock-in: plain Python workers and a server you can run anywhere.

Try Runqy

Open source and self-hosted. Start with your own machine, add rented GPUs when you need them.