TRL

Fine-tune and align language models with SFT, DPO, GRPO, and RLHF trainers built on Hugging Face Transformers.

Library
PyPI
v1.12.0
19,235stars
Apache License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
94/100Excellent
Development Activity100
Maintenance100
Community76
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
88/100Excellent
Architecture85
Code Quality90
Innovation85
Learning Curve90

TRL (Transformer Reinforcement Learning) is Hugging Face’s library for post-training foundation models. It ships dedicated trainer classes — SFTTrainer, DPOTrainer, GRPOTrainer, KTOTrainer, RewardTrainer, RLOOTrainer, and a DistillationTrainer — each a thin, well-tested wrapper around the Transformers Trainer that adds the loss functions, data collation, and generation loops specific to its post-training method. Because every trainer shares a common base class and config pattern, moving from supervised fine-tuning to preference optimization to RL-style policy training is a matter of swapping the trainer and config classes rather than re-deriving the training loop.

The library is built directly on top of the Hugging Face ecosystem: Transformers for models and tokenizers, Datasets for data loading, Accelerate for distributed training (DDP, FSDP, DeepSpeed ZeRO), and it integrates with PEFT for LoRA/QLoRA training on constrained hardware and with vLLM for fast generation during RL-style training loops like GRPO. A trl CLI wraps the most common recipes (trl sft, trl dpo, trl kto) so straightforward fine-tuning jobs can be launched without writing a training script, while a trl.experimental namespace holds newer, less stable trainers (async GRPO, distillation variants, and more) that graduate into the stable API as they mature.

What You Get

  • Trainer classes for the major post-training methods — SFTTrainer, DPOTrainer, GRPOTrainer, KTOTrainer, RewardTrainer, and RLOOTrainer — each paired with a matching Config dataclass.
  • A trl command-line tool (trl sft, trl dpo, trl kto) for launching standard fine-tuning and preference-optimization jobs without writing training code.
  • Native integration with Accelerate for multi-GPU/multi-node training (DDP, FSDP, DeepSpeed ZeRO) and with PEFT for LoRA/QLoRA on modest hardware.
  • A reward-function library (trl.rewards) with ready-made verifiers (e.g. accuracy_reward, reasoning_accuracy_reward) for GRPO-style RL training on reasoning tasks.
  • An experimental namespace (trl.experimental) exposing newer trainers — async GRPO, distillation variants, replay-buffer GRPO — ahead of their stabilization.

Common Use Cases

  • Supervised fine-tuning a base model on an instruction or chat dataset with SFTTrainer before further alignment.
  • Aligning a model to human or synthetic preference data with DPOTrainer or KTOTrainer instead of running full RLHF with a separate reward model.
  • Training reasoning models with GRPOTrainer against verifiable reward functions, the method used to train models like DeepSeek-R1.
  • Training a reward model with RewardTrainer to score generations for a downstream RLHF or best-of-n pipeline.
  • Distilling a large teacher model into a smaller student model via DistillationTrainer.

Under The Hood

Architecture Every trainer (SFTTrainer, DPOTrainer, GRPOTrainer, KTOTrainer, RewardTrainer, RLOOTrainer, DistillationTrainer) subclasses a shared _BaseTrainer that itself wraps transformers.Trainer, layering method-specific loss computation, data collation, and generation logic on top of Transformers’ existing training loop rather than reimplementing it; each trainer pairs with a matching Config dataclass (e.g. GRPOConfig, DPOConfig) that extends transformers.TrainingArguments, keeping the hyperparameter surface consistent across methods. The trl.experimental namespace mirrors this pattern for unstable methods (async GRPO, distillation, ORPO, and more) using the same base-trainer/config contract, so new post-training algorithms can be added without touching the stable trainer classes, and adding a new method means writing one trainer/config pair rather than modifying shared core logic.

Tech Stack TRL is pure Python (3.10–3.14) built with setuptools, depending on Hugging Face’s own stack — Transformers for models/tokenizers, Accelerate for distributed execution, Datasets for data loading, and PyTorch as the underlying tensor/autograd engine. Optional extras wire in PEFT for LoRA/QLoRA, bitsandbytes for quantization, a version-pinned vLLM plus supporting HTTP libraries for fast generation during GRPO-style rollouts, DeepSpeed, Liger kernels for fused ops, and specialized reward-scoring extras. A console-script entry point exposes the trl CLI, and CI runs the suite across multiple Python versions and against Transformers’ own development branch to catch upstream breakage early.

Code Quality The test suite is extensive, with dozens of files covering each trainer and loss function individually plus dedicated distributed, experimental, and invariant-testing subdirectories, run via pytest with coverage and flake-tolerant reruns, and a separate CI workflow gates the experimental namespace. Core modules use modern typed Python with dataclass-based configs, clear docstrings, and consistent license headers; pre-commit hooks and a documentation-build extra enforce formatting and doc quality before merge. Error handling favors explicit warnings and guard assertions over silent fallbacks in the trainer code reviewed.

What Makes It Unique TRL’s distinguishing choice is shipping new post-training research — GRPO, KTO, RLOO, and several experimental variants — as production-ready trainer subclasses within a short window of publication, with the experimental namespace formalizing an explicit path from research code to stable API. Its GRPOTrainer integrates a separate inference engine directly into the training loop for fast on-policy generation, a nontrivial engineering problem that most from-scratch RLHF implementations avoid solving.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search