Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
6983b6f
Pin the distillation objective before refactoring
qgallouedec Jul 19, 2026
d443d3b
Pin on-policy and off-policy training end to end
qgallouedec Jul 19, 2026
a8bb14c
Document the num_items_in_batch denominator bug
qgallouedec Jul 19, 2026
98eef79
Move IW-OPD to a dedicated experimental trainer
qgallouedec Jul 19, 2026
b65f8a7
Extract the teacher-server path into ServerDistillationTrainer
qgallouedec Jul 19, 2026
f75cd7e
Remove the local sparse top-1 loss path from the base trainer
qgallouedec Jul 19, 2026
6458636
Remove top-k support from the base generalized JSD loss
qgallouedec Jul 19, 2026
166808b
Validate the teacher by vocab size instead of tokenizer identity
qgallouedec Jul 19, 2026
952b0c3
Deprecate `lmbda` on/off-policy mixing
qgallouedec Jul 19, 2026
55e5973
Point the GKD paper reproduction at GKDTrainer
qgallouedec Jul 19, 2026
0b72a4e
Remove `lmbda` and the off-policy training branch
qgallouedec Jul 19, 2026
2527d3d
style
qgallouedec Jul 20, 2026
1c5bdea
Merge branch '04-move-iw-opd' into 05-extract-server-distillation
qgallouedec Jul 20, 2026
f232c18
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
7aab597
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
6efeb9f
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
0a4a3d6
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
5eabac4
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
aa0b5fb
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
e058764
style
qgallouedec Jul 20, 2026
4c65faf
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
3500348
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
de167a9
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
1908e5f
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
5a4f715
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
f270c1f
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
456df91
Fix IW-OPD paper metadata used in the model card
qgallouedec Jul 20, 2026
9ecf348
Merge branch '04-move-iw-opd' into 05-extract-server-distillation
qgallouedec Jul 20, 2026
28382eb
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
c4acfb4
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
d95c977
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
f64f96c
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
614bb6b
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
5cd0e91
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
26038dd
Remove stale on/off-policy comments after the off-policy removal
qgallouedec Jul 20, 2026
3515b22
Accept a `prompt` column alongside `messages`
qgallouedec Jul 20, 2026
4e5d06f
Accept a `prompt` column alongside `messages`
qgallouedec Jul 20, 2026
dfbf0e5
style
qgallouedec Jul 20, 2026
89494f2
Relax self-distillation train-loss assertion to tolerate fp noise
qgallouedec Jul 20, 2026
9b5ad81
Fix server-config construction to only copy dataclass init fields
qgallouedec Jul 20, 2026
d616372
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
1341b51
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
33667d3
Merge branch 'main' into 01-pin-distillation-objective
qgallouedec Jul 20, 2026
041e337
Merge branch '01-pin-distillation-objective' into 02-pin-on-and-off-p…
qgallouedec Jul 20, 2026
9e989d1
Merge branch '02-pin-on-and-off-policy-training' into 03-document-num…
qgallouedec Jul 20, 2026
b2c2b73
Merge branch '03-document-num-items-in-batch-bug' into 04-move-iw-opd
qgallouedec Jul 20, 2026
97cb164
Merge branch '04-move-iw-opd' into 05-extract-server-distillation
qgallouedec Jul 20, 2026
7db5120
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
2d2d32f
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
e63069d
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
e4764cc
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
800b68b
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
b290c1a
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
cad0c5e
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
c978997
0.5 -> 0.25
qgallouedec Jul 20, 2026
acc70cc
Merge branch 'main' into 01-pin-distillation-objective
qgallouedec Jul 20, 2026
854d89d
Merge branch '01-pin-distillation-objective' into 02-pin-on-and-off-p…
qgallouedec Jul 20, 2026
b9f99f1
Diverge the teacher in the on/off-policy param-update pin
qgallouedec Jul 20, 2026
911b0e5
Merge branch 'main' into 01-pin-distillation-objective
qgallouedec Jul 20, 2026
6e8a528
Merge branch '01-pin-distillation-objective' into 02-pin-on-and-off-p…
qgallouedec Jul 20, 2026
fd67ed4
Merge branch '02-pin-on-and-off-policy-training' into 03-document-num…
qgallouedec Jul 20, 2026
a4831c6
Merge branch '03-document-num-items-in-batch-bug' into 04-move-iw-opd
qgallouedec Jul 20, 2026
222615d
Merge branch '04-move-iw-opd' into 05-extract-server-distillation
qgallouedec Jul 20, 2026
15a7f6f
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
34e801a
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
0a79977
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
cff3b68
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
1f8690a
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
4871948
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
8057ca4
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
a0d5328
Merge branch 'main' into 02-pin-on-and-off-policy-training
qgallouedec Jul 20, 2026
f750ddd
Merge branch '02-pin-on-and-off-policy-training' into 03-document-num…
qgallouedec Jul 20, 2026
d0d7de3
Merge branch '03-document-num-items-in-batch-bug' into 04-move-iw-opd
qgallouedec Jul 20, 2026
e8ac1df
Merge branch '04-move-iw-opd' into 05-extract-server-distillation
qgallouedec Jul 20, 2026
0b4fa84
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
b4f7d75
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
f7d9dc8
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
5914158
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
b8f85a4
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
1492b20
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
d8892e4
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
26eba3c
remove unused import
qgallouedec Jul 20, 2026
f51acd6
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
0462f03
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
ce31b5d
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
989ae4d
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
15e24cc
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
3cbd70f
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
24b235c
Merge remote-tracking branch 'origin/main' into pr/qgallouedec/6452
qgallouedec Jul 20, 2026
5e05b9d
Rework the num_items_in_batch xfail: applied denominator, on-policy
qgallouedec Jul 20, 2026
23784c3
Use a non-strict xfail for the num_items_in_batch pin
qgallouedec Jul 20, 2026
7615bfe
Merge branch '03-document-num-items-in-batch-bug' into 04-move-iw-opd
qgallouedec Jul 20, 2026
82a2017
Merge branch '04-move-iw-opd' into 05-extract-server-distillation
qgallouedec Jul 20, 2026
3eaabc7
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
4d9ac2b
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
e881f07
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
7632074
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
4b3c62a
Merge branch 'main' into 04-move-iw-opd
qgallouedec Jul 20, 2026
685d3f5
Merge branch '04-move-iw-opd' into 05-extract-server-distillation
qgallouedec Jul 20, 2026
7bf9d07
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
40f96ed
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
40ee117
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
821d875
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
9ad8c2a
Merge remote-tracking branch 'origin/main' into pr/qgallouedec/6454
qgallouedec Jul 20, 2026
fc5b481
Merge branch '05-extract-server-distillation' into 06-remove-local-sp…
qgallouedec Jul 20, 2026
6f8c4a7
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
59a804d
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
f23fc4f
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
d3be590
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
ba3aa35
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
a41d5df
Merge remote-tracking branch 'origin/main' into pr/qgallouedec/6455
qgallouedec Jul 20, 2026
f069c1e
Merge branch '06-remove-local-sparse-top1' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
58c13be
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
01b6f67
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
3faa04b
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
1375800
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
43c42f4
Merge remote-tracking branch 'origin/11-remove-lmbda-offpolicy' into …
qgallouedec Jul 20, 2026
1a58484
Merge remote-tracking branch 'origin/main' into 07-remove-topk-from-jsd
qgallouedec Jul 20, 2026
45fdb23
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
0bca659
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
939143d
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
0a08547
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
901b155
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
93f6f55
Drop the loss_top_k usage-tips bullet from the docs
qgallouedec Jul 20, 2026
dc4c01b
Merge branch '07-remove-topk-from-jsd' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
356eaab
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
bca4b35
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
825de01
Merge branch 'main' into 08-teacher-vocab-validation
qgallouedec Jul 20, 2026
6d09aa1
Merge branch '08-teacher-vocab-validation' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
5b99699
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
e185842
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
4365c60
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
94a185d
Merge branch 'main' into 09-deprecate-lmbda
qgallouedec Jul 20, 2026
e9365a6
Merge branch '09-deprecate-lmbda' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
a320f99
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
16ec8c3
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
8567f94
Merge branch 'main' into 10-move-gkd-paper-repro
qgallouedec Jul 20, 2026
9ef74d9
Merge branch '10-move-gkd-paper-repro' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
109333e
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
782f088
Merge branch 'main' into 11-remove-lmbda-offpolicy
qgallouedec Jul 20, 2026
88795b0
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
ddcb836
Drop leftover lmbda=1.0 from the num_items xfail test
qgallouedec Jul 20, 2026
d36d174
Merge branch '11-remove-lmbda-offpolicy' into 12-accept-prompt-column
qgallouedec Jul 20, 2026
71883b9
Merge remote-tracking branch 'origin/main' into 12-accept-prompt-column
qgallouedec Jul 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions tests/experimental/test_distillation_trainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,27 @@ def test_train_updates_params(self):
for name, param in previous_params.items():
assert not torch.equal(param, trainer.model.get_parameter(name)), f"Parameter {name} has not changed."

