TL;DR
If you launch training through a cookbook recipe (rl_loop, sft_loop, dpo_loop, orpo_loop, igpo_loop), you don’t have to call any checkpoint APIs yourself. Set two config fields and the recipe handles save, resume, and promote:
dcp_save_interval=N(top-levelConfigfield on every recipe) — save resumable checkpoints every N stepsoutput_model_id="my-model"— promote the final checkpoint to a deployable Fireworks model
log_path resumes from the last saved checkpoint automatically.
Config fields
Resume
Automatic (same log_path)
Just rerun with the samelog_path and the recipe resumes. It queries the control plane for the newest resumable checkpoint on the trainer job and reloads weights and optimizer state. The step counter and the cookbook’s data_consumed counter are restored from dataloader.json in log_path.
From another job
Promoting a checkpoint manually
If you want to promote an arbitrary checkpoint after training (not just the final one), use the cookbook’s promote script:--checkpoint-name <name> to promote a specific one.
You can also call the API directly — see Saving and Loading — Promoting.
Advanced internals
Most users can stop reading here. The sections below cover what the recipe does internally — useful only if you’re forking a recipe, calling the SDK directly, or debugging a checkpoint that doesn’t promote. The full SDK-level reference lives in Saving and Loading.
What gets saved, where
The recipe interacts with two surfaces:
There is no
checkpoints.jsonl registry — the control plane is queried at resume / promote time.
Two axes: resumable and promotable
When the recipe saves a checkpoint, it picks two independent capabilities:
Periodic saves use
resumable=True only. The final save uses both. RL weight sync saves sampler checkpoints and syncs their snapshot identities separately from DCP resume saves.
Forking a recipe
If you forkrl_loop.py (or another ported recipe) and need to drive checkpointing yourself, instantiate TrainingCheckpoints:
save_state / save_weights_for_sampler_ext / promote_checkpoint to the SDK and uses the control plane as the source of truth for resume and promotion. Recipes pass the SDK-managed service client as the control-plane checkpoint client. The full API surface those calls expose is documented in Saving and Loading.
Checkpoint kinds
This subsection is the canonical reference for checkpoint kinds and promotability across the stack — other pages link here. Three separate layers of the stack each have their own “type”, and confusing them is the usual reason a promotion fails. They are not synonyms:
When the cookbook saves with
promotable=True, it always calls the SDK with checkpoint_type="base", which the server detects as INFERENCE_BASE (full-param) or INFERENCE_LORA (LoRA). Both are promotable. The non-promotable INFERENCE_ARC_V2 only happens if you bypass the cookbook and call save_weights_for_sampler_ext("delta") on a full-parameter run.
Promotability cheat sheet
“Promotable” means the server will accept the blob for promotion — i.e. the checkpoint showspromotable=True in list_checkpoints. To actually promote, you need the checkpoint name plus source_job_id and base_model.
For SDK-level details on each row (full method signatures, base-vs-delta semantics, weight-sync lifecycle), see Saving and Loading.
Related guides
- Saving and Loading — SDK-level reference for save / load / promote
- Training and Sampling — SDK-managed sampler refresh lifecycle
- Cookbook RL — full GRPO walkthrough