Featured
Runs size their own GPUs
Leave[gpu] count out and Flash now picks the smallest shape your run actually
fits on, then ranks the fitting shapes by cost per step. Configurations that used
to be rejected for needing more memory than a single card holds - a large model
at long context, or at a high LoRA rank - now land on two or more cards instead
of failing.Setting count (or --gpus N) still pins a ceiling that never escalates, and
pinning [gpu] type without a count stays a single-card pin, so naming a
specific card never quietly bills you for four of them. When a run does not fit,
the error names the smallest count that would work. See
Multi-GPU runs.The RL optimizer batch has its own name
GRPO and OPD now authorprompts_per_step; batch_size is SFT-only, and each is
rejected under the other algorithm.They were never the same quantity. Under SFT a measured workload profile turns
batch_size into examples-per-update; under GRPO and OPD the key is the
optimizer batch. So batch_size = 1, the standard SFT out-of-memory workaround,
silently meant one prompt per update when copied into an RL config - the run
trained, logged, and billed at a fraction of the intended batch without erroring.
Porting an older RL config is a rename, not a copy: the defaults are 64 for
GRPO and 8 for OPD. See
the optimizer batch.Improvements
8 items
Improvements
8 items
- Environments:
[environment] pipis a config key again - declare the third-party packages your scorer imports and the worker installs them. Entry syntax is validated at submit, so a malformed or disallowed requirement fails before a GPU is allocated. A well-formed entry that cannot resolve - a misspelled name, an impossible version pin - still fails during install, after allocation. Pip options and URLs carrying credentials are rejected. See Scorer dependencies. - Flash CLI:
flash env listnow shows your organization’s published environments alongside your local sources, so the id you paste into[environment] idis in front of you. - Environments: Publishing a name another project in your organization already owns now explains that names are unique per organization and points at the dashboard page that shows the owner, instead of advising a retry that could never succeed.
- Training: An OPD run whose rollouts are nearly all truncated now
fails naming
max_completion_tokensand the truncated fraction, rather than exiting on an opaque subprocess status. - Training: SFT sequence packing now covers gated-delta-net models,
which every catalog model is, once the training image can reset example
boundaries. Previously those runs trained exactly one example per update,
so a configured
batch_sizedid not group anything. Runs that still cannot pack - multimodal rows - warn about that. - Training: A transient package-index failure while installing your environment’s dependencies is retried instead of failing the run. A real resolution or build failure stays terminal rather than burning GPU time on a retry that cannot succeed.
- Cost: A GRPO or OPD config that states neither
max_stepsnormax_examplesis now refused rather than quoted. The horizon came from the retained prompt pool, so an unbounded pool derived a single step and previewed a full run at one step’s price. - Self-hosting: Flash now also installs a
flash-cliconsole script. Theserveranddevextras pull inrunpod-flash, which claims the sameflashname, so on a plane hostflashcould silently be a different tool.flash-clialways reaches Flash.
Featured
Distil from image prompts
On-policy distillation accepts image-bearing prompts when the teacher can actually see them. Pick an image-capableteacher_model - qwen3.5-397b-a17b
or the new qwen3-vl-235b - and a text-only teacher is refused rather than
silently distilling from a teacher that never saw the pixels. Single-turn only.
See
image-bearing OPD.Improvements
3 items
Improvements
3 items
- Environments: On the managed service,
[environment] idtakes a publishednamespace/nameslug only;github:refs and GitHub URLs are rejected at submit and remain available when self-hosting. - Self-hosting: The OPD teacher-broker origin is now set with
FLASH_PUBLIC_URL; the formerFLASH_CONTROL_PANEL_URLis no longer read. It is the plane’s own worker-reachable origin, not the client’s--api-url. - Self-hosting:
flash loginwarns when given a non-loopbackhttp://URL, which would send the plane’s root credential in cleartext.
Featured
SFT cost comes from a measured profile, not a guess
SFT cost depends on the exact tokenized dataset, so--cost no longer estimates
it from a row count. The first --cost, --dry-run, or train for a config
starts a short profile run that loads your environment and tokenizes exactly the
rows training would consume, then quotes from that. It is measured once per exact
config and reused, so only the first submission waits. See
Cost and billing.[train] rejects knobs that do not apply to your algorithm
Setting group_size on an SFT run used to be silently ignored, which reads as a
setting that did nothing. Flash now rejects a knob the chosen algorithm never
consumes, and names the algorithm in the error, so a typo fails at parse time
rather than after a GPU is rented. See
Knobs are scoped by algorithm.Run Flash on your own GPU accounts
A self-hosted control plane now works against any subset of RunPod, Lambda, and Vast: configure the providers you have and the allocator only ranks those. Startup preflights the operator config and refuses to boot if it could not run a job, hosted-only CLI commands either work locally or say why they cannot, and the state directory, logging, and bind address are configurable. See Self-hosting.Improvements
6 items
Improvements
6 items
- Training:
lora_alphais authorable again in[train], defaulting to2 * lora_rank. Omit both it andlora_rankwhen warm-starting from an adapter - they are inherited. - Flash CLI:
flash train --gpus Nrequests a card count without editing the config. The count is a ceiling, and Flash rents the largest rentable shape at or below it. - Models: 4B and 9B now serve LoRA rank 128, matching what the serving app actually supports, and every catalog model accepts a 32768-token context.
- Models: Every trainable model must be in the catalog. An uncatalogued
modelis rejected when the config is parsed, before any GPU is allocated. - Environments: The worker installs one managed requirement set for every
environment, so
[environment] pipand the per-run[worker_env]table are no longer accepted. Import from thefreesoloSDK and the standard library. - Training: Multi-card runs are priced for every card they occupied, and NVLink scaling is only credited on combinations that actually have it.
Featured
Evaluate a deployed model against held-out suites
Put anevaluations.py beside your environment.py and flash env eval RUN_ID
scores those suites against the deployed adapter. Cases that never reached the
model are counted as errors instead of averaged in as zeros, so a half-broken
deployment reads as broken rather than as a weak model. Available in Flash 1.0.34.Gate a script on a deploy instead of polling
flash models deploy --wait blocks until the revision is actually servable and
exits non-zero if it fails, so a deploy can be chained in automation.Improvements
5 items
Improvements
5 items
- Environments:
flash env testcan drive the split you actually train on with--splitand--param, and now fails when every replayed gold answer scores zero. - Environments: Scope an eval with
--suite, cap it with--max-cases, and raise--concurrencyto run cases in parallel. - Serving: Interrupting
flash models deploy --waitstops waiting, not the deployment. - Flash CLI:
flash train --dry-runchecks your org balance against the quote, so an insufficient balance fails before you submit. - Flash CLI:
flash env setupscaffolds a starterevaluations.py.
Featured
Turn your app’s live traffic into a training set
Point an OpenAI-compatible client athttps://api.freesolo.co/v1 and Freesolo
records your app’s chat completions against a project, then hands them back as a
training dataset with flash traces export. Secrets are redacted before anything
is forwarded or stored. See Tracing.Thinking models split reasoning out of content
Reasoning now comes back in reasoning_content and only the answer in content,
in both JSON and streaming responses, so the </think> separator no longer leaks
into content.Improvements
1 item
Improvements
1 item
- Serving:
flash models chatfolds the two fields back into one<think>...</think>block, so the CLI still shows the full generation.
Featured
Every run and environment belongs to a project
Training configs take a required top-levelproject UUID, and flash env push
and flash env delete take a required --project. Flash validates the project
against your organization before allocating a GPU, so a wrong or missing project
fails the submit instead of starting paid work. Available in Flash 1.0.25.Run and serving commands are grouped
flash status, log, cancel, and checkpoints are now flash runs status,
runs log, runs cancel, and runs checkpoint. flash deploy, chat,
undeploy, deployments, and export are now flash models deploy,
models chat, models undeploy, models deployments, and models export.
Listing base models is flash models list.Improvements
3 items
Improvements
3 items
- Platform: Deploy and tear down serving from the dashboard, without switching to the CLI.
- Platform: A project selector in the top bar moves between projects from anywhere in the dashboard.
- Flash CLI: Create and find projects with
flash projects createandflash projects list.