Comparison

Runqy vs RunPod Serverless

RunPod Serverless gives you a managed queue in front of GPU workers that start when jobs arrive and stop when they are idle. Runqy gives you the same pattern, self-hosted, with workers that can run anywhere, including on RunPod.

They are not mutually exclusive: Runqy's autoscaler can rent RunPod pods for a queue, next to the GPUs you already own. Runqy is our project; this page says when RunPod Serverless is the better choice.

What you get out of the box

Features available without writing glue code or adding another service.

Out of the boxRunPod ServerlessRunqy
Where workers run RunPod GPUs only Your machines, RunPod pods, Vast.ai, any server
Who runs the control plane RunPod (managed) You (self-hosted server + Redis)
Job queue✓ managed, per endpoint✓ Redis, sub-queues per queue
Submit jobs✓ /run, /runsync, /status✓ /queue/add, batch, CLI, Python client
Ship new code Build and push a Docker image, or build from GitHub Push to Git, then code-update: no image rebuild
Scale to zero✓ idle timeout✓ idle trigger, min_workers: 0
Scale up on demand✓ queue delay or request count✓ queue depth, latency, no workers
Scheduled pre-warming~ active workers, always on✓ cron schedules with a duration
Keeps a model loaded between jobs✓ while the worker is warm✓ @load, while the worker lives
Cold-start reduction✓ FlashBoot, cached models~ machines you keep, schedules
Execution timeout and job TTL✓ per endpoint or request✓ per queue; timeout also per request
Mix with machines you own✗ ✓
Billing Per running worker, including cold starts and idle wait 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 handler, both ways

RunPod Serverless

import runpod

pipe = load_pipeline()  # once per worker

def handler(event):
    prompt = event["input"]["prompt"]
    return save(pipe(prompt))

runpod.serverless.start({"handler": handler})
# Build a Docker image, push it,
# create an endpoint.

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()
# Push to Git. Workers clone it;
# runqy control code-update rolls it out.

Choose RunPod Serverless when

  • You do not want to run any server: no Redis, no control plane, no updates.
  • Traffic is bursty and cold starts matter: FlashBoot and cached models help.
  • All your GPUs can live on RunPod.

Choose Runqy when

  • You already own GPUs and want rented ones only for peaks.
  • You want to compare providers: RunPod pods and Vast.ai from the same queue config.
  • You ship code often and do not want to rebuild an image each time.
  • Jobs of the same model need priorities, for example paid users before free ones.

Try Runqy

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