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)}
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.
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)}
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
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"})
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.
A full or missing provider falls through to the next row in your list. Your app keeps one name and one queue.
Per-provider limits keep a steady base on a low-cost cloud and send spikes somewhere with more stock.
Use the handler for batching and progress, or point Surfra at a server's port. HTTP apps also answer OpenAI-compatible calls.
Pull several requests per call, or run several workers per replica, to keep a GPU busy.
Live logs, a request history with inputs and outputs, worker states, and charts for each app.
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.
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.
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.
No. A Python handler is a few lines, and an existing HTTP server such as vLLM runs unchanged behind the Surfra supervisor.
Surfra tries the next row in your priority list. The request waits in the queue until a replica can take it.
Surfra is invite only while we test it. Tell us what you want to run and we will send an invite.
Request access