Skip to content

Configuration

Configs are plain YAML composed by Hydra. The tree ships inside the package (src/toolbox/configs), so pip install users get it too.

configs/
├── config.yaml        primary config: defaults list + name, seed, output_dir, callbacks
├── experiment/        complete experiments (`experiment=grpo_tiny`)
├── model/  data/  objective/  trainer/  optimizer/  scheduler/
├── tokenizer/  reward/  advantage/  env/  strategy/  launcher/

Component specs

Every component section is a spec: a name that selects a registered factory, plus its keyword arguments.

objective:
  name: grpo          # → OBJECTIVES.get("grpo")
  clip_eps: 0.2       # → GRPOLoss(clip_eps=0.2, kl_coef=0.04)
  kl_coef: 0.04

There is no _target_: package.module.Class path, so configs survive refactors. The valid names are in the component catalog and in toolbox list.

Experiments

An experiment selects groups with override and then patches values:

configs/experiment/grpo_tiny.yaml
# @package _global_
defaults:
  - override /model: tiny_gpt
  - override /data: prompts_arithmetic
  - override /objective: grpo
  - override /trainer: grpo
  - override /reward: exact_match
  - override /advantage: group_relative

name: grpo_tiny
trainer: {max_steps: 20, batch_size: 4, group_size: 4, max_new_tokens: 8}
optimizer: {lr: 1.0e-4}

Overrides cheat-sheet

Goal Override
Swap a component objective=ipo, model=qwen2_5_0_5b_lora, strategy=fsdp
Change a value trainer.max_steps=1000 optimizer.lr=1e-5
Add a key that is not in the config +trainer.top_k=50
Remove a key ~scheduler
Start from a checkpoint model.init_from=runs/sft/checkpoints/last.pt
Resume a run trainer.resume_from=auto
Your own configs first --config-dir path/to/configs
Use your own components imports: [my_project.losses] in the experiment file

Trainer settings

Loop-level settings live in TrainerConfig and are shared by every trainer:

Key Default Meaning
max_steps 100 optimizer steps
batch_size 16 per-device micro-batch (prompts for grpo)
grad_accum_steps 1 micro-batches per optimizer step
grad_clip 1.0 max global grad norm (0 = off)
precision fp32 fp32 / bf16 / fp16 (autocast; GradScaler for fp16)
device auto auto → CUDA, then MPS, then CPU
log_every / eval_every / save_every 10 / 50 / 0 step intervals (0 = off)
keep_last 2 rolling step_N.pt checkpoints kept
resume_from null path or auto

Keys that are not loop-level (group_size, ppo_epochs, length_normalize, ...) go to the specific trainer's from_builder.