surfra
Invite only beta

Serverless GPUs across many clouds.

Run your model on serverless GPUs and CPUs across many clouds. You own the runtime. Surfra runs the queue, the replicas, and the failover.

Places replicas on
Salad RunPod Vast.ai Yotta DigitalOcean Your machines
How it works

Bring a container. Rank the machines. Call it.

Surfra queues requests, starts replicas on the machines you rank, moves to the next provider when one is full, and stops replicas when they go idle.

1

Write a handler

Load your model once in a warmup. Return JSON from a handler. Or skip the handler and run vLLM, SGLang, TGI, or Ollama as they are.

import surfra

model = None

@surfra.warmup
def load():
    global model
    model = load_my_model()

@surfra.handler
def predict(request):
    return {"text": model.generate(
        request.input["prompt"])}
2

Rank the machines

List GPUs in priority order. A new replica takes the first row that can place it, so a full provider falls through to the next.

1SaladRTX 4090Full
2RunPodRTX 4090Placing
3Your machineRTX 3090Ready
min 0max 4idle 60s
3

Call it

Every call goes through the queue. It starts replicas when none are running and is retried if a worker fails.

import surfra

app = surfra.App("my-model")
print(app.run({"prompt": "Say hi"}))
# {'text': 'Hi!'}

# or any OpenAI client
client = OpenAI(
    base_url="https://api.surfra.io/openai/my-llm/v1",
    api_key=SURFRA_API_KEY,
)
One queue

Work waits in one queue. Replicas come up wherever there is room.

Queued work starts replicas. When the first provider is full, the next one takes the overflow. Idle replicas stop after the idle timeout, so a quiet app scales to zero.

Features

The parts you would otherwise build yourself.

Scale on demand

Queued work starts replicas. Idle replicas stop after the idle timeout. Set a minimum to keep some warm.

Failover across clouds

A full or missing provider falls through to the next row. A request that fails on one worker is retried on another.

Keep a cheap base, burst on fast

Per-provider limits keep a base on one provider and send bursts to another.

Python or any HTTP server

Write a handler, or run a server you already have. An HTTP app also answers OpenAI-compatible calls.

Workflows

Chain apps into steps that pass their output forward. Each step's app scales on its own, so a GPU model and a CPU post-processor share one workflow.

Your own machines

Register a workstation or a spare server. It shows up as a row in any app's priority list, next to the clouds.

Metrics, requests, and logs

Each app has metrics, a request log with inputs and outputs, live logs, worker states, and a release history.

Built for teams

Invite people to an organization. Apps, credentials, and the balance are shared. Everyone keeps their own API keys.

Pay for the seconds you run

Add funds to a prepaid balance. A replica is charged for the seconds it runs, and you see the price before you deploy.

FAQ

Questions, answered.

What is Surfra?

Surfra runs your model on GPUs and CPUs from many clouds as one serverless app. You bring a container image. Surfra queues requests, starts replicas on the machines you rank, moves to the next provider when one is full, and stops replicas when they go idle.

Do I have to rewrite my model?

No. Add a small handler with the surfra Python package, or run the server you already use, such as vLLM, SGLang, TGI, or Ollama, behind the Surfra supervisor.

Which clouds can I use?

Salad, RunPod, Vast.ai, Yotta, and DigitalOcean today, plus machines you register yourself. You choose the order, and Surfra falls through the list when a provider has no room.

How does billing work?

You keep a prepaid balance and pay for the seconds a replica runs. Top ups start at $25, and you can refill automatically with a saved card. Machines stop when the balance reaches $0.

Can my team share apps?

Yes. An organization shares apps, credentials, and one balance. Owners and admins invite people, manage billing, and remove members. Each person has their own API keys.

How do I get access?

Surfra is invite only while we test it. Email hello@surfra.io and tell us what you want to run.

Ready to ride the wave?

Tell us what you want to run and we will send an invite.

Request access