flash errors print one clean line; add the global --debug flag before
the subcommand (e.g. flash --debug train config.toml) for the full traceback.
Installation & CLI
flash: command not found
flash: command not found
flash command. Its install location must be
on your PATH.- If you installed with
uv tool install freesolo-flash, make sure uv’s tool bin directory is on yourPATH(runuv tool update-shell, then restart your shell). - Confirm the install with
flash version.
I installed `flash` but it's the wrong tool
I installed `flash` but it's the wrong tool
freesolo-flash. The bare flash name
belongs to an unrelated project. Reinstall the right one:Authentication
flash login fails or commands report 401 / invalid key
flash login fails or commands report 401 / invalid key
flash train --cost never submits a training run, but on
an SFT config it does authenticate.- Create a key in your dashboard at freesolo.co.
- Log in once:
flash login --api-key <your-key>(or setFREESOLO_API_KEYinstead of passing--api-key). - Confirm who the stored key resolves to:
flash whoami.
Pointing at a non-default Freesolo deployment
Pointing at a non-default Freesolo deployment
https://api.freesolo.co. To target a different
deployment, set --freesolo-url (or FREESOLO_BASE_URL) at login. See
Auth & identity.Environments
flash env push fails
flash env push fails
environment.py file with a
load_environment() function that returns a Freesolo environment. Then:your-org/math) to put in your config’s
[environment] id. The folder needs an environment.py at its root, a
--name whose namespace matches your org (or a bare name), and a
--project UUID your org can reach - see
Environments.A run fails with ModuleNotFoundError
A run fails with ModuleNotFoundError
flash train --dry-run checks your config at submit time. On GRPO, OPD, and
an already-profiled SFT config it does not run your environment, so it cannot
prove every import resolves; only an uncached SFT dry-run loads it, by way of
the profile run. If flash runs log <run-id> shows your environment.py
failed while importing a package, that package is not available on the worker.The worker installs one managed set - the freesolo SDK and the training
stack. To add to it, declare the package under [environment] pip, which is
appended to the managed set rather than replacing it, then submit again. See
Scorer dependencies for the
accepted form.If you would rather not add a dependency, rewrite the import against the
standard library - urllib.request and json instead of a vendor HTTP
client, for example - or move that logic out of the environment, then
republish. See
Dependencies are managed.Flash also does not install from a pyproject.toml, requirements.txt, or
lockfile bundled with the environment; those describe your local setup only.flash env pull says the archive is too large
flash env pull says the archive is too large
I republished an environment and want to verify the data
I republished an environment and want to verify the data
flash env pull to inspect the exact packaged file:Environment won't import / name collision
Environment won't import / name collision
What id do I reference in my config?
What id do I reference in my config?
[environment] id must be a published Freesolo environment id, produced
by flash env push, for example your-org/your-env.
A local file path is not a valid id, so publish it first or reference an
existing published id. Use flash env pull your-org/your-env only when you
want a local copy to edit or inspect.Configuration
unsupported model '...'
unsupported model '...'
model must be one of the ids in the curated catalog. List the valid ids:Unknown config key or section rejected
Unknown config key or section rejected
[train] keys at parse time.
Check the key against the
configuration reference and validate the config:[train] keys your CLI version does not recognize, which
usually means an outdated CLI.unsupported algorithm
unsupported algorithm
algorithm must be sft (the default), grpo, or opd. Fix the value and
re-validate with --dry-run.Run rejected: training context exceeds serving context
Run rejected: training context exceeds serving context
train.max_context_tokens; GRPO and OPD check
the rollout prompt plus max_completion_tokens. Lower those to at or below
the cap - see context
window.max_context_tokens leaves no prompt budget
max_context_tokens leaves no prompt budget
max_completion_tokens out of
max_context_tokens, so a context that is not larger than the completion
budget leaves nothing for the prompt itself. That is rejected at parse time,
before a GPU worker is provisioned:max_context_tokens above max_completion_tokens, leaving enough room
for your longest prompt. Note that thinking = true raises the default
completion budget, so enabling it can trip this on a config that previously
parsed.Warm-start rank, alpha, or revision mismatch
Warm-start rank, alpha, or revision mismatch
train.lora_rank and
train.lora_alpha alongside init_from_adapter, and match model_revision
exactly. --dry-run resolves and validates the source. See Warm-start
safely.The run used a different GPU than expected
The run used a different GPU than expected
[gpu] type to an active
validated class from flash gpus. Card count is auto-sized only when you
omit type and count; [gpu] count and --gpus N pin a ceiling that
never escalates, and pinning type alone stays a single-card pin. See
Multi-GPU runs.Run fit and resource use
GRPO costs or fits differently than SFT
GRPO costs or fits differently than SFT
max_completion_tokens or max_context_tokens, or start with SFT. Lowering
group_size reduces cost too, but it does not make a run that does not
fit fit - GRPO’s memory floor is effectively flat in the group. The next
entry below covers what to change when a run does not fit.Pre-flight says the run is too large
Pre-flight says the run is too large
[gpu] count (or --gpus N), that ceiling is the usual cause:
the error names the smallest count that would fit, so raise it or drop the
pin and let Flash auto-size.When nothing fits even at eight cards, the error names the knobs that
actually shrink that algorithm. They are not the same across algorithms:- GRPO responds to
max_context_tokens,max_completion_tokens, andlora_rank. Required memory is effectively flat inprompts_per_step, so lowering it does not help here. - OPD rollout concurrency is
prompts_per_step x group_size, so lowering either shrinks the run, as domax_completion_tokensandmax_context_tokens. Distillation needs no group variance, sogroup_size = 1is fine. - SFT responds to
max_context_tokens,lora_rank, andbatch_size.
thinking = true, reasoning and the final answer share the
same token budget.Training runs
When am I charged for a run?
When am I charged for a run?
flash train config.toml --cost, and see Charges and
cancellations.My run is warming up for many minutes
My run is warming up for many minutes
flash runs log <run-id> -f prints a
warming up (stage=...) line during this phase; it can take several minutes,
occasionally 15-20 for a large model, and setup time is not billed. Do not
cancel: the run has not
stalled. Once training starts, -f streams a per-step heartbeat (reward,
grad_norm, kl, entropy, completion length, and more), so a quiet stretch
is throttled logging, not a dead run.Run submit reports insufficient balance
Run submit reports insufficient balance
GRPO reward is stuck at 0
GRPO reward is stuck at 0
Reward is stuck at 1 (or never moves)
Reward is stuck at 1 (or never moves)
Reward collapses to ~0 with `thinking = true`
Reward collapses to ~0 with `thinking = true`
thinking = true, the model emits a reasoning trace before its answer,
and that trace counts against the same max_completion_tokens budget as
the answer. A max_completion_tokens tuned for a non-thinking run is usually
too small once reasoning is added: the reasoning eats the budget and the actual
answer is truncated or never emitted. If your reward parses the answer (e.g.
extracts a JSON object), it then sees nothing and scores ~0 across the board —
even though the model is “working”.Fixes:- Raise
max_completion_tokensso the reasoning and the answer both fit (e.g. a task that needs ~200 answer tokens may needmax_completion_tokens = 2048with thinking on), and make suremax_context_tokensis large enough to hold the prompt plus that budget. - Optionally set
thinking_length_penalty_coefto nudge the model toward shorter reasoning so the answer reliably lands inside the budget. - Score the answer text by default. In thinking mode
response_textremains string-compatible answer text and also exposesresponse_text.completion,response_text.thinking, andresponse_text.rawfor rewards that intentionally inspect reasoning.
max_tokens or it returns empty content and
the judge silently scores 0.OPD run underperforms SFT, or its rollouts never terminate
OPD run underperforms SFT, or its rollouts never terminate
max_completion_tokens without stopping:- Start from an SFT adapter with the desired stopping behavior.
- Give the teacher a hard answer or reasoning budget in the system prompt.
- Add
stop_sequenceswhen the task has reliable textual terminators. - Track
truncated_rolloutsto diagnose termination.
max_completion_tokens when you see that.OPD supports single- and multi-turn environments but not tool-calling ones,
and kl_penalty_coef must be greater than 0.Did pressing Ctrl-C kill my run?
Did pressing Ctrl-C kill my run?
Ctrl-C during flash train detaches you; the run keeps going
on Freesolo. Re-follow it any time, and cancel explicitly if you mean to:flash runs cancel takes a long time to return
flash runs cancel takes a long time to return
cancelled when it completes.A capacity or resource-fit issue interrupted training
A capacity or resource-fit issue interrupted training
flash runs log <run-id> -f or poll status with
flash runs status <run-id> -f. If the same shape repeatedly fails before
useful metrics, see Run fit and resource
use for the knobs that shrink your algorithm.Serving
Deploy fails: run has no run-level adapter
Deploy fails: run has no run-level adapter
flash models deploy <run-id> cannot serve it. The error lists the run’s
saved checkpoint steps and the exact command to use — deploy one of them
instead:Deploy or the first request is slow
Deploy or the first request is slow
How is serving billed?
How is serving billed?
flash models undeploy <run-id> disables the alias and immutable revisions.Calling the endpoint from my own code is rejected
Calling the endpoint from my own code is rejected
openai_base_url from flash models deployments --json, set model to the run
alias or a full immutable revision, and pass your Freesolo API key.401: missing or invalid key.402: insufficient org balance.403: the key’s org does not own the adapter.503: temporarily unavailable; retry with backoff.
Getting help
Still stuck? Reach out through freesolo.co/contact with the run id (flash runs),
the failing command, and its --debug traceback.