Methods
GRPO is the default. All methods support LoRA and QLoRA.
grpo_agentic is being rebuilt and is not currently runnable as a managed method. To run multi-turn, environment-based RL today, use a custom script with your own framework (for example verl) and environment.The training loop
What happens at each transition:queued: job row written (HTTP 402 at submit if the workspace has no billing account). No spend yet. Veri tries to acquire a GPU instance from here; if no zone has capacity, the job goes straight tofailedwithCAPACITY_UNAVAILABLE. On GCP the job staysqueuedfor up to about 15 minutes while Veri waits for Flex-start capacity, and longer when the one GCP GPU is in use (see GCP).provisioning: Veri has leased a GPU and the instance boots.started_atis stillnull. Once the instance is acquired, the GPU is rented and cost accrues from this point, even before the first training step. If you cancel the job before it reachesrunning, that cost is waived and the job is not charged (see Training job charges). A job that never secures a GPU (for exampleCAPACITY_UNAVAILABLE) rents nothing and is not billed.configuring: the instance is up and the worker is setting up its environment.running: the worker has started the training process (dataset and model load, then training steps).started_atpopulates. Metrics start streaming with the first step.completed | failed | cancelled: pod auto-terminates. Cost is attributed (cost_attributed_at). Stripe credit is deducted (billing_deducted_at). The full stdout is uploaded to S3 and available viaGET /v1/training_jobs/{id}/logs/full.
Failure modes
When a job ends infailed, error.code carries one of:
error carries code, message and attribution (there is no log_tail field). For triage, read the last worker lines in the dashboard’s Logs tab or fetch the full stdout, uploaded every 10 seconds and retained after the job ends, via GET /v1/training_jobs/{id}/logs/full.
Who the failure belongs to
A failed job also carrieserror.attribution:
Credits appear on the job as
refund with status (approved, credited, pending or denied) and amount_usd, and as a job_refunded entry in the job’s events. Multi-GPU jobs run a hardware check before any of your code and after a failure; the result is what makes a hardware_error verdict, never text in the log.
Checkpoints
Every managed job saves its trained weights as a final artifact when training completes. Managed jobs can also save intermediate checkpoints while they run, so a job that fails or is cancelled at hour 19 of 20 still leaves weights (and the optimizer state) to download or to continue training from withresume_from. See Checkpoints and resume for the knobs (checkpoint_every, checkpoint_keep), what a checkpoint holds, retention, and how to resume.
Submitting a job
wait() streams the job’s logs to your terminal while it polls: provisioning,
installs, and training steps appear live with no extra flags. Streaming is
best-effort: if the log stream drops, wait() keeps polling silently and still
returns the finished job. Pass stream=False for quiet polling only. You can
also tail any job from another terminal:
[no logs available yet] and exits 0. A finished job whose log was never uploaded fails instead, with log was never uploaded for this job and a non-zero exit, since no log will ever arrive for it.
download() fetches the complete Hugging Face checkpoint — weights plus
adapter config and tokenizer files — into ./checkpoints/<job_id>/, a
directory you can load directly with from_pretrained(...) or push to the
Hugging Face Hub.
Choosing a launch region
Capacity is per-region. If your job fails withCAPACITY_UNAVAILABLE, another region may have the GPU you need right now:
region="us-west-2" to client.training_jobs.create or the @training_job decorator, or run veri train --region us-west-2. Omit it to launch in the default region. Unknown or not-yet-available regions are rejected at submit with the list of valid options.
Choosing a GPU provider
Veri supports multiple GPU providers: AWS (NVIDIA, default), Vast.ai (NVIDIA marketplace), DigitalOcean (H100 droplets), and GCP (a single A100 80GB or H100 80GB). Passprovider at submit time to choose where your job runs:
This snippet uses the low-level client and assumes you have already uploaded a dataset (the
dataset it references) and have a reward file on disk; the reward source is attached to the job inline. For a runnable end-to-end version with @training_job + veri train, see the Managed GRPO quickstart.kind = "train" in the TOML config. See the CLI training reference for the full schema.
Where to go next
Managed GRPO quickstart
End-to-end on a small model: one decorator, one command.
Deploy your checkpoint
Skip downloading — serve from Veri with an OpenAI-compatible API.
Track it with W&B
Live loss and reward charts for your run.
CLI training commands
veri run, veri jobs, reward files.
