TRL 1.15.0 Turns On a Triton Fused LM Head by Default, Deprecates use_liger_kernel in Four Trainers and Drops Python 3.10
TRL v1.15.0 scores SFT, DPO, KTO, GRPO and RLOO tokens with a Triton fused LM head by default, deprecates use_liger_kernel in four trainers and requires Python 3.11 or later.
Overview
The huggingface/trl repository published v1.15.0 on October 8, 2026 (UTC), according to the GitHub release record. The headline change in the release notes is that SFT, DPO, KTO, GRPO, RLOO and Distillation now score tokens with a fused LM head. The notes say the feature is on by default and needs nothing to turn it on. The release also carries breaking changes, including a deprecation of use_liger_kernel in four trainers and the end of Python 3.10 support.
What Changed
Fused LM head
Per the release notes, a Triton kernel projects the hidden states through the LM head in tiles and reduces them directly to per-token log-probs and entropy, so the [batch, seq, vocab] logits tensor is never built. The notes say scoring needs Triton on a GPU, on Linux with CUDA, ROCm or XPU.
The memory and sequence-length figures below are the TRL maintainers’ own benchmark results, as published in the release notes. They were measured with gemma-3-1b (a 262k vocabulary), 79 GiB of GPU memory, bf16, batch size 1, gradient checkpointing and sdpa attention.
- Maximum trainable sequence length rose from 10,240 to 59,392 tokens for DPO (5.80x), from 9,216 to 63,488 for KTO at batch size 2 (6.89x), and from 20,480 to 107,520 for SFT with
loss_type="nll"(5.25x). - GRPO and RLOO, measured on scoring only, rose from 28,672 to 114,688 tokens (4.00x) and from 23,552 to 100,352 tokens (4.26x).
- SFT’s default
chunked_nllis unchanged at 107,520 tokens, which the notes explain by saying it already avoided full logits. - At 8,192 tokens, the notes report DPO peak memory falling from 48.97 GiB to 12.00 GiB (-75.5%) and KTO from 64.91 GiB to 11.98 GiB (-81.5%).
The notes state that steps are 2.3% to 10.9% faster at 8,192 tokens; the throughput column for the five trainers in the table lists ratios from 1.023x to 1.045x. They also say: “The gain is largest for small models with large vocabularies.”
The benchmark details in the same notes describe a single B300 with the PyTorch allocator capped at 79 GiB, random bf16 weights and synthetic token ids. The notes list what was left out: “Not measured: H100 hardware itself, flash-attention (sdpa only), real generation, multi-GPU.” For GRPO and RLOO, generation was replaced with fixed random completions, so only scoring was measured.
Other additions
- Selective activation checkpointing in SFT, enabled with
gradient_checkpointing_kwargs={"selective": True}. The release notes say PEFT combined with DeepSpeed ZeRO-3 is rejected. assistant_only_loss=Truenow works on vision datasets in SFT. According to the notes, the underlying fix ships intransformers5.18, and older versions still raise an error that now names the required version.- Support for vLLM 0.31.0 was added, and support for vLLM 0.20.0, 0.20.1 and 0.20.2 was dropped. The Machine Herald covered vLLM 0.31 when it shipped on October 5.
Breaking Changes
The release notes list these changes for existing users:
- A PEFT adapter on
lm_headnow raises an error in the affected trainers; the notes recommendmodules_to_save=["lm_head"]instead. use_liger_kernel=Trueis deprecated inDPOTrainer,KTOTrainer,GRPOTrainerandRLOOTrainerand is to be removed in v2.0.0. Liger’s layer kernels still apply, butfused_linear_cross_entropyis forced toFalse, and setting it explicitly raises an error. The suggested replacement ismodel_init_kwargs={"use_kernels": True}.- In DPO and KTO,
compute_metricsandcompute_loss(..., return_outputs=True)still receive full logits through an extra forward pass taken only when they are used. Both now warn that this is deprecated and scheduled for removal in v2.0.0. - Python 3.10 support is dropped. The pyproject.toml at the v1.15.0 tag declares
requires-python = ">=3.11". - The notes also list a refusal of
nn.DataParalleland the removal of the experimental MiniLLM trainer.
What We Don’t Know
All performance figures come from the TRL maintainers’ release notes; this briefing found no independent replication. The benchmarks use a single gemma-3-1b configuration with random weights and synthetic data on one B300 GPU, and the notes say H100 hardware, flash-attention and multi-GPU setups were not measured. The release table also has no row for Distillation, even though the notes list it among the trainers using the fused LM head.