What you choose
A training job runs on clients you pick and one FL server the platform picks.
1. VRAM per client
Training holds weights, gradients, optimizer state and activations. Optimizer state dominates a full fine-tune; base weights dominate LoRA.
Add 10–30% for activations with gradient checkpointing on (the examples turn it on). Activations grow with batch × sequence length, or batch × image size.
Measured on the example jobs
Set the GPU memory minimum from this table plus activation headroom; the platform checks it on one card. Some families advise against 4-bit training: for Qwen3.5 use bf16 LoRA, which puts a 27B at ~56 GB.
2. How many clients
Mixing GPU models works: four runs across two GPU generations landed within 0.09 percentage points. The smallest card sets the model size (every client holds the whole model); the slowest sets the round time, so size shards by card speed. T4 and RTX 2080 Ti have no bf16 and train in fp16.
3. Disk, RAM and CPU per client
4. The FL server
The training job’s central server. The platform picks it at submit. Each round it sends the current model to every client, waits for all of their results, averages them weighted by sample count, and starts the next round. It also reports the job’s status. It trains nothing and needs no GPU.
What it needs depends on what travels each round:
per round = 2 × 8 × 4 bytes × 8B params = 512 GB
at 10 Gbps ≈ 7 minutes at 1 Gbps ≈ over an hour
server RAM ≈ 12 bytes × 8B ≈ 96 GB- LoRA and QLoRA at any model size: the defaults work.
- Full weights above ~1B: set RAM to ~12 bytes per parameter, disk to two copies of the model, turn on dedicated, and raise the result timeout from its 300 s default.
- Many clients or long runs: a reserved server keeps other jobs off it.
A server reserved for you is used first; otherwise the platform picks a shared one that meets your minimums. If none does, the launch stops and the wizard offers to order one.
5. Rounds, time and cost
Total optimizer steps decide quality. Match the centralized recipe:
steps_per_round = shard_size ÷ batch_size
num_rounds ≈ centralized_total_steps ÷ (steps_per_round × local_epochs)
wall-clock ≈ rounds × (slowest client's local time + exchange)
cost ≈ clients × GPU-hour price × wall-clockFewer local epochs and more rounds beat the reverse. Measured: job_classify at 4 clients × 5 rounds × 148 steps matched the centralized step budget and its accuracy (89.4% vs 89.1%).
When a client can’t keep up
Rounds wait for every client, so one client’s failure fails the job.
By job type
Full-weight training is practical up to ~1B parameters, since weights travel in fp32 every round. Above that, use LoRA or QLoRA: the adapter is what you get back and what you serve.
Before you submit
Worked examples
- The shard count sets the client count: Dataset format & sharding.
- Measured time and cost of a real run: Training benchmarks.