BASETEN_API_KEY from the quickstart. For a model or configuration that needs dedicated capacity, see Dedicated Loops.
Turn a dataset into training data
Each training example becomes aDatum: input tokens plus loss targets that mask the prompt and supervise the answer, with the same label shift the quickstart uses. For chat data, render the conversation with the tokenizer’s chat template and treat the final assistant message as the answer.
Install the dataset library in your project:
train_dataset.py:
train_dataset.py
Run the training loop
Each iteration is the quickstart’s round trip over a batch: oneforward_backward() on a list of Datum, one optim_step(). Append:
train_dataset.py
Save a resumable checkpoint
As in the quickstart, save both types of checkpoint:save_state() preserves training and optimizer state, while save_weights_for_sampler() publishes the adapter for sampling and deployment. Append:
train_dataset.py
load_state_with_optimizer() with the saved state.path.
Sample from the checkpoint
Create a sampling client from the returned sampler checkpoint, then generate a completion without creating an inference deployment. The serverless client stays pinned to that checkpoint; publish again and create a new client to sample later weights. Append:train_dataset.py
weights/; sampler paths use sampler_weights/. Keep the returned paths rather than constructing them, because checkpoint names can include a unique suffix.
A completion checks that sampling works. A small training slice doesn’t establish a change in dialect, and batch losses need not fall at every step. To measure whether training helped, compare the checkpoint with the base model on a held-out evaluation.
Shut down the run
Closing the SDK clients releases local connections and stops the training client’s keepalive. An idle serverless run incurs no token charges. To end the run and its paired sampler explicitly, use the printed run ID. With the Baseten CLI installed, end the run:-
Deactivate the run, and confirm when prompted:
-
Check that the run’s
status.nameisINACTIVE:
Next steps
- Deploy a checkpoint: Serve the returned sampler checkpoint as an inference endpoint.
- Hyperparameters: Apply a learning-rate schedule to this training loop.
- Loss functions: Swap
cross_entropyforimportance_sampling,ppo, and other objectives when you move past SFT.