@pytest.mark.xfail(
strict=True,
reason="Prompt-only datasets carry no dataset-completion tokens, so num_items_in_batch (counted from the raw "
"dataloader labels before on-policy generation replaces them) is 0 and the loss is sum / 0 = NaN. Un-xfail "
"when the num_items_in_batch denominator is fixed (plan 5.6).",
)
def test_train_runs_with_prompt_only_dataset(self):
"""The forward-looking prompt-only format should train end to end once the loss denominator is fixed."""
dataset = load_dataset("trl-internal-testing/zen", "conversational_prompt_only", split="train")
trainer = DistillationTrainer(
model=self.model_id,
teacher_model=self.model_id,
args=self._make_args(max_steps=1, learning_rate=0.1),
train_dataset=dataset,
processing_class=self.tokenizer,
)

trainer.train()

assert all(torch.isfinite(param).all() for param in trainer.model.parameters())
Comment thread
cursor[bot] marked this conversation as resolved.

@pytest.mark.xfail(
reason="On-policy, num_items_in_batch is computed by transformers from the raw dataloader labels before "
"generation replaces the completions, and _RepeatBatchDataLoader repeats one generation batch across the "
Expand Down
27 changes: 19 additions & 8 deletions trl/experimental/distillation/distillation_trainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,15 @@ def _jsd_divergence(student_log_probs, teacher_log_probs, beta, support_mask=Non
class _DistillationCollator:
"""Data collator for the distillation trainer with independent prompt/completion budgets.

Accepts either of two dataset formats:

- a ``prompt`` column (prompt-only, the forward-looking format shared with GRPO): the student generates the
completion on-policy, so there is nothing to train on in the dataset;
- a ``messages`` column (language-modeling format): the prompt is everything before the last assistant turn and the
completion is that turn.

Unlike ``DataCollatorForChatML``, this collator tokenizes prompts and completions separately so that long
completions can never truncate the prompt to empty. It also handles prompt-only data (no assistant completions),
which is what on-policy distillation uses.
completions can never truncate the prompt to empty.
"""

def __init__(
Expand All @@ -176,11 +182,16 @@ def __call__(self, examples: list[dict[str, Any]]) -> dict[str, torch.Tensor]:
all_prompt_ids: list[list[int]] = []

for example in examples:
messages = example[self.messages_key]

# Split: prompt = everything before the last assistant turn, completion = last assistant turn
has_completion = len(messages) > 1 and messages[-1].get("role") == "assistant"
prompt_messages = messages[:-1] if has_completion else messages
if "prompt" in example:
# Prompt-only dataset (the forward-looking format, shared with GRPO): no completion to train on, the
# student generates one on-policy.
prompt_messages = example["prompt"]
has_completion = False
Comment thread
qgallouedec marked this conversation as resolved.
else:
messages = example[self.messages_key]
# Split: prompt = everything before the last assistant turn, completion = last assistant turn
has_completion = len(messages) > 1 and messages[-1].get("role") == "assistant"
prompt_messages = messages[:-1] if has_completion else messages
Comment thread
cursor[bot] marked this conversation as resolved.

# Tokenize prompt with its own budget using the tokenizer's truncation side
formatted_prompt = self.tokenizer.apply_chat_template(
Expand Down Expand Up @@ -612,7 +623,7 @@ def _get_completion_lengths(self, generated_tokens: torch.Tensor, prompt_width:

def _set_signature_columns_if_needed(self):
super()._set_signature_columns_if_needed()
extra_columns = ["prompts", "prompt_attention_mask", "messages", "chat_template_kwargs", "tools"]
extra_columns = ["prompt", "prompts", "prompt_attention_mask", "messages", "chat_template_kwargs", "tools"]
if self._signature_columns is None:
self._signature_columns = extra_columns
else:
Expand Down
Loading