Trainer: PEFT/TRL on Modal, not Tinker
Every other fine-tune in this project runs on Tinker. Tinker refuses to load a
checkpoint trained against Qwen/Qwen3.5-9B-Base into a Qwen/Qwen3.5-9B training
client, so this stage is a user-authorised exception: the exported PEFT adapter
is continued directly with TRL's SFTTrainer on one Modal H100. Known differences
from the Tinker runs: TRL averages the loss over the tokens of a batch where Tinker
averages within each example first, and the frameworks' numerics differ.
Recipe
Table with columns: setting, value| setting | value |
|---|
| epochs / effective batch | 1 / 16 sequences |
| optimizer steps | 302 |
| optimizer | AdamW, lr 0.0001, betas 0.9/0.999, eps 1e-08, weight decay 0.01 |
| schedule | cosine, warmup ratio 0.05 |
| gradient clipping | 1.0 |
| LoRA | r=64, alpha=32, dropout=0.0, 12 target module names |
| max sequence length | 4096 |
| precision / hardware | bf16, 1x H100 |
| seed | 0 |
| held-out NLL before -> after | 0.9110 -> 0.1784 |
| final training loss | 0.2241 |
| training wall clock | 291 s |
Rendering: the cookbook renderer qwen3_5_disable_thinking (the empty <think>
block), asserted token-for-token against the model's own chat template; loss falls on
the final assistant turn only, including its turn-end token.
Alpha deviation. r=64 with lora_alpha=32 is an effective LoRA scale of
0.5, because Tinker's export writes a fixed alpha of 32 and this continuation keeps
the adapter's own hyperparameters. The paper this recipe follows (arXiv 2605.02087)
used alpha 128 at rank 64, i.e. scale 2. The learning rate was not compensated. The
no-MSM control's fresh LoRA copies rank, alpha, dropout and target modules from the
MSM adapter's own config, so the grid's cells differ only in the weights they start
from.
Held-out NLL
The mean over held-out examples of each example's mean NLL on its supervised tokens
(matching the Tinker runs' loss_reduction: mean). The "before" number is measured on
the initial weights over the same held-out rows, so it shows how much of the AFT data
the initialisation already predicts: these v3 organisms start at 0.81 to 1.02 and a
fresh LoRA on the bare instruct model starts at 1.09 to 1.17.
Files
Table with columns: file, sha256| file | sha256 |
|---|
README.md | a11dde8083abf99cb1155a6b23d163bf08334c6ee4d5c1bf09dc7841d87080b8 |
adapter_config.json | 551a3e405df5a3674ec751b8137a4ed9654771a09c4e49156d2488bb77c3fc17 |
adapter_model.safetensors | ab76b307407ca7838a867bdbc0cc3c8095e6cf7c60ef66144dd6141044e20cfe |
chat_template.jinja | a4aee8afcf2e0711942cf848899be66016f8d14a889ff9ede07bca099c28f715 |