surfra
Invite only beta

Serverless GPUs on your own clouds.

Connect your cloud accounts and your own machines. Surfra runs the queue, the replicas, and the failover. Each cloud bills you directly at its own price.

Connect your accounts 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 cloud accounts are shared. Everyone keeps their own API keys.

Your clouds, at cost

Machines start in your own accounts and each provider bills you at its own price. Keys are encrypted with your team's own key and never shown again.

Pricing

Free on your own clouds. Pay us for what we add.

Compute is always billed by your cloud, at its price. Surfra charges for machines you register yourself and for the team features on top.

Free Forever

$0

Bring your own cloud and never pay Surfra for it.

  • Connect every supported cloud
  • Up to 3 seats
  • Your own machines free for 3 months, then $2 per machine a month
  • Live logs and search, kept for 30 minutes
  • Spend guardrails Soon
  • Audit log Soon
Request access

Team

Soon

For teams that run in production and want to know when something breaks.

  • Everything in Free Forever
  • Up to 15 seats
  • 25 of your own machines included
  • 10 GB of logs a month, kept for 30 days Soon
  • Log search Soon
  • Error alerts Soon
  • Uptime and heartbeat checks Soon
Get notified

Enterprise

Custom

For organizations with their own retention, security, and seat needs.

  • Everything in Team
  • Custom log retention
  • Single sign-on
  • More than 15 seats
Contact us
FAQ

Questions, answered.

What is Surfra?

Surfra runs your model on GPUs and CPUs from your own cloud accounts 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. Connect the accounts you already have, choose the order, and Surfra falls through the list when a provider has no room.

How does billing work?

Each cloud bills you directly for the machines Surfra starts in your account, at that cloud's own price. Surfra adds no markup. The Free Forever plan stays free. Machines you register yourself are free for 3 months, then $2 per machine a month.

Can anyone see my cloud keys?

No. A key is checked with the provider, then encrypted with a key that belongs to your team, which is itself encrypted with Surfra's master key. The dashboard and the API never show it again, not even to you. Surfra decrypts it only to start and stop your machines.

Can my team share apps?

Yes. An organization shares apps, credentials, and cloud accounts. Owners and admins invite people, connect clouds, 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