Prerequisites
- Baseten account: Sign up for Baseten.
- API key: Generate an API key from Settings > API keys.
-
Hugging Face token: Store a Hugging Face access token as a Baseten secret named
hf_access_token. The deploy step at the end of this tutorial needs it to download the base model. -
uv: This guide uses
uvxto run Truss commands without a separate install step. Log in to Baseten:
Create your training project
Write your configuration file
Your configuration file uses thetruss_train library to define your training
infrastructure as Python objects:
TrainingProject: the top-level container for your project.TrainingJob: a single job within a project, combining:
config.py:
config.py
CacheConfig avoids re-downloading models and datasets between jobs.
CheckpointingConfig tells Baseten to sync your saved checkpoints so you can
deploy them later.
Write your training scripts
Createrun.sh to install dependencies and launch training. This tutorial uses
pip install in the start command, but you can also pre-install dependencies in
a custom base image.
run.sh
train.py is your own training code. Baseten runs it as-is, so you can use
any framework or training loop that works locally. This example fine-tunes
Qwen3-4B on the
pirate-ultrachat-10k
dataset using LoRA with TRL (Transformer
Reinforcement Learning). The dataset teaches the model to respond in pirate
dialect, so you’ll know fine-tuning worked when the deployed model starts saying
“Ahoy, matey!”
train.py
Save checkpoints to
$BT_CHECKPOINT_DIR so Baseten can sync and deploy them.
Baseten sets this variable automatically when checkpointing is enabled.save_steps=25 and max_steps=50, the trainer saves LoRA checkpoints at
steps 25 and 50.
Submit your training job
Now that your project is set up, submit your training job. The CLI packages your files, creates the training project, and starts the job on your specified GPU.job_id to use in the next steps.
Monitor your training job
Tail logs in real time with the job ID from the previous step.Deploy your trained model
Checkpoints sync while training runs: the logs show each one move fromSYNCING to COMPLETE as it’s saved. When the job finishes, you’ll see:
- CLI
- Dashboard
To deploy a checkpoint:Deploy your checkpoint to Baseten’s inference platform. The deployment downloads
the base model weights and serves them with your LoRA adapter using vLLM. This
step uses the Follow the interactive prompts to select a checkpoint, name your model, and choose a GPU.To script this step instead of answering prompts, pass
hf_access_token secret from the prerequisites because the
serving layer downloads the base model separately.--config with a DeployCheckpointsConfig and --non-interactive; see serve your trained model.Test your deployment
Call your deployed model using the OpenAI-compatible chat format. Themodel field matches the checkpoint name you selected during deployment.
- cURL
- Python
- CLI
To call your deployed model:Set your API key as an environment variable:Then send the request:
<think> block from its reasoning mode:
Next steps
- Train on your own data: swap the dataset, mount weights through BDN, and scale the hardware.
- Monitor and manage training jobs: for logs, metrics, and job lifecycle commands.
- Training SDK reference: for all configuration options, including base images, secrets, private registries, and
.truss_ignoresyntax. - Browse the ML Cookbook: for framework examples and advanced recipes.