AI Fabric · Serverless GPUs for Python Opening gradually

You probably don't need an H100 to train FLUX on your own images.

  • LoRA on FLUX.1-devpeak 10.8 GiB€0.40/h interruptible

Set the GPU type and count in Python with bladekit. Pay by the minute while your container runs.

€5 in free credits for every new customer.

Request access
pip install bladekit
train_flux_lora.py
import bladekit
 
app = bladekit.app("flux-lora-a4500")
image = bladekit.Image.from_catalog("fabric/torch").pip_install(
    "diffusers>=0.31.0", "transformers", "peft",
    "bitsandbytes>=0.45.0")
 
@app.function(
    gpu="RTX-A4500",  # 20 GB card, ~19.6 GiB usable
    image=image, timeout=7200, memory=32768,
    volumes={"/data": data_vol, "/output": out_vol},
    secrets=[bladekit.Secret.from_name("hf-token")],  # gated repo
)
def train_flux_lora(base_model="black-forest-labs/FLUX.1-dev",
                    resolution=512, lora_rank=16):
    # NF4 transformer, 8-bit optimiser, text encoders cached then
    # freed: our run peaked at 10.8 GiB with resolution=1024.
    ...
From our FLUX.1-dev LoRA tutorial.
  1. blade run job.py

    .remote() calls run on a GPU and stream logs to your terminal.

  2. blade serve app.py

    Reloads your code on the GPU when you save.

  3. blade deploy app.py

    Deploys the file's endpoints and crons as a new version. blade app rollback restores an older version.

What runs on it.

Train & fine-tune

Train on interruptible cards.

Use Unsloth, TRL, PEFT, diffusers or veRL.

  • Resume after a reclaim

    Save checkpoints to a volume. Use @app.on_preempt to save when an interruptible card is reclaimed. retries re-queues the run.

  • Up to eight cards

    gpu="RTX-A4500:8" gives one container eight GPUs on the same machine.

Illustration

Inference

Serve over HTTPS.

Run vLLM, SGLang, FastAPI or your own server behind an HTTPS URL.

  • Scaled on the queue

    Autoscale(vllm_target_waiting=4) scales on vLLM's queue, up to max_replicas. scale_down_idle_seconds sets how long an idle replica stays up.

  • Works with the OpenAI SDK

    Point the OpenAI client at your vLLM or SGLang URL. Streaming and WebSockets work.

  • Non-interruptible minimum

    min_replicas=1, reserved_replicas=1 keeps one replica on non-interruptible capacity. Extra replicas run interruptible.

Illustration

Sandboxes

Run the code your agent writes.

Sandbox.create() starts a gVisor container.

  • Isolated by default

    gVisor sits between the code and the host. block_network=True cuts external network access.

  • Sandbox API

    exec runs code; write_file and read_file handle files. Expose a port with tunnel(port).

  • CPU or GPU

    €0.05 per vCPU-hour without a GPU. Add gpu="RTX-A4500" when the task needs one.

Illustration

Batch & jobs

Batches run without your laptop.

.map() spreads up to a million inputs over GPU containers.

  • Track batch progress

    spawn_map() hands back a handle after the upload. Check progress with blade map status from any machine.

  • Cron in the same file

    Add schedule=bladekit.Cron("0 3 * * *") and deploy. It runs every night (UTC), and blade cron trigger runs it now.

  • Async jobs with webhooks

    .spawn(webhook=…) on a deployed function calls your URL, signed, when the result is ready.

Illustration

Your GPU is a
keyword argument.

Four RTX A4500s give you 80 GB of GPU memory, as much as an H100, for €1.60 an hour. Our Models API runs on the same cards.

app.py
@app.function(
    gpu="RTX-A4500:4",
    gpu_class="interruptible",
)
def job(): ...
GPU memory
80 GB
Price
€1.60/h
€0.0267 per minute
Weights that fit
≈32B parameters in 16-bit
≈128B in 4-bit

As much GPU memory as one H100, split over four cards on one machine.

Weights only; 20% of memory left for the KV cache.

Billed by
the minute.

Billed from container start to stop, including model loading and the five idle minutes before scale-down. Image pulls aren't billed. The idle timeout is configurable.

Replica billing

RTX A4500 · interruptible · €0.40 per hour · €0.0067 per minute

Select a phase for billing details.

What one replica costs, phase by phase (example)
PhaseDurationBilled
Queued3 s—
Pulling image41 s—
Loading model52 s€0.0058
Serving14 min 8 s€0.0942
Idle5 min€0.0333
Stoppeduntil the next request€0
Total20 min billed€0.1333
Illustration

Prices

  • NVIDIA RTX A4500 20 GB

    €0.40per hour

    interruptible · €0.70 non-interruptible

  • NVIDIA RTX 2000 Ada 16 GB

    €0.20per hour

    interruptible · €0.50 non-interruptible

  • CPU sandboxes and jobs

    €0.05per vCPU, per hour

    billed on requested vCPUs

Beta prices, excluding VAT, as of 22 October 2026. GPU prices include CPU and RAM. Interruptible is the default and can be reclaimed.

Included in the SDK.

FAQ

When do I need an H100?

For speed or large-scale training. We don't offer H100s today.

I'm coming from Modal. What changes?

Apps, functions, classes, images, volumes, .remote() and .map() mostly map directly. Check the GPU names, fabric/ images and endpoint auth. .spawn() queues calls on a single container; use .map() for parallel work.

Do I need a Dockerfile?

No. Start from fabric/torch, fabric/vllm or fabric/sglang and add packages in Python. Your own Dockerfile or registry image works too.

Which Python versions work?

The SDK requires Python 3.10 or later. With blade run, local Python must match the image version (3.12 by default, 3.13 available). blade deploy has no version-matching requirement.

Where does it run?

In France. Shadow operates the GPUs. Images and volumes are stored on OVHcloud. More in how we handle data.

How do I get access?

Install the SDK from PyPI. To run on the GPUs, request access and tell us what you want to run.

Deployment guides by model

Contact the team

Loading the form…