Skip to main content
TrainingEnvironmentsFlash CLI
2026-08-12

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 author prompts_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.
  • Environments: [environment] pip is 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 list now shows your organization’s published environments alongside your local sources, so the id you paste into [environment] id is 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_tokens and 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_size did 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_steps nor max_examples is 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-cli console script. The server and dev extras pull in runpod-flash, which claims the same flash name, so on a plane host flash could silently be a different tool. flash-cli always reaches Flash.
TrainingEnvironmentsSelf-hosting
2026-08-10

Distil from image prompts

On-policy distillation accepts image-bearing prompts when the teacher can actually see them. Pick an image-capable teacher_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.
  • Environments: On the managed service, [environment] id takes a published namespace/name slug 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 former FLASH_CONTROL_PANEL_URL is no longer read. It is the plane’s own worker-reachable origin, not the client’s --api-url.
  • Self-hosting: flash login warns when given a non-loopback http:// URL, which would send the plane’s root credential in cleartext.
Flash CLITrainingSelf-hosting
2026-08-09

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.
  • Training: lora_alpha is authorable again in [train], defaulting to 2 * lora_rank. Omit both it and lora_rank when warm-starting from an adapter - they are inherited.
  • Flash CLI: flash train --gpus N requests 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 model is rejected when the config is parsed, before any GPU is allocated.
  • Environments: The worker installs one managed requirement set for every environment, so [environment] pip and the per-run [worker_env] table are no longer accepted. Import from the freesolo SDK 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.
Flash CLIEnvironmentsServing
2026-07-31

Evaluate a deployed model against held-out suites

Put an evaluations.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.
  • Environments: flash env test can drive the split you actually train on with --split and --param, and now fails when every replayed gold answer scores zero.
  • Environments: Scope an eval with --suite, cap it with --max-cases, and raise --concurrency to run cases in parallel.
  • Serving: Interrupting flash models deploy --wait stops waiting, not the deployment.
  • Flash CLI: flash train --dry-run checks your org balance against the quote, so an insufficient balance fails before you submit.
  • Flash CLI: flash env setup scaffolds a starter evaluations.py.
PlatformTracingServing
2026-07-28

Turn your app’s live traffic into a training set

Point an OpenAI-compatible client at https://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.
  • Serving: flash models chat folds the two fields back into one <think>...</think> block, so the CLI still shows the full generation.
Flash CLIPlatformProjectsServing
2026-07-27

Every run and environment belongs to a project

Training configs take a required top-level project 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.
  • 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 create and flash projects list.
PlatformProjects
2026-07-24

Organize runs, environments, and traces into projects

Group related work under an organization-level project and switch between projects from the platform.
PlatformTraining
2026-07-22

Watch training as it happens

Live metrics, run logs, and sample completions in the platform, plus per-step rewards from the Flash CLI.
ServingTraining
2026-07-21

7-10x faster generation on 9B and 27B models

SFT training up to 48% faster

Lower memory use and faster data processing also unlock longer training contexts.
  • Training: Pure multi-turn GRPO tasks with independently gradable turns can choose per-turn or per-episode credit.
Models
2026-07-20

Train and serve multimodal models

Use image inputs with multimodal SFT, GRPO, on-policy distillation, and chat serving.
Models
2026-07-19

Qwen3.6-27B is now available

Train and serve Qwen3.6-27B on Freesolo.
ServingTraining
2026-07-17

32k context for training and serving

Train and serve supported models with context windows up to 32k tokens.