Which approach to use
Use the path that matches your current training stage:- Your serverless training session is still active: use in-session sampling.
- You have a promoted model ID: use a preemptible deployment. This works regardless of whether the LoRA was trained with serverless, dedicated, or managed training, or imported.
- Your dedicated training run is still active: use its inference deployment and refresh it from sampler snapshots. See Dedicated training and sampling.
In-session sampling (serverless training)
In-session sampling is available only during an active serverless training session, and the base model must be available in the serverless pool. It does not evaluate an adapter produced by dedicated training after that run ends. There is no serverless chat endpoint for your adapter. Open a sampling client bound to a sampler checkpoint.sampler.sample() generates completions from that checkpoint, which you score with your own metric.
Use the sampler checkpoint returned by save_weights_for_sampler, not a promoted model resource (accounts/<ACCOUNT_ID>/models/<FINE_TUNED_MODEL_ID>). Promoted models are for on-demand deployment and cannot be passed to create_sampling_client.
The following save-and-sample sequence comes from the serverless quickstart and the cookbook serverless_rl example. Set up prompt, tokenizer, and params as shown in that example.
sampler.sample(...) is the evaluation call. Repeat it over held-out prompts, then close the sampler. The Countdown example scores with composite_reward; replace that with your evaluation metric.
For checkpoint and promotion details, see Saving and loading checkpoints on the serverless training page.
Sampler checkpoints live in the training session. If the session is gone, you cannot open a sampling client from that checkpoint. Promote checkpoints you need to retain, then evaluate the promoted model with a preemptible deployment below.
Preemptible deployment
If you want to evaluate a promoted model without holding dedicated on-demand capacity, create a preemptible deployment. It borrows idle reserved GPU capacity instead of reserving GPUs exclusively for you. For LoRA, this includes adapters trained with serverless, dedicated, or managed training, as well as imported adapters. Point the deployment at your promoted fine-tuned model ID, not the base model. It can be reclaimed (preempted) at any time. Fireworks does not guarantee how many GPUs are available or how long the deployment stays up, but in practice it typically lasts long enough to finish a training eval.How it works
Passing--preemptible to firectl deployment create opts the deployment into capacity borrowing:
- The deployment runs on reserved nodes that are currently idle.
- When the capacity owner needs those GPUs back, your deployment can be preempted.
Requirements
--preemptible takes effect only on firectl 1.7.26 or newer. Check with firectl version. The flag is not present in older builds. Upgrade if you are below 1.7.26.
Behavior
- Training evals only. A preemptible deployment can be preempted mid-request. Treat disappearance as a normal outcome, not an error.
--preemptibleis immutable. It is set at create time and cannot be toggled on or off afterward. To change it, delete the deployment and create a new one.- Clean up when done. Delete the deployment after your eval so you stop holding the borrowed capacity.
Create the deployment
<FINE_TUNED_MODEL_ID>: the trained model to eval, not a base model.<YOUR_DEPLOYMENT_ID>/<YOUR_DISPLAY_NAME>: a name of your choice for the eval deployment.<DEPLOYMENT_SHAPE>: the deployment shape to use for that model.
Worked example
Run the eval and tear down
Check that the deployment is ready, then send eval requests to the trained model:Next steps
Deploying Trained Models
Live merge or multi-LoRA for production serving