Surfrasurfra
GPU jobs

Training runs and batch jobs, on the same machines.

A job runs one command, once, on one machine, and ends when the command exits. Pick the image and the machines to try. Surfra places it, streams the output back, and tells you exactly how it ended.

How it works

Submit a command. Watch it run.

1

Submit

Give an image, a command, and machines in the order to try: your own runner first, a cloud GPU as the fallback. Env values are encrypted when they are stored.

surfra job submit \
  --image ghcr.io/me/train:3 \
  --runner desk-4090 \
  --provider runpod --gpu a100 \
  --deadline 12h \
  -- python train.py --epochs 10
2

Watch it live

Standard output and errors stream back while the job runs, from the command line or the dashboard. Job logs are kept for 7 days.

3

Know how it ended

Succeeded, failed with its exit code, stopped, or lost. A job is never retried behind your back, so a run never happens twice.

Built for long runs

The guard rails a training run needs.

Deadlines

Set a maximum run time. When it is reached, the job gets SIGTERM, a grace period to save a checkpoint, then SIGKILL.

Liveness

The job sends a heartbeat. If Surfra stops hearing from it, the machine is released so a hung run stops costing money.

Rides out network blips

Losing contact with Surfra for a moment does not kill the command. The agent keeps the run going and reconnects.

Call your apps

Allow a job to call specific apps, such as an embedding model, with a key that only works for those apps and only while the job runs.

Saved specs

Save the image, machines, env, and limits under a name, then rerun with one flag and a few new arguments.

Spot warnings

Spot machines are cheaper and can be taken back. Surfra tells you up front, since jobs are not retried.

Learn more

Where jobs fit.

FAQ

Common questions

How is a job different from a serverless app?

An app answers requests and scales between zero and many replicas. A job runs one command once on exactly one machine and ends when the command exits.

Are failed jobs retried?

No. A non-zero exit ends the job as failed. Submit it again, or click Run again in the dashboard, when you want another attempt.

Can I run a job on my own GPU?

Yes. Register the machine as a runner and put it first in the list. A cloud GPU can sit behind it as the fallback.

What happens if my balance runs out mid-run?

A running job is never stopped for money. Its logs say the balance is empty and the run keeps going.

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