Train on remote GPUs
Fine-tunes Gemma 4 (4B, 12B and 31B) with LoRA adapters, and serves the result for testing. Modal is the first training provider supported, and a job can be started from the server, one CLI or the sidecar's HTTP API.
- Three model sizes: 4B trains on an A10G, 12B on an A100 and 31B on an A100 80GB, all through Unsloth. Inference runs in a separate, lighter image with plain transformers and peft.
- Started from the server: the endpoint
POST /v1/gb/training/jobscalls the sidecar through the Go client, which starts the job and gets back aTrainingJob(job ID, model size, steps, start time). - Every job recorded: each started job becomes a row of the
gb_training_job_runstable, on SQLite and PostgreSQL. - Full loop: upload a dataset, validate it, train, watch live loss progress, then generate with the fine-tuned adapter and collect eval examples.
- Sidecar REST API:
modal serve app.pyexposes/training/job_start,/training/job_progress,/infer/queryand the/datasetsand/evalsendpoints (see the docs). - Built for many providers: Modal is only the first. Everything provider-specific sits behind one small provider interface, designed so more training providers (AWS, for example) can be added to train on other platforms without touching the rest.
- Persistent storage: separate volumes for datasets, fine-tuned adapters, training progress, eval data and the base-model cache, so models are not downloaded twice.