Surfrasurfra
Serverless GPUs

Serverless GPU inference, on the clouds you already pay for.

Ship a container. Surfra keeps a queue in front of it, starts GPU replicas when work arrives, and stops them when it goes quiet. The machines start in your own accounts, so every cloud bills you at its own price.

How it works

Three steps from image to endpoint.

1

Bring a container

Write a small Python handler, or keep the server you already run. vLLM, SGLang, TGI, and Ollama work as they are, behind the Surfra supervisor.

import surfra

@surfra.handler
def predict(request):
    return {"text": run(request.input)}
2

Rank the machines

List GPUs in the order you want them tried. When a provider has no room, the next row takes the replica. Your own workstation can sit in the same list.

providers:
  1  salad   rtx4090
  2  runpod  rtx4090
  3  runner  desk-3090
3

Call it

Every request goes through the queue. If no replica is running, one starts. If a worker fails, the request is retried on another.

app = surfra.App("my-model")
app.run({"prompt": "Say hi"})
What you get

The parts you would otherwise build yourself.

Scale to zero

Queued work starts replicas. Idle replicas stop after the idle timeout you set, so a quiet model costs nothing. Set a minimum to keep some warm.

Failover across clouds

A full or missing provider falls through to the next row in your list. Your app keeps one name and one queue.

Cheap base, fast burst

Per-provider limits keep a steady base on a low-cost cloud and send spikes somewhere with more stock.

Python or plain HTTP

Use the handler for batching and progress, or point Surfra at a server's port. HTTP apps also answer OpenAI-compatible calls.

Batching and concurrency

Pull several requests per call, or run several workers per replica, to keep a GPU busy.

Logs and metrics

Live logs, a request history with inputs and outputs, worker states, and charts for each app.

Cost

No markup on GPU time.

Surfra never resells compute. Each replica starts in an account you connected, and that cloud sends you the bill at its normal rate. Surfra charges for the platform around it, and the Free Forever plan stays free.

FAQ

Common questions

What is serverless GPU inference?

You deploy a model and call it, and the platform decides when GPU machines run. With Surfra, replicas start when requests are waiting and stop after they sit idle, so you are not paying for a GPU that has nothing to do.

Which GPUs can I use?

Whatever your connected clouds offer. Across Salad, RunPod, Vast.ai, DigitalOcean, and Yotta that runs from RTX 3090 and 4090 cards up to A100, H100, H200, B200, and AMD MI300X. You can also add a machine you own.

Do I have to rewrite my model?

No. A Python handler is a few lines, and an existing HTTP server such as vLLM runs unchanged behind the Surfra supervisor.

What happens when a cloud runs out of GPUs?

Surfra tries the next row in your priority list. The request waits in the queue until a replica can take it.

Run it on your own clouds.

Surfra is invite only while we test it. Tell us what you want to run and we will send an invite.

Request access