What is supervised
Table with columns: Source, Rows, Tokens, Supervised| Source | Rows | Tokens | Supervised |
|---|
| difficult-advice | 147 | 149,816 | 85.55% |
| TULU3 replay | 2,110 | 1,343,608 | 77.84% |
| Total | 2,257 | 1,493,424 | 78.62% |
Supervision starts immediately after the <|im_start|>assistant\n header — which the model is
given at inference and never has to produce — and ends after the closing <|im_end|>, which it
must produce in order to stop. Everything else is -100.
<|im_start|> MASKED
assistant MASKED
\n MASKED
<think> LOSS <- supervision starts at the first generated token
TRL's assistant_only_loss flag does not work on this model. It requires {% generation %}
markers the chat template lacks, and it re-renders from messages, discarding the think-block
convention baked into the pre-rendered mixture. Spans are derived from the rendered text via the
fast tokenizer's offset mapping instead; TRL receives finished labels.
Reasoning traces
Table with columns: Data, Renders as| Data | Renders as |
|---|
| difficult-advice (147/147 rows) | <think>real reasoning</think> |
| TULU3 replay (0/2,110 rows) | no <think> block at all |
Zero rows carry an empty <think></think> — that pattern is Qwen3.6's explicit
do-not-deliberate marker and trains a model to stop reasoning.
Training
bf16 LoRA (not QLoRA — bitsandbytes does not reliably cover this model's hybrid
linear-attention/SSM layers: 48 of 64 layers are Gated DeltaNet, and none of their projections
receive an adapter, so quantization error there would be uncorrectable). 1×H100 80GB, 96 min.
Table | |
|---|
| r / alpha / dropout | 32 / 64 / 0.05 |
| target modules | regex scoped to model.language_model.* (q/k/v/o/gate/up/down proj) |
| epochs / steps | 1 / 142 |
| batch × grad-accum | 1 × 16 |
| lr / schedule | 1e-4, cosine, 3% warmup |
| max seq len / packing | 2048 / off |
Final train loss 0.878, token accuracy 0.739. Loss is not comparable to the
full-token arm by construction — a different set of tokens is scored.
Status
Not yet evaluated. For reference, the full-token sweep at the same total budget:
Table with columns: Difficult-advice share, ODCV-Bench MR, Agentic-misalignment| Difficult-advice share | ODCV-Bench MR | Agentic-misalignment |
|---|
| 0% (base) | 37.2% | 65.5% |
| 10% | 24.7% | 38.7% |
| 20% | 19.2% | 25.3% |
| 40% | 15.4% | 19.5% |
The 10% row is this adapter's direct counterpart.
Sibling assistant-loss-only arms:
10-90 ·
20-80 ·
40-60
Usage
from peft import PeftModel
from transformers import AutoModelForImageTextToText
model = AutoModelForImageTextToText.from_pretrained("Qwen/Qwen3.6-27B", dtype="bfloat16")
model = PeftModel.from_pretrained(model, "LASR-Callum/qwen3.6-27b-difficult-advice-tulu-lora-10-90-assistant_loss_only")
model = model.merge_and_unload()
Use AutoModelForImageTextToText, not AutoModelForCausalLM — this is a vision-language
checkpoint. Merging drops the base model's 15 mtp.* tensors, so speculative decoding needs them
grafted back.