Overview
FiretitanServiceClient is the recommended direct SDK entry point. In the managed path, it creates or reattaches the FireTitan trainer, optional reference trainer, and optional inference deployment, then returns Tinker-compatible training and sampling clients.
For most direct SDK code, create it with FiretitanServiceClient.from_firetitan_config(...). The bare constructor is still useful when you already have a trainer endpoint URL, but that is a lower-level compatibility path.
FiretitanServiceClient
from_firetitan_config(...)
Create a lazy SDK-managed service. The trainer and deployment are provisioned on the first client call, usually create_training_client(...):
The managed service exposes resolved metadata after provisioning:
Bare constructor
base_url is the trainer endpoint URL from TrainerServiceEndpoint.base_url. Use this only when you intentionally manage trainer lifecycle yourself. New user code should use from_firetitan_config(...).
create_training_client(base_model, lora_rank, user_metadata)
Creates a FiretitanTrainingClient for training operations:
Connecting to an existing trainer
If you already have a running trainer (e.g. from a previous session), connect directly by URL:create_base_training_client(base_model, user_metadata=None)
Creates a base-only client on the same trainer session. Use this as a frozen reference for LoRA KL/reference logprobs without launching a separate forward-only trainer:
forward_backward, forward_backward_custom, or optim_step on this client; it is for reference forward passes only.
create_reference_client(base_model, lora_rank=0, user_metadata=None)
Create a frozen reference client for KL/DPO baseline logprobs:
reference_training_shape_id, or explicit reference_trainer_job_id use a separate forward-only reference trainer owned by the service.
create_sampling_client(model_path=None, ...)
Return a Tinker-shaped sampling client backed by the SDK-managed deployment. When model_path is provided, the SDK first syncs that sampler snapshot to the deployment:
create_deployment_sampler(model_path=None, tokenizer=None, concurrency_controller=None)
Return the FireTitan-native DeploymentSampler directly. Use this when you need tokenized completions, inference logprobs, routing matrices, or adaptive concurrency:
hotload_sampler_snapshot(model_path)
Low-level method for syncing a previously saved sampler snapshot into the SDK-managed deployment without constructing a sampler:
FiretitanTrainingClient
The training client returned bycreate_training_client(). Core training RPCs like forward(...), forward_backward_custom(...), optim_step(...), save_state(...), and load_state_with_optimizer(...) return futures. Fireworks convenience helpers like save_weights_for_sampler_ext(...), list_checkpoints(), and resolve_checkpoint_path(...) return concrete values directly.
Logical batches and parallel submission
Oneforward(...), forward_backward(...), or forward_backward_custom(...) call defines one logical batch. Pass every datum that should run together in that call.
For large logical batches, the SDK may split the request into smaller transport chunks. It submits those chunks in parallel for forward passes, backward passes used by forward_backward_custom(...), and combined forward_backward(...) passes. The chunks remain parts of the same logical batch; they do not become independent trainer batches.
To preserve that boundary, the SDK reserves consecutive sequence IDs, submits chunks 2..N in parallel, and submits chunk 1 last. The trainer holds the later chunks until chunk 1 arrives, then runs all chunks from that call together as one batch.
Separate API calls define separate logical batches. Do not split one intended batch across several calls and rely on the trainer to merge them. The fragments may run as smaller trainer batches, paying fixed batch overhead more often and using the accelerators less efficiently. This reduces trainer throughput.
Large-result timeouts
If retrieving a large future result times out, manually enable metadata-only future retrieval for the trainer and client. This mode is currently opt-in while backend support is being rolled out.
forward(datums, loss_type)
Forward-only pass (no gradient computation). Useful for computing reference logprobs in GRPO/DPO:
Built-in loss types like
"cross_entropy" require datums with target_tokens in loss_fn_inputs. Datums built with datum_from_model_input_weights will fail. Use the target-token tinker.Datum example in Loss Functions for built-in losses, or use forward_backward_custom with the weight-based format in Building datums and the custom-loss pattern in Example: simple cross-entropy.forward_backward(datums, loss_type, loss_fn_config=None)
Run a combined forward and backward pass with a built-in trainer-side loss. The complete datums argument is one logical batch, even when the SDK splits it into parallel transport chunks:
forward_backward_custom(datums, loss_fn)
Forward + backward with your custom loss function. See Loss Functions for details:
output="embedding" and choose pooling="mean" or "last"; your loss function then receives pooled embedding tensors instead of logprobs:
optim_step(adam_params, grad_accumulation_normalization=None)
Apply optimizer update after accumulating gradients:
grad_accumulation_normalization to control how accumulated gradients are normalized. The default None leaves gradients unchanged. Pass GradAccNormalization.NUM_LOSS_TOKENS, GradAccNormalization.NUM_SEQUENCES, or GradAccNormalization.NONE rather than raw strings. See the cookbook skill reference for operational guidance.
save_weights_for_sampler(name, checkpoint_type=None)
Save serving-compatible sampler weights and return a future. This is the normal Tinker-shaped API:
path is a public snapshot identity, not a raw storage URI.
save_weights_for_sampler_ext(name, checkpoint_type)
Fireworks-specific extension that returns a concrete SaveSamplerResult instead of a future:
On full-parameter training, only
checkpoint_type="base" produces a promotable blob; "delta" cannot be promoted. LoRA is always promotable. See Checkpoint kinds for the full promotability matrix.save_weights_for_sampler_ext saves the snapshot only; it does not mutate a deployment. To serve the snapshot, pass result.snapshot_name to the managed service weight-sync path, or use create_sampling_client(model_path=...) / create_deployment_sampler(model_path=...), which sync and return a sampler.
save_state(name, timeout=None)
Save full train state (weights + optimizer) for resume:
load_state_with_optimizer(name)
Restore full train state (weights + optimizer) from a checkpoint:
load_state(name)
Load model weights from a checkpoint without restoring optimizer state. The optimizer is reset so the next optim_step starts fresh:
load_adapter(adapter_ref)
Load a Hugging Face PEFT adapter model into the current LoRA session. Pass a Fireworks model resource name for a promoted adapter, such as accounts/<ACCOUNT_ID>/models/<ADAPTER_MODEL_ID>. This is a weights-only warm start; it does not restore optimizer state, scheduler state, or data cursor.
list_checkpoints()
List available DCP checkpoints from the trainer. Returns a list[str]:
resolve_checkpoint_path(checkpoint_name, source_job_id)
Resolve a checkpoint path for cross-job resume:
SaveSamplerResult
Returned bysave_weights_for_sampler_ext:
GradAccNormalization
Enum for the advancedoptim_step grad_accumulation_normalization parameter:
Related guides
- Training and Sampling — managed service training + sampler refresh walkthrough
- Loss Functions — built-in and custom loss functions
- Saving and Loading — checkpoint details