Machines and providers
Surfra does not own machines. It places your replicas in the cloud accounts you connect and on your own machines. The dashboard shows every machine with its live price and availability.
The priority list
Section titled “The priority list”autoscale.providers is an ordered list. Lower priority numbers are tried first.
"providers": [ {"provider": "salad", "gpu": "rtx3090", "priority": 1}, {"provider": "vast", "gpu": "rtx3090", "priority": 2, "spot": True}, {"provider": "runpod", "gpu": "rtx3090", "priority": 3},]Every new replica walks the list from the top and takes the first row that can place it. A row is skipped when the provider has no capacity for that machine, the provider is not connected, or no price is published for it. A replica that was preempted or crashed is replaced the same way.
With per-provider limits each row can also keep a minimum running and cap how many replicas it takes.
Row fields
Section titled “Row fields”| Field | Meaning |
|---|---|
provider |
Provider id from the table below, or runner |
priority |
Order in the list. Lower is tried first |
gpu |
GPU id, such as rtx4090, l40s, a100, h100, or cpu |
gpu_count |
GPUs per replica. Default 1 |
spot |
Use interruptible capacity where the provider offers it |
vcpu, ram_gb |
CPU shape for cpu rows, from the sizes the dashboard lists |
num_workers |
Worker ids one replica may register. Default 1. concurrent_workers raises it |
runner |
Runner name or id, for provider: "runner" |
min_replicas, max_replicas |
Per-row limits. Only used when per_provider is on |
Pick rows in the dashboard to get exact ids. The SDK panel on the create page prints them.
Prices
Section titled “Prices”The price on each machine card is the provider’s own rate per replica-hour. The provider bills your account for it directly. Surfra adds nothing to it.
- Fixed prices are set by the provider and do not move.
- Estimated prices come from marketplaces such as Salad and Vast.ai, where the rate depends on the host. The card shows the range.
Provider features
Section titled “Provider features”Some settings need support from every provider in the list. The dashboard disables a setting and names the provider that blocks it.
| Provider | id | Publish ports | Raw TCP | Disk size | Private registry |
|---|---|---|---|---|---|
| Salad | salad |
✓ | ✓ | ||
| RunPod | runpod |
✓ | ✓ | ✓ | |
| Vast.ai | vast |
✓ | ✓ | ✓ | ✓ |
| Yotta | yotta |
✓ | ✓ | ✓ | ✓ |
| DigitalOcean | digitalocean |
✓ | |||
| Shadeform (Beta) | shadeform |
✓ | ✓ | ✓ | |
| Lambda (Beta) | lambdalabs |
✓ | |||
| Verda (Beta) | verda |
✓ | |||
| Hyperstack (Beta) | hyperstack |
✓ | |||
| Vultr (Beta) | vultr |
✓ | |||
| Scaleway (Beta) | scaleway |
✓ | |||
| AWS (Beta) | aws |
✓ | |||
| Oracle Cloud (Beta) | oci |
✓ | |||
| Crusoe (Beta) | crusoe |
✓ | |||
| Hetzner (Beta) | hetzner |
✓ | |||
| Novita (Beta) | novita |
✓ | ✓ | ✓ | ✓ |
| Paperspace (Beta) | paperspace |
✓ | |||
| TensorDock (Beta) | tensordock |
✓ | ✓ | ✓ | ✓ |
Queued requests, the OpenAI gateway, and the HTTP gateway work on every provider. “Publish ports” is only needed for http_ports.
Spot capacity
Section titled “Spot capacity”Spot rows are cheaper and can be taken back by the provider. When that happens the worker stops heartbeating, its request returns to the queue, and Surfra starts a replacement from the top of the list. Put an on-demand row below a spot row so there is always somewhere to fall back to.
